1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.core.rest.cxf;
20
21 import java.io.IOException;
22 import javax.ws.rs.container.ContainerRequestContext;
23 import javax.ws.rs.container.ContainerResponseContext;
24 import javax.ws.rs.container.ContainerResponseFilter;
25 import javax.ws.rs.core.EntityTag;
26 import javax.ws.rs.core.HttpHeaders;
27 import javax.ws.rs.ext.Provider;
28 import org.apache.commons.lang3.StringUtils;
29 import org.apache.syncope.common.lib.to.AnyTO;
30 import org.apache.syncope.common.lib.to.EntityTO;
31 import org.apache.syncope.common.lib.to.ProvisioningResult;
32
33
34
35
36
37 @Provider
38 public class AddETagFilter implements ContainerResponseFilter {
39
40 @Override
41 public void filter(final ContainerRequestContext reqCtx, final ContainerResponseContext resCtx) throws IOException {
42 if (resCtx.getEntityTag() == null) {
43 AnyTO annotated = null;
44 if (resCtx.getEntity() instanceof AnyTO) {
45 annotated = (AnyTO) resCtx.getEntity();
46 } else if (resCtx.getEntity() instanceof ProvisioningResult) {
47 EntityTO entity = ((ProvisioningResult<?>) resCtx.getEntity()).getEntity();
48 if (entity instanceof AnyTO) {
49 annotated = (AnyTO) entity;
50 }
51 }
52 if (annotated != null) {
53 String etagValue = annotated.getETagValue();
54 if (StringUtils.isNotBlank(etagValue)) {
55 resCtx.getHeaders().add(HttpHeaders.ETAG, new EntityTag(etagValue).toString());
56 }
57 }
58 }
59 }
60 }