1   package com.atlassian.plugins.codegen.modules.jira;
2   
3   import com.atlassian.plugins.codegen.PluginProjectChangeset;
4   import com.atlassian.plugins.codegen.annotations.JiraPluginModuleCreator;
5   import com.atlassian.plugins.codegen.modules.AbstractPluginModuleCreator;
6   import com.atlassian.plugins.codegen.modules.common.Resource;
7   
8   import static com.atlassian.plugins.codegen.modules.Dependencies.MOCKITO_TEST;
9   import static com.atlassian.plugins.codegen.modules.Dependencies.SLF4J;
10  
11  /**
12   * @since 3.6
13   */
14  @JiraPluginModuleCreator
15  public class CustomFieldModuleCreator extends AbstractPluginModuleCreator<CustomFieldProperties>
16  {
17      public static final String MODULE_NAME = "Custom Field";
18      private static final String TEMPLATE_PREFIX = "templates/jira/customfield/";
19  
20      //stub
21      private static final String CLASS_TEMPLATE = TEMPLATE_PREFIX + "CustomField.java.vtl";
22      private static final String UNIT_TEST_TEMPLATE = "templates/generic/GenericTest.java.vtl";
23      private static final String VIEW_TEMPLATE = "templates/common/actionview.vm.vtl";
24  
25      //examples
26      private static final String EXAMPLE_CLASS_TEMPLATE = TEMPLATE_PREFIX + "Example" + CLASS_TEMPLATE;
27  
28      private static final String PLUGIN_MODULE_TEMPLATE = TEMPLATE_PREFIX + "custom-field-plugin.xml.vtl";
29  
30      @Override
31      public PluginProjectChangeset createModule(CustomFieldProperties props) throws Exception
32      {
33          PluginProjectChangeset ret = new PluginProjectChangeset()
34              .with(SLF4J,
35                    MOCKITO_TEST)
36              .with(createModule(props, PLUGIN_MODULE_TEMPLATE));
37          
38          if (props.includeExamples())
39          {
40              return ret.with(createClass(props, EXAMPLE_CLASS_TEMPLATE));
41          }
42          else
43          {
44              ret = ret.with(createClassAndTests(props, CLASS_TEMPLATE, UNIT_TEST_TEMPLATE));
45              
46              //since we know resources are velocity templates, let's create them
47              for (Resource resource : props.getResources())
48              {
49                  ret = ret.with(createTemplateResource(props, resource, VIEW_TEMPLATE));
50              }
51              
52              return ret;
53          }
54      }
55  
56      @Override
57      public String getModuleName()
58      {
59          return MODULE_NAME;
60      }
61  }