1   package com.atlassian.plugins.codegen.modules.common.moduletype;
2   
3   import com.atlassian.plugins.codegen.annotations.*;
4   import com.atlassian.plugins.codegen.modules.AbstractPluginModuleCreator;
5   import com.atlassian.plugins.codegen.modules.PluginModuleLocation;
6   
7   /**
8    * @since 3.6
9    */
10  @RefAppPluginModuleCreator
11  @JiraPluginModuleCreator
12  @ConfluencePluginModuleCreator
13  @BambooPluginModuleCreator
14  @FeCruPluginModuleCreator
15  @CrowdPluginModuleCreator
16  @Dependencies({
17          @Dependency(groupId = "org.mockito", artifactId = "mockito-all", version = "1.8.5", scope = "test")
18  })
19  public class ModuleTypeModuleCreator extends AbstractPluginModuleCreator<ModuleTypeProperties>
20  {
21  
22      public static final String MODULE_NAME = "Module Type";
23      private static final String TEMPLATE_PREFIX = "templates/common/moduletype/";
24  
25      //stub
26      private static final String CLASS_TEMPLATE = TEMPLATE_PREFIX + "ModuleType.java.vtl";
27      private static final String INTERFACE_TEMPLATE = TEMPLATE_PREFIX + "ModuleTypeInterface.java.vtl";
28  
29      //examples
30      private static final String EXAMPLE_CLASS_TEMPLATE = TEMPLATE_PREFIX + "Example" + CLASS_TEMPLATE;
31  
32      private static final String PLUGIN_MODULE_TEMPLATE = TEMPLATE_PREFIX + "module-type-plugin.xml.vtl";
33  
34      @Override
35      public void createModule(PluginModuleLocation location, ModuleTypeProperties props) throws Exception
36      {
37          String packageName = props.getPackage();
38          String classname = props.getClassname();
39          String iClassname = props.getInterfaceClass();
40          String iPackage = props.getInterfacePackage();
41  
42          if (props.includeExamples())
43          {
44              templateHelper.writeJavaClassFromTemplate(EXAMPLE_CLASS_TEMPLATE, classname, location.getSourceDirectory(), packageName, props);
45          } else
46          {
47              //main interface
48              templateHelper.writeJavaClassFromTemplate(INTERFACE_TEMPLATE, iClassname, location.getSourceDirectory(), iPackage, props);
49  
50              //main class
51              templateHelper.writeJavaClassFromTemplate(CLASS_TEMPLATE, classname, location.getSourceDirectory(), packageName, props);
52  
53              //unit test
54              templateHelper.writeJavaClassFromTemplate(GENERIC_TEST_TEMPLATE, testClassname(classname), location.getTestDirectory(), packageName, props);
55  
56              //func test
57              templateHelper.writeJavaClassFromTemplate(GENERIC_TEST_TEMPLATE, funcTestClassname(classname), location.getTestDirectory(), funcTestPackageName(packageName), props);
58          }
59  
60  
61          addModuleToPluginXml(PLUGIN_MODULE_TEMPLATE, location, props);
62      }
63  
64  
65      @Override
66      public String getModuleName()
67      {
68          return MODULE_NAME;
69      }
70  }