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