1 package com.atlassian.plugins.rest.common.feature.jersey;
2
3 import com.atlassian.plugins.rest.common.feature.RequiresDarkFeature;
4 import com.atlassian.sal.api.features.DarkFeatureManager;
5 import com.sun.jersey.api.model.AbstractMethod;
6 import com.sun.jersey.spi.container.ResourceFilter;
7 import com.sun.jersey.spi.container.ResourceFilterFactory;
8 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory;
10
11 import java.util.Collections;
12 import java.util.List;
13 import javax.annotation.Nonnull;
14 import javax.ws.rs.ext.Provider;
15
16 import static com.atlassian.plugins.rest.common.util.ReflectionUtils.getAnnotation;
17 import static com.google.common.base.Preconditions.checkNotNull;
18
19 @Provider
20 public class DarkFeatureResourceFilterFactory implements ResourceFilterFactory {
21 private static final Logger log = LoggerFactory.getLogger(DarkFeatureResourceFilterFactory.class);
22
23 private final DarkFeatureManager darkFeatureManager;
24
25 public DarkFeatureResourceFilterFactory(@Nonnull final DarkFeatureManager darkFeatureManager) {
26 this.darkFeatureManager = checkNotNull(darkFeatureManager);
27 }
28
29 @Override
30 public List<ResourceFilter> create(final AbstractMethod am) {
31 if (getAnnotation(RequiresDarkFeature.class, am) != null ||
32 getAnnotation(RequiresDarkFeature.class, am.getResource()) != null) {
33 log.debug("RequiresDarkFeature annotation found - creating filter");
34 return Collections.<ResourceFilter>singletonList(new DarkFeatureResourceFilter(am, darkFeatureManager));
35 }
36 log.debug("No RequiresDarkFeature annotation found - not creating filter");
37 return Collections.emptyList();
38 }
39 }