1   package com.atlassian.plugins.codegen.modules.common;
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          , @Dependency(groupId = "javax.ws.rs", artifactId = "jsr311-api", version = "1.0", scope = "provided")
19          , @Dependency(groupId = "javax.xml.bind", artifactId = "jaxb-api", version = "2.1", scope = "provided")
20          , @Dependency(groupId = "com.atlassian.plugins.rest", artifactId = "atlassian-rest-common", version = "1.0.2", scope = "provided")
21          , @Dependency(groupId = "javax.servlet", artifactId = "servlet-api", version = "2.4", scope = "provided")
22          , @Dependency(groupId = "org.apache.wink", artifactId = "wink-client", version = "1.1.3-incubating", scope = "test")
23  })
24  public class RESTModuleCreator extends AbstractPluginModuleCreator<RESTProperties>
25  {
26  
27      public static final String MODULE_NAME = "REST Plugin Module";
28      private static final String TEMPLATE_PREFIX = "templates/common/rest/";
29  
30      //stub
31      private static final String CLASS_TEMPLATE = TEMPLATE_PREFIX + "REST.java.vtl";
32      private static final String MODEL_TEMPLATE = TEMPLATE_PREFIX + "RESTModelObject.java.vtl";
33      private static final String UNIT_TEST_TEMPLATE = TEMPLATE_PREFIX + "RESTTest.java.vtl";
34      private static final String FUNC_TEST_TEMPLATE = TEMPLATE_PREFIX + "RESTFuncTest.java.vtl";
35  
36      //examples
37      private static final String EXAMPLE_CLASS_TEMPLATE = TEMPLATE_PREFIX + "Example" + CLASS_TEMPLATE;
38  
39      private static final String PLUGIN_MODULE_TEMPLATE = TEMPLATE_PREFIX + "rest-plugin.xml.vtl";
40  
41      @Override
42      public void createModule(PluginModuleLocation location, RESTProperties props) throws Exception
43      {
44          String packageName = props.getPackage();
45  
46          String classname = props.getClassname();
47          String modelClassname = classname + "Model";
48  
49          if (props.includeExamples())
50          {
51              templateHelper.writeJavaClassFromTemplate(EXAMPLE_CLASS_TEMPLATE, classname, location.getSourceDirectory(), packageName, props);
52          } else
53          {
54              //main class
55              templateHelper.writeJavaClassFromTemplate(CLASS_TEMPLATE, classname, location.getSourceDirectory(), packageName, props);
56  
57              //model class
58              templateHelper.writeJavaClassFromTemplate(MODEL_TEMPLATE, modelClassname, location.getSourceDirectory(), packageName, props);
59  
60              //unit test
61              templateHelper.writeJavaClassFromTemplate(UNIT_TEST_TEMPLATE, testClassname(classname), location.getTestDirectory(), packageName, props);
62  
63              //func test
64              templateHelper.writeJavaClassFromTemplate(FUNC_TEST_TEMPLATE, funcTestClassname(classname), location.getTestDirectory(), funcTestPackageName(packageName), props);
65          }
66  
67  
68          addModuleToPluginXml(PLUGIN_MODULE_TEMPLATE, location, props);
69      }
70  
71  
72      @Override
73      public String getModuleName()
74      {
75          return MODULE_NAME;
76      }
77  }