1   package com.atlassian.plugins.codegen.modules.common.component;
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 ComponentModuleCreator extends AbstractPluginModuleCreator<ComponentProperties>
20  {
21  
22      public static final String MODULE_NAME = "Component";
23      private static final String TEMPLATE_PREFIX = "templates/common/component/";
24  
25      //stub
26      private static final String CLASS_TEMPLATE = TEMPLATE_PREFIX + "Component.java.vtl";
27      private static final String INTERFACE_TEMPLATE = TEMPLATE_PREFIX + "ComponentInterface.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 + "component-plugin.xml.vtl";
33  
34      @Override
35      public void createModule(PluginModuleLocation location, ComponentProperties props) throws Exception
36      {
37  
38          String packageName = props.getPackage();
39  
40          String classname = props.getClassname();
41  
42          String iClassname = props.getInterfaceClass();
43          String iPackage = props.getInterfacePackage();
44  
45          if (props.includeExamples())
46          {
47              templateHelper.writeJavaClassFromTemplate(EXAMPLE_CLASS_TEMPLATE, classname, location.getSourceDirectory(), packageName, props);
48          } else
49          {
50              if (props.generateClass())
51              {
52                  //main class
53                  templateHelper.writeJavaClassFromTemplate(CLASS_TEMPLATE, classname, location.getSourceDirectory(), packageName, props);
54  
55                  //unit test
56                  templateHelper.writeJavaClassFromTemplate(GENERIC_TEST_TEMPLATE, testClassname(classname), location.getTestDirectory(), packageName, props);
57  
58                  //func test
59                  templateHelper.writeJavaClassFromTemplate(GENERIC_TEST_TEMPLATE, funcTestClassname(classname), location.getTestDirectory(), funcTestPackageName(packageName), props);
60              }
61  
62              if (props.generateInterface())
63              {
64                  templateHelper.writeJavaClassFromTemplate(INTERFACE_TEMPLATE, iClassname, location.getSourceDirectory(), iPackage, props);
65              }
66  
67          }
68  
69  
70          addModuleToPluginXml(PLUGIN_MODULE_TEMPLATE, location, props);
71      }
72  
73  
74      @Override
75      public String getModuleName()
76      {
77          return MODULE_NAME;
78      }
79  }