You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2015/03/10 19:04:31 UTC
karaf git commit: [KARAF-971] Switch the verify features resolution
mojo to use the MavenDownloader when downloading repositories
Repository: karaf
Updated Branches:
refs/heads/master f566a8b84 -> 60c2e4d08
[KARAF-971] Switch the verify features resolution mojo to use the MavenDownloader when downloading repositories
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/60c2e4d0
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/60c2e4d0
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/60c2e4d0
Branch: refs/heads/master
Commit: 60c2e4d085a2cbce4297ef9d48ec9afdf324b0e0
Parents: f566a8b
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Tue Mar 10 18:32:54 2015 +0100
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Tue Mar 10 18:32:54 2015 +0100
----------------------------------------------------------------------
.../features/VerifyFeatureResolutionMojo.java | 110 +++++++++++--------
1 file changed, 63 insertions(+), 47 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/60c2e4d0/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/VerifyFeatureResolutionMojo.java
----------------------------------------------------------------------
diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/VerifyFeatureResolutionMojo.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/VerifyFeatureResolutionMojo.java
index 9e23740..0aef4cc 100644
--- a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/VerifyFeatureResolutionMojo.java
+++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/VerifyFeatureResolutionMojo.java
@@ -27,10 +27,8 @@ import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
-import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
@@ -58,24 +56,25 @@ import aQute.bnd.osgi.Macro;
import aQute.bnd.osgi.Processor;
import org.apache.felix.utils.version.VersionRange;
import org.apache.felix.utils.version.VersionTable;
-import org.apache.karaf.features.Conditional;
-import org.apache.karaf.features.ConfigFileInfo;
-import org.apache.karaf.features.Feature;
import org.apache.karaf.features.FeatureEvent;
import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.features.Repository;
+import org.apache.karaf.features.internal.download.DownloadCallback;
import org.apache.karaf.features.internal.download.DownloadManager;
-import org.apache.karaf.features.internal.download.DownloadManagers;
+import org.apache.karaf.features.internal.download.Downloader;
+import org.apache.karaf.features.internal.download.StreamProvider;
+import org.apache.karaf.features.internal.model.Conditional;
+import org.apache.karaf.features.internal.model.ConfigFile;
+import org.apache.karaf.features.internal.model.Feature;
+import org.apache.karaf.features.internal.model.Features;
+import org.apache.karaf.features.internal.model.JaxbUtil;
import org.apache.karaf.features.internal.resolver.ResourceBuilder;
import org.apache.karaf.features.internal.resolver.ResourceImpl;
import org.apache.karaf.features.internal.resolver.ResourceUtils;
import org.apache.karaf.features.internal.service.Deployer;
-import org.apache.karaf.features.internal.service.RepositoryImpl;
import org.apache.karaf.features.internal.service.State;
import org.apache.karaf.features.internal.util.MapUtils;
import org.apache.karaf.features.internal.util.MultiException;
-import org.apache.karaf.tooling.url.CustomBundleURLStreamHandlerFactory;
-import org.apache.karaf.tooling.utils.InternalMavenResolver;
+import org.apache.karaf.profile.assembly.CustomDownloadManager;
import org.apache.karaf.tooling.utils.MojoSupport;
import org.apache.karaf.util.config.PropertiesLoader;
import org.apache.maven.artifact.Artifact;
@@ -86,6 +85,7 @@ import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
import org.apache.maven.project.MavenProject;
import org.ops4j.pax.url.mvn.MavenResolver;
+import org.ops4j.pax.url.mvn.MavenResolvers;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
@@ -147,13 +147,26 @@ public class VerifyFeatureResolutionMojo extends MojoSupport {
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
- DependencyHelper helper = DependencyHelperFactory.createDependencyHelper(this.container, this.project, this.mavenSession, getLog());
- resolver = new InternalMavenResolver(helper, getLog());
- CustomBundleURLStreamHandlerFactory.install(resolver);
+ Hashtable<String, String> config = new Hashtable<>();
+ StringBuilder remote = new StringBuilder();
+ for (Object obj : project.getRemoteProjectRepositories()) {
+ if (remote.length() > 0) {
+ remote.append(",");
+ }
+ remote.append(invoke(obj, "getUrl"));
+ remote.append("@id=").append(invoke(obj, "getId"));
+ }
+ config.put("remoteRepositories", remote.toString());
+ // TODO: add more configuration bits ?
+ resolver = MavenResolvers.createMavenResolver(config, null);
+ doExecute();
+ }
+
+ private Object invoke(Object object, String getter) throws MojoExecutionException {
try {
- doExecute();
- } finally {
- CustomBundleURLStreamHandlerFactory.uninstall();
+ return object.getClass().getMethod(getter).invoke(object);
+ } catch (Exception e) {
+ throw new MojoExecutionException("Unable to build remote repository from " + object.toString(), e);
}
}
@@ -179,20 +192,20 @@ public class VerifyFeatureResolutionMojo extends MojoSupport {
// TODO: allow using external configuration ?
ScheduledExecutorService executor = Executors.newScheduledThreadPool(8);
- DownloadManager manager = DownloadManagers.createDownloadManager(resolver, executor);
- final Map<String, Repository> repositories;
- Map<String, Feature[]> allFeatures = new HashMap<>();
+ DownloadManager manager = new CustomDownloadManager(resolver, executor);
+ final Map<String, Features> repositories;
+ Map<String, List<Feature>> allFeatures = new HashMap<>();
try {
repositories = loadRepositories(manager, descriptors);
for (String repoUri : repositories.keySet()) {
- Feature[] features = repositories.get(repoUri).getFeatures();
+ List<Feature> features = repositories.get(repoUri).getFeature();
// Ack features to inline configuration files urls
for (Feature feature : features) {
- for (org.apache.karaf.features.BundleInfo bi : feature.getBundles()) {
+ for (org.apache.karaf.features.internal.model.Bundle bi : feature.getBundle()) {
String loc = bi.getLocation();
String nloc = null;
if (loc.contains("file:")) {
- for (ConfigFileInfo cfi : feature.getConfigurationFiles()) {
+ for (ConfigFile cfi : feature.getConfigfile()) {
if (cfi.getFinalname().substring(1)
.equals(loc.substring(loc.indexOf("file:") + "file:".length()))) {
nloc = cfi.getLocation();
@@ -214,12 +227,12 @@ public class VerifyFeatureResolutionMojo extends MojoSupport {
List<Feature> featuresToTest = new ArrayList<>();
if (verifyTransitive) {
- for (Feature[] features : allFeatures.values()) {
- featuresToTest.addAll(Arrays.asList(features));
+ for (List<Feature> features : allFeatures.values()) {
+ featuresToTest.addAll(features);
}
} else {
for (String uri : descriptors) {
- featuresToTest.addAll(Arrays.asList(allFeatures.get(uri)));
+ featuresToTest.addAll(allFeatures.get(uri));
}
}
if (features != null && !features.isEmpty()) {
@@ -303,7 +316,7 @@ public class VerifyFeatureResolutionMojo extends MojoSupport {
}
}
- private void verifyResolution(DownloadManager manager, final Map<String, Repository> repositories, Set<String> features, Hashtable<String, String> properties) throws MojoExecutionException {
+ private void verifyResolution(DownloadManager manager, final Map<String, Features> repositories, Set<String> features, Hashtable<String, String> properties) throws MojoExecutionException {
try {
Bundle systemBundle = getSystemBundle(getMetadata(properties, "metadata#"));
DummyDeployCallback callback = new DummyDeployCallback(systemBundle, repositories.values());
@@ -458,24 +471,27 @@ public class VerifyFeatureResolutionMojo extends MojoSupport {
}
- public static Map<String, Repository> loadRepositories(DownloadManager manager, Set<String> uris) throws Exception {
- // TODO: use downloader
- final Map<String, Repository> repositories = new HashMap<>();
- for (String uri : uris) {
- doLoadRepository(manager, repositories, URI.create(uri));
- }
- return repositories;
- }
-
- private static void doLoadRepository(DownloadManager manager, Map<String, Repository> repositories, URI uri) throws IOException {
- if (!repositories.containsKey(uri.toString())) {
- RepositoryImpl repository = new RepositoryImpl(uri);
- repository.load(true);
- repositories.put(uri.toString(), repository);
- for (URI dep : repository.getRepositories()) {
- doLoadRepository(manager, repositories, dep);
- }
+ public static Map<String, Features> loadRepositories(DownloadManager manager, Set<String> uris) throws Exception {
+ final Map<String, Features> loaded = new HashMap<>();
+ final Downloader downloader = manager.createDownloader();
+ for (String repository : uris) {
+ downloader.download(repository, new DownloadCallback() {
+ @Override
+ public void downloaded(final StreamProvider provider) throws Exception {
+ try (InputStream is = provider.open()) {
+ Features featuresModel = JaxbUtil.unmarshal(provider.getUrl(), is, false);
+ synchronized (loaded) {
+ loaded.put(provider.getUrl(), featuresModel);
+ for (String innerRepository : featuresModel.getRepository()) {
+ downloader.download(innerRepository, this);
+ }
+ }
+ }
+ }
+ });
}
+ downloader.await();
+ return loaded;
}
public static Set<String> getPrefixedProperties(Map<String, String> properties, String prefix) {
@@ -639,7 +655,7 @@ public class VerifyFeatureResolutionMojo extends MojoSupport {
private final Deployer.DeploymentState dstate;
private final AtomicLong nextBundleId = new AtomicLong(0);
- public DummyDeployCallback(Bundle sysBundle, Collection<Repository> repositories) throws Exception {
+ public DummyDeployCallback(Bundle sysBundle, Collection<Features> repositories) throws Exception {
systemBundle = sysBundle;
dstate = new Deployer.DeploymentState();
dstate.bundles = new HashMap<>();
@@ -650,8 +666,8 @@ public class VerifyFeatureResolutionMojo extends MojoSupport {
MapUtils.addToMapSet(dstate.bundlesPerRegion, FeaturesService.ROOT_REGION, 0l);
dstate.bundles.put(0l, systemBundle);
- for (Repository repo : repositories) {
- for (Feature f : repo.getFeatures()) {
+ for (Features repo : repositories) {
+ for (Feature f : repo.getFeature()) {
dstate.features.put(f.getId(), f);
}
}
@@ -675,7 +691,7 @@ public class VerifyFeatureResolutionMojo extends MojoSupport {
}
@Override
- public void installFeature(Feature feature) throws IOException, InvalidSyntaxException {
+ public void installFeature(org.apache.karaf.features.Feature feature) throws IOException, InvalidSyntaxException {
}
@Override