Author: rfeng
Date: Sat Jan  9 18:10:58 2010
New Revision: 897505

URL: http://svn.apache.org/viewvc?rev=897505&view=rev
Log:
Add the ability to generate feature-based aggregated bundles

Modified:
    
tuscany/maven-plugins/trunk/maven-bundle-plugin/src/main/java/org/apache/tuscany/maven/bundle/plugin/BundleAggregatorMojo.java
    
tuscany/maven-plugins/trunk/maven-bundle-plugin/src/main/java/org/apache/tuscany/maven/bundle/plugin/ModuleBundlesBuildMojo.java

Modified: 
tuscany/maven-plugins/trunk/maven-bundle-plugin/src/main/java/org/apache/tuscany/maven/bundle/plugin/BundleAggregatorMojo.java
URL: 
http://svn.apache.org/viewvc/tuscany/maven-plugins/trunk/maven-bundle-plugin/src/main/java/org/apache/tuscany/maven/bundle/plugin/BundleAggregatorMojo.java?rev=897505&r1=897504&r2=897505&view=diff
==============================================================================
--- 
tuscany/maven-plugins/trunk/maven-bundle-plugin/src/main/java/org/apache/tuscany/maven/bundle/plugin/BundleAggregatorMojo.java
 (original)
+++ 
tuscany/maven-plugins/trunk/maven-bundle-plugin/src/main/java/org/apache/tuscany/maven/bundle/plugin/BundleAggregatorMojo.java
 Sat Jan  9 18:10:58 2010
@@ -45,7 +45,6 @@
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.logging.Log;
-import org.apache.maven.project.MavenProject;
 import org.apache.tuscany.maven.bundle.plugin.HeaderParser.HeaderClause;
 
 /**
@@ -57,15 +56,6 @@
  */
 public class BundleAggregatorMojo extends AbstractMojo {
     /**
-     * The project to create a distribution for.
-     *
-     * @parameter expression="${project}"
-     * @required
-     * @readonly
-     */
-    private MavenProject project;
-
-    /**
      * Root directory.
      *
      *  @parameter expression="${project.build.directory}/modules"
@@ -83,24 +73,24 @@
      * @parameter default-value== "org.apache.tuscany.sca.bundle";
      */
     private String bundleName = "org.apache.tuscany.sca.bundle";
-    
+
     /**
      * @parameter default-value== "2.0.0";
      */
     private String bundleVersion = "2.0.0";
-    
+
     // private static final Logger logger = 
Logger.getLogger(BundleAggregatorMojo.class.getName());
 
-    public void aggregateBundles(File root, File targetBundleFile) throws 
Exception {
-        Log log = getLog();
-        if (!root.isDirectory()) {
-            log.warn(root + " is not a directory");
-            return;
-        }
+    public static void aggregateBundles(Log log,
+                                        File root,
+                                        File[] files,
+                                        File targetBundleFile,
+                                        String bundleName,
+                                        String bundleVersion) throws Exception 
{
         targetBundleFile.getParentFile().mkdirs();
         Set<File> jarFiles = new HashSet<File>();
         List<Manifest> manifests = new ArrayList<Manifest>();
-        for (File child : root.listFiles()) {
+        for (File child : files) {
             try {
                 Manifest manifest = null;
                 if (child.isDirectory()) {
@@ -254,7 +244,13 @@
 
     public void execute() throws MojoExecutionException, MojoFailureException {
         try {
-            aggregateBundles(rootDirectory, targetBundleFile);
+            Log log = getLog();
+            if (!rootDirectory.isDirectory()) {
+                log.warn(rootDirectory + " is not a directory");
+                return;
+            }
+            File[] files = rootDirectory.listFiles();
+            aggregateBundles(log, rootDirectory, files, targetBundleFile, 
bundleName, bundleVersion);
         } catch (Exception e) {
             throw new MojoExecutionException(e.getMessage(), e);
         }

Modified: 
tuscany/maven-plugins/trunk/maven-bundle-plugin/src/main/java/org/apache/tuscany/maven/bundle/plugin/ModuleBundlesBuildMojo.java
URL: 
http://svn.apache.org/viewvc/tuscany/maven-plugins/trunk/maven-bundle-plugin/src/main/java/org/apache/tuscany/maven/bundle/plugin/ModuleBundlesBuildMojo.java?rev=897505&r1=897504&r2=897505&view=diff
==============================================================================
--- 
tuscany/maven-plugins/trunk/maven-bundle-plugin/src/main/java/org/apache/tuscany/maven/bundle/plugin/ModuleBundlesBuildMojo.java
 (original)
+++ 
tuscany/maven-plugins/trunk/maven-bundle-plugin/src/main/java/org/apache/tuscany/maven/bundle/plugin/ModuleBundlesBuildMojo.java
 Sat Jan  9 18:10:58 2010
@@ -256,6 +256,12 @@
     private boolean generateConfig = true;
 
     /**
+     * Generate an aggregated OSGi bundle for each feature
+     * @parameter default-value="false"
+     */
+    private boolean generateAggregatedBundle = false;
+    
+    /**
      * @parameter default-value="true"
      */
     private boolean generateBundleStart = true;
@@ -728,6 +734,12 @@
                 generateGatewayBundle(serviceProviders);
             }
 
+            if (useDistributionName) {
+                bundleLocations.nameMap.remove(project.getArtifactId());
+                jarNames.nameMap.remove(project.getArtifactId());
+                bundleSymbolicNames.nameMap.remove(project.getArtifactId());
+            }
+            
             // Generate a PDE target
             if (generateTargetPlatform) {
                 generatePDETarget(bundleSymbolicNames, root, log);
@@ -753,6 +765,10 @@
             if (generateAntScript) {
                 generateANTPath(jarNames, root, log);
             }
+            
+            if (generateAggregatedBundle) {
+                generateAggregatedBundles(bundleLocations, root, log);
+            }
 
         } catch (Exception e) {
             throw new MojoExecutionException(e.getMessage(), e);
@@ -1029,6 +1045,34 @@
         }
     }
 
+    private void generateAggregatedBundles(ProjectSet bundleLocations, File 
root, Log log) throws Exception {
+        for (Map.Entry<String, Set<String>> e : 
bundleLocations.nameMap.entrySet()) {
+            Set<String> locations = new HashSet<String>(e.getValue());
+            String featureName = (useDistributionName ? trim(e.getKey()) : "");
+            File feature = new File(root, "../" + featuresName + "/" + 
featureName);
+//            String bundleFileName = "tuscany-bundle-" + featureName + ".jar";
+//            if ("".equals(featureName)) {
+//                bundleFileName = "tuscany-bundle.jar";
+//            }
+            String bundleFileName = "tuscany-bundle.jar";
+            File bundleFile = new File(feature, bundleFileName);
+            log.info("Generating aggregated OSGi bundle: " + bundleFile);
+            File[] files = new File[locations.size()];
+            int i = 0;
+            for (String child : locations) {
+                files[i++] = new File(root, child);
+            }
+            String bundleVersion = "2.0.0";
+            String bundleName = "org.apache.tuscany.sca.bundle";
+            
+//            String bundleName = "org.apache.tuscany.sca.bundle." + 
featureName;
+//            if ("".equals(featureName)) {
+//                bundleName = "org.apache.tuscany.sca.bundle";
+//            }
+            BundleAggregatorMojo.aggregateBundles(log, root, files, 
bundleFile, bundleName, bundleVersion);
+        }
+    }
+
     private void generatePDETarget(ProjectSet bundleSymbolicNames, File root, 
Log log) throws FileNotFoundException,
         IOException {
         for (Map.Entry<String, Set<String>> e : 
bundleSymbolicNames.nameMap.entrySet()) {


Reply via email to