View Javadoc

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  }