1   package com.atlassian.plugins.rest.common.expand.resolver;
2   
3   import com.atlassian.plugins.rest.common.expand.EntityExpander;
4   import static com.google.common.base.Preconditions.checkNotNull;
5   
6   import java.util.List;
7   
8   public class ChainingEntityExpanderResolver implements EntityExpanderResolver
9   {
10      private final List<EntityExpanderResolver> resolvers;
11  
12      public ChainingEntityExpanderResolver(List<EntityExpanderResolver> resolvers)
13      {
14          for (EntityExpanderResolver resolver : checkNotNull(resolvers))
15          {
16              if (resolver == null)
17              {
18                  throw new NullPointerException("Resolver items cannot be null!");
19              }
20          }
21          this.resolvers = resolvers;
22      }
23  
24      public boolean hasExpander(Class<?> type)
25      {
26          checkNotNull(type);
27          for (EntityExpanderResolver resolver : resolvers)
28          {
29              if (resolver.hasExpander(type))
30              {
31                  return true;
32              }
33          }
34          return false;
35      }
36      
37      public <T> EntityExpander<T> getExpander(Class<? extends T> type)
38      {
39          for (EntityExpanderResolver resolver : resolvers)
40          {
41              final EntityExpander<T> expander = resolver.getExpander(type);
42              if (expander != null)
43              {
44                  return expander;
45              }
46          }
47          return null;
48      }
49  }