1   package com.atlassian.plugins.codegen;
2   
3   import java.util.List;
4   import java.util.Map;
5   
6   import com.atlassian.plugins.codegen.annotations.DependencyDescriptor;
7   import com.atlassian.plugins.codegen.annotations.asm.ModuleCreatorAnnotationParser;
8   import com.atlassian.plugins.codegen.modules.PluginModuleCreator;
9   import com.atlassian.plugins.codegen.modules.PluginModuleCreatorFactory;
10  import com.atlassian.plugins.codegen.modules.PluginModuleCreatorRegistry;
11  
12  import org.apache.commons.lang.StringUtils;
13  
14  /**
15   * @since 3.6
16   */
17  public class PluginModuleCreatorFactoryImpl implements PluginModuleCreatorFactory
18  {
19  
20      private final PluginModuleCreatorRegistry creatorRegistry;
21      private final ModuleCreatorAnnotationParser creatorAnnotationParser;
22  
23      public PluginModuleCreatorFactoryImpl() throws Exception
24      {
25          this("");
26      }
27  
28      public PluginModuleCreatorFactoryImpl(String modulePackage) throws Exception
29      {
30          this.creatorRegistry = new PluginModuleCreatorRegistryImpl();
31          this.creatorAnnotationParser = new ModuleCreatorAnnotationParser(creatorRegistry);
32          doParse(modulePackage);
33      }
34  
35      @Override
36      public PluginModuleCreator getModuleCreator(String productId, Class creatorClass)
37      {
38          return creatorRegistry.getModuleCreator(productId, creatorClass);
39      }
40  
41      @Override
42      public Map<Class, PluginModuleCreator> getModuleCreatorsForProduct(String productId)
43      {
44          return creatorRegistry.getModuleCreatorsForProduct(productId);
45      }
46  
47      @Override
48      public List<DependencyDescriptor> getDependenciesForCreatorClass(Class creatorClass)
49      {
50          return creatorRegistry.getDependenciesForCreatorClass(creatorClass);
51      }
52  
53      private void doParse(String packageName) throws Exception
54      {
55          if (StringUtils.isBlank(packageName))
56          {
57              creatorAnnotationParser.parse();
58          } else
59          {
60              creatorAnnotationParser.parse(packageName);
61          }
62      }
63  
64  }