1   package com.atlassian.plugins.codegen.modules.jira;
2   
3   import java.io.File;
4   
5   import com.atlassian.plugins.codegen.annotations.Dependencies;
6   import com.atlassian.plugins.codegen.annotations.Dependency;
7   import com.atlassian.plugins.codegen.annotations.JiraPluginModuleCreator;
8   import com.atlassian.plugins.codegen.modules.AbstractPluginModuleCreator;
9   import com.atlassian.plugins.codegen.modules.PluginModuleLocation;
10  
11  import org.apache.commons.io.FilenameUtils;
12  import org.apache.commons.lang.StringUtils;
13  
14  /**
15   * @since 3.6
16   */
17  @JiraPluginModuleCreator
18  @Dependencies({
19          @Dependency(groupId = "org.mockito", artifactId = "mockito-all", version = "1.8.5", scope = "test")
20          , @Dependency(groupId = "org.apache.httpcomponents", artifactId = "httpclient", version = "4.1.1", scope = "test")
21  })
22  public class WebworkModuleCreator extends AbstractPluginModuleCreator<WebworkProperties>
23  {
24  
25      public static final String MODULE_NAME = "Webwork Plugin";
26      private static final String TEMPLATE_PREFIX = "templates/jira/webwork/";
27  
28      //stub
29      private static final String CLASS_TEMPLATE = TEMPLATE_PREFIX + "WebworkAction.java.vtl";
30      //private static final String UNIT_TEST_TEMPLATE = TEMPLATE_PREFIX + "WebworkActionTest.java.vtl";
31      private static final String UNIT_TEST_TEMPLATE = "templates/generic/GenericTest.java.vtl";
32      private static final String FUNC_TEST_TEMPLATE = TEMPLATE_PREFIX + "WebworkActionFuncTest.java.vtl";
33      private static final String VIEW_TEMPLATE = "templates/common/actionview.vm.vtl";
34  
35      //examples
36      private static final String EXAMPLE_CLASS_TEMPLATE = TEMPLATE_PREFIX + "Example" + CLASS_TEMPLATE;
37  
38      private static final String PLUGIN_MODULE_TEMPLATE = TEMPLATE_PREFIX + "webwork-plugin.xml.vtl";
39  
40      @Override
41      public void createModule(PluginModuleLocation location, WebworkProperties props) throws Exception
42      {
43  
44          if (props.includeExamples())
45          {
46  
47          } else
48          {
49              for (ActionProperties action : props.getActions())
50              {
51                  //main class
52                  templateHelper.writeJavaClassFromTemplate(CLASS_TEMPLATE, action.getClassname(), location.getSourceDirectory(), action.getPackage(), action);
53  
54                  //unit test
55                  templateHelper.writeJavaClassFromTemplate(UNIT_TEST_TEMPLATE, testClassname(action.getClassname()), location.getTestDirectory(), action.getPackage(), action);
56  
57                  //write view templates
58                  for (View view : action.getViews())
59                  {
60  
61                      String viewPath = FilenameUtils.separatorsToSystem(view.getPath());
62  
63                      if (viewPath.startsWith("templates" + File.separator) || viewPath.startsWith(File.separator + "templates" + File.separator))
64                      {
65                          viewPath = StringUtils.substringAfter(viewPath, "templates" + File.separator);
66                      }
67  
68                      File viewFolder = new File(location.getTemplateDirectory(), FilenameUtils.getPath(viewPath));
69                      String viewFile = FilenameUtils.getName(viewPath);
70  
71                      action.setProperty("CURRENT_VIEW", viewFile);
72  
73                      templateHelper.writeFileFromTemplate(VIEW_TEMPLATE, FilenameUtils.getName(viewPath), viewFolder, action);
74                  }
75              }
76          }
77  
78  
79          addModuleToPluginXml(PLUGIN_MODULE_TEMPLATE, location, props);
80      }
81  
82  
83      @Override
84      public String getModuleName()
85      {
86          return MODULE_NAME;
87      }
88  }