Added code to generate maven-bundle-plugin to Yang project. 56/39456/1
authorDavid M. Karr <davidmichaelkarr@gmail.com>
Thu, 26 May 2016 00:51:07 +0000 (17:51 -0700)
committerDavid M. Karr <davidmichaelkarr@gmail.com>
Thu, 26 May 2016 00:51:07 +0000 (17:51 -0700)
Renamed "mavenplugin" variable prefix to "yangplugin".
Added variables for maven-bundle-plugin reference.

Change-Id: I3284bf3ce8e7d8d068a6300820780ca7a335b990
Signed-off-by: David M. Karr <davidmichaelkarr@gmail.com>
plugins/org.opendaylight.yangide.ui/pom.xml
plugins/org.opendaylight.yangide.ui/resources/projectpom.properties
plugins/org.opendaylight.yangide.ui/src/org/opendaylight/yangide/ui/wizards/YangProjectWizard.java

index bf1314e0440253612ef4e1088609a92253f1ca60..23eb6010de6c5912ec37891b048c3d6e37cfe3b6 100644 (file)
@@ -29,9 +29,9 @@
     <yangbinding_groupid>org.opendaylight.mdsal</yangbinding_groupid>
     <yangbinding_artifactid>yang-binding</yangbinding_artifactid>
     <yangbinding_version>0.9.0-SNAPSHOT</yangbinding_version>
-    <mavenplugin_groupid>org.opendaylight.yangtools</mavenplugin_groupid>
-    <mavenplugin_artifactid>yang-maven-plugin</mavenplugin_artifactid>
-    <mavenplugin_version>1.0.0-SNAPSHOT</mavenplugin_version>
+    <yangplugin_groupid>org.opendaylight.yangtools</yangplugin_groupid>
+    <yangplugin_artifactid>yang-maven-plugin</yangplugin_artifactid>
+    <yangplugin_version>1.0.0-SNAPSHOT</yangplugin_version>
     <codegen_groupid>org.opendaylight.mdsal</codegen_groupid>
     <codegen_artifactid>maven-sal-api-gen-plugin</codegen_artifactid>
     <codegen_version>0.9.0-SNAPSHOT</codegen_version>
@@ -39,6 +39,9 @@
     <codegen_outputdir>target/generated-sources/sal</codegen_outputdir>
     <odl_release_url>https://nexus.opendaylight.org/content/repositories/opendaylight.release/</odl_release_url>
     <odl_snapshot_url>https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/</odl_snapshot_url>
+    <bundleplugin_groupid>org.apache.felix</bundleplugin_groupid>
+    <bundleplugin_artifactid>maven-bundle-plugin</bundleplugin_artifactid>
+    <bundleplugin_version>2.4.0</bundleplugin_version>
   </properties>
   <build>
     <sourceDirectory>src</sourceDirectory>
index 96f0117d66b51a8a0a18258e428e6e1530efbcc4..9ea71f90de8af78f604e4facbc223ddf6310f4ff 100644 (file)
@@ -5,9 +5,9 @@ yangbinding_version: @yangbinding_version@
 odl_release_url: @odl_release_url@
 odl_snapshot_url: @odl_snapshot_url@
 
-mavenplugin_groupid: @mavenplugin_groupid@
-mavenplugin_artifactid: @mavenplugin_artifactid@
-mavenplugin_version: @mavenplugin_version@
+yangplugin_groupid: @yangplugin_groupid@
+yangplugin_artifactid: @yangplugin_artifactid@
+yangplugin_version: @yangplugin_version@
 
 codegen_groupid: @codegen_groupid@
 codegen_artifactid: @codegen_artifactid@
@@ -15,3 +15,6 @@ codegen_version: @codegen_version@
 codegen_classname: @codegen_classname@
 codegen_outputdir: @codegen_outputdir@
 
+bundleplugin_groupid: @bundleplugin_groupid@
+bundleplugin_artifactid: @bundleplugin_artifactid@
+bundleplugin_version: @bundleplugin_version@
index 91b5fc8931731d7efb6e2bb229f86769ce341d96..8fdc427e25014bb739d9fe3ef8217b5ef7dc54af 100644 (file)
@@ -61,26 +61,29 @@ public class YangProjectWizard extends MavenProjectWizard {
 
     private static Properties projectPom    = new Properties();
     
-    private static final String PROP_YANGBINDING_GROUPID    = "yangbinding_groupid";
-    private static final String PROP_YANGBINDING_ARTIFACTID = "yangbinding_artifactid";
-    private static final String PROP_YANGBINDING_VERSION    = "yangbinding_version";
-    private static final String PROP_MAVENPLUGIN_GROUPID    = "mavenplugin_groupid";
-    private static final String PROP_MAVENPLUGIN_ARTIFACTID = "mavenplugin_artifactid";
-    private static final String PROP_MAVENPLUGIN_VERSION    = "mavenplugin_version";
-    private static final String PROP_CODEGEN_GROUPID        = "codegen_groupid";
-    private static final String PROP_CODEGEN_ARTIFACTID     = "codegen_artifactid";
-    private static final String PROP_CODEGEN_VERSION        = "codegen_version";
-    private static final String PROP_CODEGEN_CLASSNAME      = "codegen_classname";
-    private static final String PROP_CODEGEN_OUTPUTDIR      = "codegen_outputdir";
-    private static final String PROP_ODL_RELEASE_URL        = "odl_release_url";
-    private static final String PROP_ODL_SNAPSHOT_URL       = "odl_snapshot_url";
+    private static final String PROP_YANGBINDING_GROUPID        = "yangbinding_groupid";
+    private static final String PROP_YANGBINDING_ARTIFACTID     = "yangbinding_artifactid";
+    private static final String PROP_YANGBINDING_VERSION        = "yangbinding_version";
+    private static final String PROP_YANGPLUGIN_GROUPID         = "yangplugin_groupid";
+    private static final String PROP_YANGPLUGIN_ARTIFACTID      = "yangplugin_artifactid";
+    private static final String PROP_YANGPLUGIN_VERSION         = "yangplugin_version";
+    private static final String PROP_CODEGEN_GROUPID            = "codegen_groupid";
+    private static final String PROP_CODEGEN_ARTIFACTID         = "codegen_artifactid";
+    private static final String PROP_CODEGEN_VERSION            = "codegen_version";
+    private static final String PROP_CODEGEN_CLASSNAME          = "codegen_classname";
+    private static final String PROP_CODEGEN_OUTPUTDIR          = "codegen_outputdir";
+    private static final String PROP_ODL_RELEASE_URL            = "odl_release_url";
+    private static final String PROP_ODL_SNAPSHOT_URL           = "odl_snapshot_url";
+    private static final String PROP_BUNDLEPLUGIN_GROUPID       = "bundleplugin_groupid";
+    private static final String PROP_BUNDLEPLUGIN_ARTIFACTID    = "bundleplugin_artifactid";
+    private static final String PROP_BUNDLEPLUGIN_VERSION       = "bundleplugin_version";
 
     static final String yangbindingGroupId;
     static final String yangbindingArtifactId;
     static final String yangbindingVersion;
-    static final String mavenpluginGroupId;
-    static final String mavenpluginArtifactId;
-    static final String mavenpluginVersion;
+    static final String yangpluginGroupId;
+    static final String yangpluginArtifactId;
+    static final String yangpluginVersion;
     static final String codegenGroupId;
     static final String codegenArtifactId;
     static final String codegenVersion;
@@ -88,10 +91,14 @@ public class YangProjectWizard extends MavenProjectWizard {
     static final String codegenOutputDir;
     static final String odlReleaseUrl;
     static final String odlSnapshotUrl;
+    static final String bundlepluginGroupId;
+    static final String bundlepluginArtifactId;
+    static final String bundlepluginVersion;
 
     static {
         try {
-            projectPom.load(YangProjectWizard.class.getClassLoader().getResourceAsStream("resources/projectpom.properties"));
+            projectPom.load(YangProjectWizard.class.getClassLoader()
+                    .getResourceAsStream("resources/projectpom.properties"));
         } catch (IOException e) {
             YangUIPlugin.log(e);
         }
@@ -100,9 +107,9 @@ public class YangProjectWizard extends MavenProjectWizard {
         yangbindingArtifactId   = projectPom.getProperty(PROP_YANGBINDING_ARTIFACTID);
         yangbindingVersion      = projectPom.getProperty(PROP_YANGBINDING_VERSION);
 
-        mavenpluginGroupId      = projectPom.getProperty(PROP_MAVENPLUGIN_GROUPID);
-        mavenpluginArtifactId   = projectPom.getProperty(PROP_MAVENPLUGIN_ARTIFACTID);
-        mavenpluginVersion      = projectPom.getProperty(PROP_MAVENPLUGIN_VERSION);
+        yangpluginGroupId      = projectPom.getProperty(PROP_YANGPLUGIN_GROUPID);
+        yangpluginArtifactId   = projectPom.getProperty(PROP_YANGPLUGIN_ARTIFACTID);
+        yangpluginVersion      = projectPom.getProperty(PROP_YANGPLUGIN_VERSION);
 
         codegenGroupId          = projectPom.getProperty(PROP_CODEGEN_GROUPID);
         codegenArtifactId       = projectPom.getProperty(PROP_CODEGEN_ARTIFACTID);
@@ -112,11 +119,12 @@ public class YangProjectWizard extends MavenProjectWizard {
 
         odlReleaseUrl           = projectPom.getProperty(PROP_ODL_RELEASE_URL);
         odlSnapshotUrl          = projectPom.getProperty(PROP_ODL_SNAPSHOT_URL);
+        
+        bundlepluginGroupId     = projectPom.getProperty(PROP_BUNDLEPLUGIN_GROUPID);
+        bundlepluginArtifactId  = projectPom.getProperty(PROP_BUNDLEPLUGIN_ARTIFACTID);
+        bundlepluginVersion     = projectPom.getProperty(PROP_BUNDLEPLUGIN_VERSION);
     }
 
-    /**
-     * Constructor.
-     */
     public YangProjectWizard() {
         super();
         setWindowTitle("New YANG Project");
@@ -156,7 +164,7 @@ public class YangProjectWizard extends MavenProjectWizard {
 
                     IFile pomFile = project.getFile("pom.xml");
                     Model model = MavenPlugin.getMavenModelManager().readMavenModel(pomFile);
-                    updateModel(model,generators, yangRoot);
+                    updateModel(model, generators, yangRoot);
 
                     pomFile.delete(true, new NullProgressMonitor());
                     MavenPlugin.getMavenModelManager().createMavenModel(pomFile, model);
@@ -223,13 +231,63 @@ public class YangProjectWizard extends MavenProjectWizard {
         }
     }
 
+    /**
+     * Updates the build model with required plugins and other properties.
+     * 
+     * @param model build model to update
+     * @param generators list of code generators
+     * @param yangRoot root directory to expect to find Yang models in
+     */
     public void updateModel(Model model, List<CodeGeneratorConfig> generators, String yangRoot) {
         // Model model = super.getModel();
         model.setBuild(new Build());
+        model.getBuild().addPlugin(configureYangplugin(generators, yangRoot));
+        model.getBuild().addPlugin(configureBundlePlugin());
+        
+        model.addPluginRepository(createRepoParameter("opendaylight-release", odlReleaseUrl));
+        model.addPluginRepository(createRepoParameter("opendaylight-snapshot", odlSnapshotUrl));
+        model.addRepository(createRepoParameter("opendaylight-release", odlReleaseUrl));
+        model.addRepository(createRepoParameter("opendaylight-snapshot", odlSnapshotUrl));
+
+        model.getProperties().put("maven.compiler.source", "1.8");
+        model.getProperties().put("maven.compiler.target", "1.8");
+
+        Dependency dependency2 = new Dependency();
+        dependency2.setGroupId(yangbindingGroupId);
+        dependency2.setArtifactId(yangbindingArtifactId);
+        dependency2.setVersion(yangbindingVersion);
+        dependency2.setType("jar");
+        model.addDependency(dependency2);
+    }
+
+    /**
+     * Configure the maven-bundle-plugin, which is used to recognize "bundle"-type artifacts, as opposed to
+     * "jar"-type artifacts.
+     * 
+     * @return plugin to add to model.
+     */
+    private Plugin configureBundlePlugin() {
         Plugin plugin = new Plugin();
-        plugin.setGroupId(mavenpluginGroupId);
-        plugin.setArtifactId(mavenpluginArtifactId);
-        plugin.setVersion(mavenpluginVersion);
+        plugin.setGroupId(bundlepluginGroupId);
+        plugin.setArtifactId(bundlepluginArtifactId);
+        plugin.setVersion(bundlepluginVersion);
+        plugin.setExtensions(true);
+        
+        return plugin;
+    }
+
+    /**
+     * Configure the yang-maven-plugin, which is used to process the Yang models and generate Java code.
+     * 
+     * @param generators code generators to generate code from Yang model
+     * @param yangRoot root directory where Yang models are expected to be found
+     * @return plugin to add to model
+     */
+    private Plugin configureYangplugin(List<CodeGeneratorConfig> generators, String yangRoot) {
+        Plugin plugin = new Plugin();
+        plugin.setGroupId(yangpluginGroupId);
+        plugin.setArtifactId(yangpluginArtifactId);
+        plugin.setVersion(yangpluginVersion);
 
         for (CodeGeneratorConfig genConf : generators) {
             Dependency dependency = new Dependency();
@@ -254,25 +312,12 @@ public class YangProjectWizard extends MavenProjectWizard {
         }
         config.addChild(createSingleParameter("yangFilesRootDir", yangRoot));
         config.addChild(codeGenerators);
+        // This is true to allow it to look for Yang models in Maven dependencies.
         config.addChild(createSingleParameter("inspectDependencies", "true"));
         pluginExecution.setConfiguration(config);
 
         plugin.addExecution(pluginExecution);
-        model.getBuild().addPlugin(plugin);
-        model.addPluginRepository(createRepoParameter("opendaylight-release", odlReleaseUrl));
-        model.addPluginRepository(createRepoParameter("opendaylight-snapshot", odlSnapshotUrl));
-        model.addRepository(createRepoParameter("opendaylight-release", odlReleaseUrl));
-        model.addRepository(createRepoParameter("opendaylight-snapshot", odlSnapshotUrl));
-
-        model.getProperties().put("maven.compiler.source", "1.8");
-        model.getProperties().put("maven.compiler.target", "1.8");
-
-        Dependency dependency2 = new Dependency();
-        dependency2.setGroupId(yangbindingGroupId);
-        dependency2.setArtifactId(yangbindingArtifactId);
-        dependency2.setVersion(yangbindingVersion);
-        dependency2.setType("jar");
-        model.addDependency(dependency2);
+        return plugin;
     }
 
     /**
@@ -289,15 +334,17 @@ public class YangProjectWizard extends MavenProjectWizard {
     }
 
     /**
+     * Creates and returns a Repository object with the specified name and url.
+     * 
      * @param name name
      * @param url url
      * @return repository configuration by name and url
      */
     private Repository createRepoParameter(String name, String url) {
-        Repository r = new Repository();
-        r.setId(name);
-        r.setName(name);
-        r.setUrl(url);
-        return r;
+        Repository repo = new Repository();
+        repo.setId(name);
+        repo.setName(name);
+        repo.setUrl(url);
+        return repo;
     }
 }