]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - maven/maven-argeo-osgi-plugin/src/main/java/org/argeo/slc/maven/plugins/osgi/AbstractBundlesPackagerMojo.java
Add update manifest feature
[gpl/argeo-slc.git] / maven / maven-argeo-osgi-plugin / src / main / java / org / argeo / slc / maven / plugins / osgi / AbstractBundlesPackagerMojo.java
index acc894107424a2716f26c101ff28286df1022bd8..42ee07e11bacf79f633f8a0049f609632375c9af 100644 (file)
@@ -12,12 +12,12 @@ import java.util.jar.Attributes;
 import java.util.jar.Manifest;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.project.MavenProject;
 
 /**
+ * Base class for MoJo analyzing a set of bundles directories.
+ * 
  * @author mbaudier
  * 
  */
@@ -56,6 +56,15 @@ public abstract class AbstractBundlesPackagerMojo extends AbstractOsgiMojo {
         */
        protected boolean strictManifestVersion;
 
+       /**
+        * Whether the manifest should be updated with the release version.
+        * 
+        * @parameter expression="${updateManifestWhenReleasing}"
+        *            default-value="true"
+        * @required
+        */
+       protected boolean updateManifestWhenReleasing;
+
        /**
         * Whether should fail if symbolic name does not match artifact id.
         * 
@@ -69,14 +78,7 @@ public abstract class AbstractBundlesPackagerMojo extends AbstractOsgiMojo {
        protected List analyze(boolean willGenerate) throws MojoExecutionException {
                List list = new ArrayList();
 
-               File[] bundleDirs = bundlesDirectory.listFiles(new FileFilter() {
-                       public boolean accept(File file) {
-                               if (!file.isDirectory())
-                                       return false;
-
-                               return manifestFileFromDir(file).exists();
-                       }
-               });
+               File[] bundleDirs = bundlesDirectory.listFiles(bundleFileFilter());
                for (int i = 0; i < bundleDirs.length; i++) {
 
                        File dir = bundleDirs[i];
@@ -129,19 +131,19 @@ public abstract class AbstractBundlesPackagerMojo extends AbstractOsgiMojo {
                else
                        versionMfMain = versionMf;
 
-               int sIndex = project.getModel().getVersion().lastIndexOf("-SNAPSHOT");
+               int sIndex = snapshotIndex();
                String versionMain;
                String buildId;
                boolean isSnapshot = false;
                if (sIndex >= 0) {// SNAPSHOT
-                       versionMain = project.getVersion().substring(0, sIndex);
+                       versionMain = versionMain(sIndex);
                        // buildId = "D_" + sdf.format(new Date());// D for dev
                        buildId = "SNAPSHOT";
                        isSnapshot = true;
                } else {
                        versionMain = project.getVersion();
                        // buildId = "R_" + sdf.format(new Date());// R for release
-                       buildId = "";
+                       buildId = "R" + sdf.format(new Date());
                }
 
                if (!versionMain.equals(versionMfMain)) {
@@ -162,16 +164,11 @@ public abstract class AbstractBundlesPackagerMojo extends AbstractOsgiMojo {
                        newVersionArt = versionMfMain;
                }
 
-               //boolean debug = true;
+               // boolean debug = true;
                boolean debug = getLog().isDebugEnabled();
                if (debug && willGenerate) {
                        getLog().info("\n## " + artifactId);
                        getLog().info("project.getVersion()=" + project.getVersion());
-                       // getLog().info(
-                       // "project.getModel().getVersion()="
-                       // + project.getModel().getVersion());
-                       // getLog().info("versionMf=" + versionMf);
-                       // getLog().info("buildId=" + buildId);
                        getLog().info("newVersionMf=" + newVersionMf);
                }
 
@@ -199,6 +196,77 @@ public abstract class AbstractBundlesPackagerMojo extends AbstractOsgiMojo {
                                bundlesPomArtifactId, project.getVersion(), "pom");
        }
 
+       protected StringBuffer createPomFileHeader(String parentGroupId,
+                       String parentArtifactId, String parentBaseVersion, String groupId,
+                       String artifactId, String packaging) {
+               StringBuffer pom = new StringBuffer();
+               // not using append() systematically for the sake of clarity
+               pom.append("<project>\n");
+               pom.append("\t<modelVersion>4.0.0</modelVersion>\n");
+               pom.append("\t<parent>\n");
+               pom.append("\t\t<groupId>" + parentGroupId + "</groupId>\n");
+               pom.append("\t\t<artifactId>" + parentArtifactId + "</artifactId>\n");
+               pom.append("\t\t<version>" + parentBaseVersion + "</version>\n");
+               pom.append("\t</parent>\n");
+               pom.append("\t<groupId>" + groupId + "</groupId>\n");
+               pom.append("\t<artifactId>" + artifactId + "</artifactId>\n");
+               pom.append("\t<packaging>" + packaging + "</packaging>\n");
+               return pom;
+
+               // TODO: use the Model object e.g.: (from install plugin)
+               // Model model = new Model();
+               // model.setModelVersion( "4.0.0" );
+               // model.setGroupId( groupId );
+               // model.setArtifactId( artifactId );
+               // model.setVersion( version );
+               // model.setPackaging( packaging );
+               // model.setDescription( "POM was created from install:install-file" );
+               // fw = new FileWriter( tempFile );
+               // tempFile.deleteOnExit();
+               // new MavenXpp3Writer().write( fw, model );
+               // ArtifactMetadata metadata = new ProjectArtifactMetadata( artifact,
+               // tempFile );
+               // artifact.addMetadata( metadata );
+
+       }
+
+       /** Simple close the project tag */
+       protected String closePomFile(StringBuffer pom) {
+               pom.append("</project>\n");
+               return pom.toString();
+       }
+
+       protected Manifest readManifest(File file) throws IOException {
+               Manifest manifest = new Manifest();
+               FileInputStream in = new FileInputStream(file);
+               manifest.read(in);
+               in.close();
+               return manifest;
+       }
+
+       protected int snapshotIndex() {
+               return project.getModel().getVersion().lastIndexOf("-SNAPSHOT");
+       }
+
+       protected String versionMain(int sIndex) {
+               return project.getVersion().substring(0, sIndex);
+       }
+
+       protected File getBundleDirectory() {
+               return bundlesDirectory;
+       }
+
+       protected FileFilter bundleFileFilter() {
+               return new FileFilter() {
+                       public boolean accept(File file) {
+                               if (!file.isDirectory())
+                                       return false;
+
+                               return manifestFileFromDir(file).exists();
+                       }
+               };
+       }
+
        protected static class BundlePackage {
                private final Artifact artifact;
                private final File bundleDir;
@@ -229,13 +297,19 @@ public abstract class AbstractBundlesPackagerMojo extends AbstractOsgiMojo {
                public Manifest getManifest() {
                        return manifest;
                }
-       }
 
-       protected Manifest readManifest(File file) throws IOException {
-               Manifest manifest = new Manifest();
-               FileInputStream in = new FileInputStream(file);
-               manifest.read(in);
-               in.close();
-               return manifest;
+               public File getManifestFile() {
+                       return new File(getPackageFile().getPath() + ".MF");
+               }
+
+               public File getPomFile() {
+                       return new File(getPackageFile().getPath() + ".pom.xml");
+               }
+
+               public String toString() {
+                       return "Bundle: " + bundleDir;
+               }
+
        }
+
 }