1   package com.atlassian.plugins.codegen.modules.common.servlet;
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 = "javax.servlet", artifactId = "servlet-api", version = "2.4", scope = "provided")
18          , @Dependency(groupId = "org.mockito", artifactId = "mockito-all", version = "1.8.5", scope = "test")
19          , @Dependency(groupId = "org.apache.httpcomponents", artifactId = "httpclient", version = "4.1.1", scope = "test")
20  })
21  public class ServletModuleCreator extends AbstractPluginModuleCreator<ServletProperties>
22  {
23  
24      public static final String MODULE_NAME = "Servlet";
25      private static final String TEMPLATE_PREFIX = "templates/common/servlet/";
26  
27      //stub
28      private static final String CLASS_TEMPLATE = TEMPLATE_PREFIX + "Servlet.java.vtl";
29      private static final String UNIT_TEST_TEMPLATE = TEMPLATE_PREFIX + "ServletTest.java.vtl";
30      private static final String FUNC_TEST_TEMPLATE = TEMPLATE_PREFIX + "ServletFuncTest.java.vtl";
31  
32      //examples
33      private static final String EXAMPLE_CLASS_TEMPLATE = TEMPLATE_PREFIX + "Example" + CLASS_TEMPLATE;
34  
35      private static final String PLUGIN_MODULE_TEMPLATE = TEMPLATE_PREFIX + "servlet-plugin.xml.vtl";
36  
37      @Override
38      public void createModule(PluginModuleLocation location, ServletProperties props) throws Exception
39      {
40          String packageName = props.getPackage();
41  
42          String classname = props.getClassname();
43  
44          if (props.includeExamples())
45          {
46              templateHelper.writeJavaClassFromTemplate(EXAMPLE_CLASS_TEMPLATE, classname, location.getSourceDirectory(), packageName, props);
47          } else
48          {
49              //main class
50              templateHelper.writeJavaClassFromTemplate(CLASS_TEMPLATE, classname, location.getSourceDirectory(), packageName, props);
51  
52              //unit test
53              templateHelper.writeJavaClassFromTemplate(UNIT_TEST_TEMPLATE, testClassname(classname), location.getTestDirectory(), packageName, props);
54  
55              //func test
56              templateHelper.writeJavaClassFromTemplate(FUNC_TEST_TEMPLATE, funcTestClassname(classname), location.getTestDirectory(), funcTestPackageName(packageName), props);
57          }
58  
59  
60          addModuleToPluginXml(PLUGIN_MODULE_TEMPLATE, location, props);
61      }
62  
63  
64      @Override
65      public String getModuleName()
66      {
67          return MODULE_NAME;
68      }
69  }