1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.ext.scimv2.cxf;
20
21 import java.io.IOException;
22 import java.time.OffsetDateTime;
23 import javax.ws.rs.container.ContainerRequestContext;
24 import javax.ws.rs.container.ContainerResponseContext;
25 import javax.ws.rs.container.ContainerResponseFilter;
26 import javax.ws.rs.core.EntityTag;
27 import javax.ws.rs.core.HttpHeaders;
28 import javax.ws.rs.ext.Provider;
29 import org.apache.commons.lang3.StringUtils;
30 import org.apache.syncope.ext.scimv2.api.data.SCIMGroup;
31 import org.apache.syncope.ext.scimv2.api.data.SCIMUser;
32
33 @Provider
34 public class AddETagFilter implements ContainerResponseFilter {
35
36 @Override
37 public void filter(final ContainerRequestContext reqCtx, final ContainerResponseContext resCtx) throws IOException {
38 if (resCtx.getEntityTag() == null) {
39 OffsetDateTime lastModified;
40 if (resCtx.getEntity() instanceof SCIMUser) {
41 lastModified = ((SCIMUser) resCtx.getEntity()).getMeta().getLastModified();
42 if (resCtx.getEntity() instanceof SCIMGroup) {
43 lastModified = ((SCIMGroup) resCtx.getEntity()).getMeta().getLastModified();
44 }
45
46 if (lastModified != null) {
47 String etagValue = String.valueOf(lastModified.toInstant().toEpochMilli());
48 if (StringUtils.isNotBlank(etagValue)) {
49 resCtx.getHeaders().add(HttpHeaders.ETAG, new EntityTag(etagValue, true).toString());
50 }
51 }
52 }
53 }
54 }
55 }