PageRenderTime 43ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/plugin-module-codegen-engine/src/main/java/com/atlassian/plugins/codegen/modules/common/licensing/LicensingUpm1CompatibleModuleCreator.java

https://bitbucket.org/rmanalan/amps
Java | 189 lines | 165 code | 21 blank | 3 comment | 1 complexity | 4fc2eef8b5e6c314ab7bfcc6c7315400 MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause
  1. package com.atlassian.plugins.codegen.modules.common.licensing;
  2. import com.atlassian.plugins.codegen.ArtifactDependency;
  3. import com.atlassian.plugins.codegen.BundleInstruction;
  4. import com.atlassian.plugins.codegen.ClassId;
  5. import com.atlassian.plugins.codegen.ComponentDeclaration;
  6. import com.atlassian.plugins.codegen.ComponentImport;
  7. import com.atlassian.plugins.codegen.PluginArtifact;
  8. import com.atlassian.plugins.codegen.PluginProjectChangeset;
  9. import com.atlassian.plugins.codegen.VersionId;
  10. import com.atlassian.plugins.codegen.annotations.BambooPluginModuleCreator;
  11. import com.atlassian.plugins.codegen.annotations.ConfluencePluginModuleCreator;
  12. import com.atlassian.plugins.codegen.annotations.CrowdPluginModuleCreator;
  13. import com.atlassian.plugins.codegen.annotations.FeCruPluginModuleCreator;
  14. import com.atlassian.plugins.codegen.annotations.JiraPluginModuleCreator;
  15. import com.atlassian.plugins.codegen.annotations.RefAppPluginModuleCreator;
  16. import com.atlassian.plugins.codegen.annotations.StashPluginModuleCreator;
  17. import com.atlassian.plugins.codegen.modules.AbstractPluginModuleCreator;
  18. import com.atlassian.plugins.codegen.modules.BasicClassModuleProperties;
  19. import com.atlassian.plugins.codegen.modules.common.servlet.ServletModuleCreator;
  20. import com.atlassian.plugins.codegen.modules.common.servlet.ServletProperties;
  21. import static com.atlassian.fugue.Option.some;
  22. import static com.atlassian.plugins.codegen.ArtifactDependency.dependency;
  23. import static com.atlassian.plugins.codegen.ArtifactDependency.Scope.COMPILE;
  24. import static com.atlassian.plugins.codegen.ArtifactDependency.Scope.PROVIDED;
  25. import static com.atlassian.plugins.codegen.ArtifactId.artifactId;
  26. import static com.atlassian.plugins.codegen.BundleInstruction.dynamicImportPackage;
  27. import static com.atlassian.plugins.codegen.BundleInstruction.privatePackage;
  28. import static com.atlassian.plugins.codegen.ClassId.fullyQualified;
  29. import static com.atlassian.plugins.codegen.ComponentDeclaration.componentDeclaration;
  30. import static com.atlassian.plugins.codegen.ComponentImport.componentImport;
  31. import static com.atlassian.plugins.codegen.MavenPlugin.mavenPlugin;
  32. import static com.atlassian.plugins.codegen.PluginArtifact.pluginArtifact;
  33. import static com.atlassian.plugins.codegen.PluginArtifact.ArtifactType.BUNDLED_ARTIFACT;
  34. import static com.atlassian.plugins.codegen.PluginParameter.pluginParameter;
  35. import static com.atlassian.plugins.codegen.ResourceFile.resourceFile;
  36. import static com.atlassian.plugins.codegen.VersionId.noVersion;
  37. import static com.atlassian.plugins.codegen.VersionId.version;
  38. import static com.atlassian.plugins.codegen.VersionId.versionProperty;
  39. import static com.atlassian.plugins.codegen.modules.Dependencies.APPLICATION_PROPERTIES_IMPORT;
  40. import static com.atlassian.plugins.codegen.modules.Dependencies.COMMONS_LANG;
  41. import static com.atlassian.plugins.codegen.modules.Dependencies.I18N_RESOLVER_IMPORT;
  42. import static com.atlassian.plugins.codegen.modules.Dependencies.SAL_API;
  43. import static com.atlassian.plugins.codegen.modules.Dependencies.TEMPLATE_RENDERER_API;
  44. import static com.atlassian.plugins.codegen.modules.Dependencies.TEMPLATE_RENDERER_IMPORT;
  45. /**
  46. * @since 3.9
  47. */
  48. @RefAppPluginModuleCreator
  49. @JiraPluginModuleCreator
  50. @ConfluencePluginModuleCreator
  51. @BambooPluginModuleCreator
  52. @FeCruPluginModuleCreator
  53. @CrowdPluginModuleCreator
  54. @StashPluginModuleCreator
  55. public class LicensingUpm1CompatibleModuleCreator extends AbstractPluginModuleCreator<LicensingProperties>
  56. {
  57. public static final String MODULE_NAME = "Licensing API Support";
  58. public static final String LICENSE_SERVLET_TEMPLATE = "templates/common/licensing/LicenseServlet.java.vtl";
  59. public static final String HELLO_WORLD_SERVLET_TEMPLATE = "templates/common/licensing/HelloWorldServlet.java.vtl";
  60. public static final String LICENSE_SERVLET_VELOCITY_TEMPLATE = "templates/common/licensing/license-admin.vm";
  61. public static final String PROPERTIES_TEMPLATE = "templates/common/licensing/license-admin.properties.vtl";
  62. public static final ClassId LICENSE_STORAGE_MANAGER_CLASS = fullyQualified("com.atlassian.upm.license.storage.lib.ThirdPartyPluginLicenseStorageManagerImpl");
  63. public static final ClassId PLUGIN_INSTALLER_CLASS = fullyQualified("com.atlassian.upm.license.storage.lib.PluginLicenseStoragePluginInstaller");
  64. public static final ClassId MARKETPLACE_URI_FACTORY_CLASS = fullyQualified("com.atlassian.upm.license.storage.lib.AtlassianMarketplaceUriFactoryImpl");
  65. public static final String LICENSE_SERVLET_NAME_I18N_KEY = "license-servlet.name";
  66. public static final String LICENSE_SERVLET_DESCRIPTION_I18N_KEY = "license-servlet.description";
  67. public static final String HELLO_WORLD_SERVLET_CLASS_NAME = "LicenseHelloWorldServlet";
  68. public static final String HELLO_WORLD_SERVLET_NAME_I18N_KEY = "license-hello-world-servlet.name";
  69. public static final String HELLO_WORLD_SERVLET_DESCRIPTION_I18N_KEY = "license-hello-world-servlet.description";
  70. public static final String LICENSE_API_VERSION = "2.3";
  71. public static final VersionId LICENSE_API_VERSION_PROPERTY = versionProperty("upm.license.compatibility.version", LICENSE_API_VERSION);
  72. public static final String LICENSE_API_IMPORT_VERSION = "2.0.1";
  73. public static final String STORAGE_PLUGIN_IMPORT_VERSION = "${upm.license.compatibility.version}";
  74. public static final ArtifactDependency[] DEPENDENCIES = {
  75. dependency("com.atlassian.upm", "plugin-license-storage-lib", LICENSE_API_VERSION_PROPERTY, COMPILE),
  76. dependency("com.atlassian.upm", "plugin-license-storage-plugin", LICENSE_API_VERSION_PROPERTY, PROVIDED),
  77. dependency("com.atlassian.upm", "licensing-api", LICENSE_API_VERSION_PROPERTY, PROVIDED),
  78. dependency("com.atlassian.upm", "upm-api", LICENSE_API_VERSION_PROPERTY, PROVIDED),
  79. SAL_API,
  80. TEMPLATE_RENDERER_API,
  81. COMMONS_LANG,
  82. dependency("org.springframework.osgi", "spring-osgi-core", "1.1.3", PROVIDED)
  83. };
  84. public static final PluginArtifact[] BUNDLED_ARTIFACTS = {
  85. pluginArtifact(BUNDLED_ARTIFACT, artifactId("com.atlassian.upm", "atlassian-universal-plugin-manager-plugin"), version("1.6.3")),
  86. pluginArtifact(BUNDLED_ARTIFACT, artifactId("com.atlassian.upm", "plugin-license-storage-plugin"), LICENSE_API_VERSION_PROPERTY)
  87. };
  88. public static final BundleInstruction[] BUNDLE_INSTRUCTIONS = {
  89. privatePackage("com.atlassian.upm.license.storage.lib*"),
  90. dynamicImportPackage("com.atlassian.upm.api.license", LICENSE_API_IMPORT_VERSION),
  91. dynamicImportPackage("com.atlassian.upm.api.license.entity", LICENSE_API_IMPORT_VERSION),
  92. dynamicImportPackage("com.atlassian.upm.api.util", LICENSE_API_IMPORT_VERSION),
  93. dynamicImportPackage("com.atlassian.upm.license.storage.plugin", STORAGE_PLUGIN_IMPORT_VERSION)
  94. };
  95. public static final ComponentImport[] COMPONENT_IMPORTS = {
  96. componentImport(fullyQualified("com.atlassian.plugin.PluginAccessor")),
  97. componentImport(fullyQualified("com.atlassian.plugin.PluginController")),
  98. componentImport(fullyQualified("com.atlassian.sal.api.transaction.TransactionTemplate")).key(some("txTemplate")),
  99. APPLICATION_PROPERTIES_IMPORT,
  100. TEMPLATE_RENDERER_IMPORT,
  101. componentImport(fullyQualified("com.atlassian.sal.api.pluginsettings.PluginSettingsFactory")),
  102. componentImport(fullyQualified("com.atlassian.sal.api.auth.LoginUriProvider")),
  103. componentImport(fullyQualified("com.atlassian.sal.api.user.UserManager")),
  104. I18N_RESOLVER_IMPORT
  105. };
  106. public static final ComponentDeclaration[] COMPONENTS = {
  107. componentDeclaration(LICENSE_STORAGE_MANAGER_CLASS, "thirdPartyPluginLicenseStorageManager"),
  108. componentDeclaration(PLUGIN_INSTALLER_CLASS, "pluginLicenseStoragePluginInstaller"),
  109. componentDeclaration(MARKETPLACE_URI_FACTORY_CLASS, "atlassianMarketplaceUriFactory")
  110. };
  111. public static final String MAVEN_DEPENDENCY_PLUGIN_ID = "maven-dependency-plugin";
  112. public static final String MAVEN_DEPENDENCY_PLUGIN_CONFIG = "<executions>" +
  113. "<execution>" +
  114. "<id>copy-storage-plugin</id>" +
  115. "<phase>process-resources</phase>" +
  116. "<goals><goal>copy-dependencies</goal></goals>" +
  117. "<configuration>" +
  118. "<outputDirectory>${project.build.outputDirectory}</outputDirectory>" +
  119. "<includeArtifactIds>plugin-license-storage-plugin</includeArtifactIds>" +
  120. "<stripVersion>true</stripVersion>" +
  121. "</configuration>" +
  122. "</execution>" +
  123. "</executions>";
  124. @Override
  125. public PluginProjectChangeset createModule(LicensingProperties props) throws Exception
  126. {
  127. ClassId licenseServletClass = props.getClassId();
  128. ServletProperties licenseServletProps = new ServletProperties(licenseServletClass.getFullName());
  129. licenseServletProps.setUrlPattern("/" + props.getLicenseServletPath());
  130. licenseServletProps.setNameI18nKey(LICENSE_SERVLET_NAME_I18N_KEY);
  131. licenseServletProps.setDescriptionI18nKey(LICENSE_SERVLET_DESCRIPTION_I18N_KEY);
  132. licenseServletProps.setCreateClass(false);
  133. BasicClassModuleProperties licenseServletClassProps = new BasicClassModuleProperties(licenseServletClass.getFullName());
  134. licenseServletClassProps.putAll(props);
  135. PluginProjectChangeset licenseServlet = new ServletModuleCreator().createModule(licenseServletProps)
  136. .with(createClass(licenseServletClassProps, LICENSE_SERVLET_TEMPLATE));
  137. PluginProjectChangeset ret = new PluginProjectChangeset()
  138. .with(DEPENDENCIES)
  139. .with(BUNDLE_INSTRUCTIONS)
  140. .with(BUNDLED_ARTIFACTS)
  141. .with(mavenPlugin(artifactId(MAVEN_DEPENDENCY_PLUGIN_ID), noVersion(), MAVEN_DEPENDENCY_PLUGIN_CONFIG))
  142. .with(pluginParameter("atlassian-licensing-enabled", "true"))
  143. .with(COMPONENT_IMPORTS)
  144. .with(COMPONENTS)
  145. .with(licenseServlet)
  146. .with(resourceFile("", "license-admin.vm", fromFile(LICENSE_SERVLET_VELOCITY_TEMPLATE)))
  147. .with(createI18nStrings(props, PROPERTIES_TEMPLATE));
  148. if (props.includeExamples())
  149. {
  150. ClassId helloWorldServletClass = props.getClassId().className(HELLO_WORLD_SERVLET_CLASS_NAME);
  151. ServletProperties helloWorldServletProps = new ServletProperties(helloWorldServletClass.getFullName());
  152. helloWorldServletProps.setUrlPattern("/" + props.getHelloWorldServletPath());
  153. helloWorldServletProps.setCreateClass(false);
  154. BasicClassModuleProperties helloWorldServletClassProps = new BasicClassModuleProperties(helloWorldServletClass.getFullName());
  155. helloWorldServletClassProps.putAll(props);
  156. helloWorldServletClassProps.setFullyQualifiedClassname(helloWorldServletClass.getFullName());
  157. PluginProjectChangeset helloWorldServlet = new ServletModuleCreator().createModule(helloWorldServletProps)
  158. .with(createClass(helloWorldServletClassProps, HELLO_WORLD_SERVLET_TEMPLATE));
  159. ret = ret.with(helloWorldServlet);
  160. }
  161. return ret;
  162. }
  163. @Override
  164. public String getModuleName()
  165. {
  166. return MODULE_NAME;
  167. }
  168. }