You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by dj...@apache.org on 2011/01/28 20:36:16 UTC

svn commit: r1064833 - in /karaf/trunk: deployer/kar/src/main/java/org/apache/karaf/deployer/kar/ deployer/kar/src/test/java/org/apache/karaf/deployer/kar/ tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/

Author: djencks
Date: Fri Jan 28 19:36:16 2011
New Revision: 1064833

URL: http://svn.apache.org/viewvc?rev=1064833&view=rev
Log:
KARAF-424 fix up kar installer to install features using features cfg file

Modified:
    karaf/trunk/deployer/kar/src/main/java/org/apache/karaf/deployer/kar/KarArtifactInstaller.java
    karaf/trunk/deployer/kar/src/test/java/org/apache/karaf/deployer/kar/KarArtifactInstallerTest.java
    karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java

Modified: karaf/trunk/deployer/kar/src/main/java/org/apache/karaf/deployer/kar/KarArtifactInstaller.java
URL: http://svn.apache.org/viewvc/karaf/trunk/deployer/kar/src/main/java/org/apache/karaf/deployer/kar/KarArtifactInstaller.java?rev=1064833&r1=1064832&r2=1064833&view=diff
==============================================================================
--- karaf/trunk/deployer/kar/src/main/java/org/apache/karaf/deployer/kar/KarArtifactInstaller.java (original)
+++ karaf/trunk/deployer/kar/src/main/java/org/apache/karaf/deployer/kar/KarArtifactInstaller.java Fri Jan 28 19:36:16 2011
@@ -23,6 +23,7 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URI;
 import java.util.Enumeration;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
@@ -99,7 +100,7 @@ public class KarArtifactInstaller implem
 			if (repoEntryName != null) {
                 File extract = extract(zipFile, buffer, entry, repoEntryName, localRepoPath);
                 if (isFeaturesRepository(extract)) {
-                    addToFeaturesRepositories(extract);
+                    addToFeaturesRepositories(repoEntryName);
                 }
 			}
             if (entry.getName().startsWith("resource")) {
@@ -228,17 +229,36 @@ public class KarArtifactInstaller implem
         return db.parse(artifact);
     }
 
-	private void addToFeaturesRepositories(File file)  {
+	private void addToFeaturesRepositories(String path)  {
+        URI mvnUri = pathToMvnUri(path);
 		try {
-			featuresService.addRepository(file.toURI());
+			featuresService.addRepository(mvnUri);
 			if (logger.isInfoEnabled())
-				logger.info("Added feature repository '" + file.toURI() + "'.");
+				logger.info("Added feature repository '" + mvnUri + "'.");
 		} catch (Exception e) {
-			logger.error("Unable to add repository '" + file.getName() + "'", e);
+			logger.error("Unable to add repository '" + mvnUri + "'", e);
 		}
 	}
 
-	public boolean canHandle(File file) {
+    static URI pathToMvnUri(String path) {
+        String[] bits = path.split("/");
+        String classifier = "feature";
+        String artifactType = "xml";
+        String version = bits[bits.length - 2];
+        String artifactId = bits[bits.length - 3];
+        StringBuilder buf = new StringBuilder("mvn:");
+        for (int i = 0; i < bits.length - 3; i++) {
+            buf.append(bits[i]);
+            if (i < bits.length - 4) {
+                buf.append(".");
+            }
+        }
+        buf.append("/").append(artifactId).append("/").append(version).append("/").append(artifactType).append("/").append(classifier);
+        URI mvnUri = URI.create(buf.toString());
+        return mvnUri;
+    }
+
+    public boolean canHandle(File file) {
 		// If the file ends with .kar, then we can handle it!
 		//
 		if (file.isFile() && file.getName().endsWith(KAR_SUFFIX)) {

Modified: karaf/trunk/deployer/kar/src/test/java/org/apache/karaf/deployer/kar/KarArtifactInstallerTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/deployer/kar/src/test/java/org/apache/karaf/deployer/kar/KarArtifactInstallerTest.java?rev=1064833&r1=1064832&r2=1064833&view=diff
==============================================================================
--- karaf/trunk/deployer/kar/src/test/java/org/apache/karaf/deployer/kar/KarArtifactInstallerTest.java (original)
+++ karaf/trunk/deployer/kar/src/test/java/org/apache/karaf/deployer/kar/KarArtifactInstallerTest.java Fri Jan 28 19:36:16 2011
@@ -198,5 +198,11 @@ public class KarArtifactInstallerTest {
 		//
 		EasyMock.verify(featuresService);
 	}
+
+    @Test
+    public void testPathToMvnUri() throws Exception {
+        URI uri = KarArtifactInstaller.pathToMvnUri("org/apache/geronimo/features/org.apache.geronimo.transaction.kar/3.1.1-SNAPSHOT/org.apache.geronimo.transaction.kar-3.1.1-SNAPSHOT-feature.xml");
+        assert "mvn:org.apache.geronimo.features/org.apache.geronimo.transaction.kar/3.1.1-SNAPSHOT/xml/feature".equals(uri.toString());
+    }
 			
 }

Modified: karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java?rev=1064833&r1=1064832&r2=1064833&view=diff
==============================================================================
--- karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java (original)
+++ karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java Fri Jan 28 19:36:16 2011
@@ -21,10 +21,18 @@
 package org.apache.karaf.tooling.features;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.net.URI;
 import java.util.Collection;
+import java.util.EnumSet;
+import java.util.Properties;
+import java.util.Set;
 
 import org.apache.karaf.deployer.kar.KarArtifactInstaller;
-import org.apache.karaf.features.internal.FeaturesServiceImpl;
+import org.apache.karaf.features.Feature;
+import org.apache.karaf.features.FeaturesService;
+import org.apache.karaf.features.Repository;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -51,6 +59,14 @@ public class InstallKarsMojo extends Moj
     protected String workDirectory;
 
     /**
+     * features config file.
+     *
+     * @parameter expression="${project.build.directory}/assembly/etc/org.apache.karaf.features.cfg"
+     * @required
+     */
+    protected File featuresCfgFile;
+
+    /**
      * Directory that resources are copied to during the build.
      *
      * @parameter expression="${project.build.directory}/assembly/local-repo"
@@ -58,12 +74,15 @@ public class InstallKarsMojo extends Moj
      */
     protected String localRepoDirectory;
 
+    private Properties featuresCfgProperties;
+
     public void execute() throws MojoExecutionException, MojoFailureException {
         KarArtifactInstaller installer = new KarArtifactInstaller();
         installer.setBasePath(workDirectory);
         installer.setLocalRepoPath(localRepoDirectory);
-        FeaturesServiceImpl featuresService = new FeaturesServiceImpl();
+        FeaturesService featuresService = new OfflineFeaturesService();
         installer.setFeaturesService(featuresService);
+        installer.init();
         Collection<Artifact> dependencies = project.getDependencyArtifacts();
         StringBuilder buf = new StringBuilder();
         for (Artifact artifact: dependencies) {
@@ -81,4 +100,83 @@ public class InstallKarsMojo extends Moj
             throw new MojoExecutionException("Could not unpack all dependencies:\n" + buf.toString());
         }
     }
+
+    private class OfflineFeaturesService implements FeaturesService {
+        private static final String FEATURES_REPOSITORIES = "featuresRepositories";
+
+        public void validateRepository(URI uri) throws Exception {
+        }
+
+        public void addRepository(URI url) throws Exception {
+            if (featuresCfgFile.exists()) {
+                Properties properties = new Properties();
+                FileInputStream in = new FileInputStream(featuresCfgFile);
+                try {
+                    properties.load(in);
+                } finally {
+                    in.close();
+                }
+                String existingFeatureRepos = properties.containsKey(FEATURES_REPOSITORIES)? properties.getProperty(FEATURES_REPOSITORIES) + ",": "";
+                existingFeatureRepos = existingFeatureRepos + url.toString();
+                properties.setProperty(FEATURES_REPOSITORIES, existingFeatureRepos);
+                FileOutputStream out = new FileOutputStream(featuresCfgFile);
+                try {
+                    properties.store(out, "Features Service config");
+                } finally {
+                    out.close();
+                }
+            }
+        }
+
+        public void removeRepository(URI url) {
+        }
+
+        public void restoreRepository(URI url) throws Exception {
+        }
+
+        public Repository[] listRepositories() {
+            return new Repository[0];
+        }
+
+        public void installFeature(String name) throws Exception {
+        }
+
+        public void installFeature(String name, String version) throws Exception {
+        }
+
+        public void installFeature(String name, String version, EnumSet<Option> options) throws Exception {
+        }
+
+        public void installFeature(Feature f, EnumSet<Option> options) throws Exception {
+        }
+
+        public void installFeatures(Set<Feature> features, EnumSet<Option> options) throws Exception {
+        }
+
+        public void uninstallFeature(String name) throws Exception {
+        }
+
+        public void uninstallFeature(String name, String version) throws Exception {
+        }
+
+        public Feature[] listFeatures() throws Exception {
+            return new Feature[0];
+        }
+
+        public Feature[] listInstalledFeatures() {
+            return new Feature[0];
+        }
+
+        public boolean isInstalled(Feature f) {
+            return false;
+        }
+
+        public Feature getFeature(String name, String version) throws Exception {
+            return null;
+        }
+
+        public Feature getFeature(String name) throws Exception {
+            return null;
+        }
+    }
 }