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;
+ }
+ }
}