You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2016/06/20 14:17:10 UTC
karaf-cellar git commit: [KARAF-4322] Improve features repository
parsing to update the cluster map. Leverage support of install/uninstall flag
of the features service.
Repository: karaf-cellar
Updated Branches:
refs/heads/master b0d954e23 -> 037a7c9b8
[KARAF-4322] Improve features repository parsing to update the cluster map. Leverage support of install/uninstall flag of the features service.
Project: http://git-wip-us.apache.org/repos/asf/karaf-cellar/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf-cellar/commit/037a7c9b
Tree: http://git-wip-us.apache.org/repos/asf/karaf-cellar/tree/037a7c9b
Diff: http://git-wip-us.apache.org/repos/asf/karaf-cellar/diff/037a7c9b
Branch: refs/heads/master
Commit: 037a7c9b81e7173951af8a4275d0f726ae078669
Parents: b0d954e
Author: Jean-Baptiste Onofr� <jb...@apache.org>
Authored: Mon Jun 20 16:16:11 2016 +0200
Committer: Jean-Baptiste Onofr� <jb...@apache.org>
Committed: Mon Jun 20 16:16:11 2016 +0200
----------------------------------------------------------------------
features/pom.xml | 3 +
.../internal/CellarFeaturesMBeanImpl.java | 90 ++++----------------
.../cellar/features/shell/RepoAddCommand.java | 39 ++-------
.../features/shell/RepoRemoveCommand.java | 37 +-------
4 files changed, 31 insertions(+), 138 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/037a7c9b/features/pom.xml
----------------------------------------------------------------------
diff --git a/features/pom.xml b/features/pom.xml
index 10513eb..fba0212 100644
--- a/features/pom.xml
+++ b/features/pom.xml
@@ -115,8 +115,11 @@
*
</Import-Package>
<Private-Package>
+ org.apache.karaf.features.internal.model,
org.apache.karaf.cellar.features.management.internal,
org.apache.karaf.cellar.features.internal.osgi,
+ org.apache.felix.utils.version,
+ org.apache.karaf.util,
org.apache.karaf.util.tracker;-split-package:=merge-first
</Private-Package>
</instructions>
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/037a7c9b/features/src/main/java/org/apache/karaf/cellar/features/management/internal/CellarFeaturesMBeanImpl.java
----------------------------------------------------------------------
diff --git a/features/src/main/java/org/apache/karaf/cellar/features/management/internal/CellarFeaturesMBeanImpl.java b/features/src/main/java/org/apache/karaf/cellar/features/management/internal/CellarFeaturesMBeanImpl.java
index 7af4e04..a4d4574 100644
--- a/features/src/main/java/org/apache/karaf/cellar/features/management/internal/CellarFeaturesMBeanImpl.java
+++ b/features/src/main/java/org/apache/karaf/cellar/features/management/internal/CellarFeaturesMBeanImpl.java
@@ -26,6 +26,8 @@ import org.apache.karaf.cellar.features.ClusterRepositoryEvent;
import org.apache.karaf.cellar.features.management.CellarFeaturesMBean;
import org.apache.karaf.features.*;
// import org.osgi.framework.BundleEvent;
+import org.apache.karaf.features.internal.model.Features;
+import org.apache.karaf.features.internal.model.JaxbUtil;
import org.osgi.service.cm.ConfigurationAdmin;
import javax.management.NotCompliantMBeanException;
@@ -438,39 +440,14 @@ public class CellarFeaturesMBeanImpl extends StandardMBean implements CellarFeat
}
}
if (name == null) {
- // update the repository temporary locally
- Repository repository = null;
- boolean localRegistered = false;
- // local lookup
- for (Repository registeredRepository : featuresService.listRepositories()) {
- if (registeredRepository.getURI().equals(uri)) {
- repository = registeredRepository;
- break;
- }
- }
- if (repository == null) {
- // registered locally
- try {
- featuresService.addRepository(uri);
- } catch (Exception e) {
- throw new IllegalArgumentException("Features repository URL " + uri + " is not valid: " + e.getMessage());
- }
- // get the repository
- for (Repository registeredRepository : featuresService.listRepositories()) {
- if (registeredRepository.getURI().equals(uri)) {
- repository = registeredRepository;
- break;
- }
- }
- name = repository.getName();
- } else {
- localRegistered = true;
- }
+ // parsing the features repository to get content
+ Features repository = JaxbUtil.unmarshal(uri.toASCIIString(), true);
// update the cluster group
clusterRepositories.put(uri.toString(), name);
- for (Feature feature : repository.getFeatures()) {
+ // update the features in the cluster group
+ for (Feature feature : repository.getFeature()) {
FeatureState state = new FeatureState();
state.setName(feature.getName());
state.setVersion(feature.getVersion());
@@ -478,10 +455,6 @@ public class CellarFeaturesMBeanImpl extends StandardMBean implements CellarFeat
clusterFeatures.put(feature.getName() + "/" + feature.getVersion(), state);
}
- // un-register the repository if it's not local registered
- if (!localRegistered)
- featuresService.removeRepository(uri);
-
// broadcast the cluster event
ClusterRepositoryEvent event = new ClusterRepositoryEvent(uri.toString(), RepositoryEvent.EventType.RepositoryAdded);
event.setInstall(install);
@@ -549,58 +522,31 @@ public class CellarFeaturesMBeanImpl extends StandardMBean implements CellarFeat
for (String url : urls) {
// looking for the URL in the list
- String name = null;
- for (String clusterRepository : clusterRepositories.keySet()) {
- if (clusterRepository.equals(url)) {
- name = clusterRepositories.get(clusterRepository);
+ boolean found = false;
+ for (String repository : clusterRepositories.keySet()) {
+ if (repository.equals(repository)) {
+ found = true;
break;
}
}
- if (name == null) {
- // update the repository temporary locally
- Repository repository = null;
- boolean localRegistered = false;
- // local lookup
- for (Repository registeredRepository : featuresService.listRepositories()) {
- if (registeredRepository.getURI().equals(new URI(url))) {
- repository = registeredRepository;
- break;
- }
- }
- if (repository == null) {
- // registered locally
- try {
- featuresService.addRepository(new URI(url));
- } catch (Exception e) {
- throw new IllegalArgumentException("Features repository URL " + url + " is not valid: " + e.getMessage());
- }
- // get the repository
- for (Repository registeredRepository : featuresService.listRepositories()) {
- if (registeredRepository.getURI().equals(new URI(url))) {
- repository = registeredRepository;
- break;
- }
- }
- } else {
- localRegistered = true;
- }
+ if (found) {
+ Features repositoryModel = JaxbUtil.unmarshal(url, true);
- // update the cluster group
+ // update the features repositories in the cluster group
clusterRepositories.remove(url);
- for (Feature feature : repository.getFeatures()) {
+ // update the features in the cluster group
+ for (Feature feature : repositoryModel.getFeature()) {
clusterFeatures.remove(feature.getName() + "/" + feature.getVersion());
}
- // un-register the repository if it's not local registered
- if (!localRegistered)
- featuresService.removeRepository(new URI(url));
-
// broadcast a cluster event
- ClusterRepositoryEvent event = new ClusterRepositoryEvent(repo, RepositoryEvent.EventType.RepositoryRemoved);
+ ClusterRepositoryEvent event = new ClusterRepositoryEvent(url, RepositoryEvent.EventType.RepositoryRemoved);
event.setUninstall(uninstall);
event.setSourceGroup(group);
eventProducer.produce(event);
+ } else {
+ throw new IllegalArgumentException("Features repository URL " + url + " not found in cluster group " + groupName);
}
}
} finally {
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/037a7c9b/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoAddCommand.java
----------------------------------------------------------------------
diff --git a/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoAddCommand.java b/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoAddCommand.java
index b00a111..549e887 100644
--- a/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoAddCommand.java
+++ b/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoAddCommand.java
@@ -27,6 +27,8 @@ import org.apache.karaf.features.FeaturesService;
import org.apache.karaf.features.Repository;
import org.apache.karaf.features.RepositoryEvent;
import org.apache.karaf.features.command.completers.AvailableRepoNameCompleter;
+import org.apache.karaf.features.internal.model.Features;
+import org.apache.karaf.features.internal.model.JaxbUtil;
import org.apache.karaf.shell.api.action.Argument;
import org.apache.karaf.shell.api.action.Command;
import org.apache.karaf.shell.api.action.Completion;
@@ -97,41 +99,16 @@ public class RepoAddCommand extends CellarCommandSupport {
break;
}
}
+
if (name == null) {
- // update the repository temporary locally
- Repository repository = null;
- boolean localRegistered = false;
- // local lookup
- for (Repository registeredRepository : featuresService.listRepositories()) {
- if (registeredRepository.getURI().equals(uri)) {
- repository = registeredRepository;
- break;
- }
- }
- if (repository == null) {
- // registered locally
- try {
- featuresService.addRepository(uri);
- } catch (Exception e) {
- System.err.println("Repository URL " + uri + " is not valid: " + e.getMessage());
- return null;
- }
- // get the repository
- for (Repository registeredRepository : featuresService.listRepositories()) {
- if (registeredRepository.getURI().equals(uri)) {
- repository = registeredRepository;
- break;
- }
- }
- } else {
- localRegistered = true;
- }
+ // parsing the features repository to get content
+ Features repository = JaxbUtil.unmarshal(uri.toASCIIString(), true);
// update the features repositories in the cluster group
clusterRepositories.put(uri.toString(), repository.getName());
// update the features in the cluster group
- for (Feature feature : repository.getFeatures()) {
+ for (Feature feature : repository.getFeature()) {
FeatureState featureState = new FeatureState();
featureState.setName(feature.getName());
featureState.setVersion(feature.getVersion());
@@ -139,10 +116,6 @@ public class RepoAddCommand extends CellarCommandSupport {
clusterFeatures.put(feature.getName() + "/" + feature.getVersion(), featureState);
}
- // un-register the repository if it's not local registered
- if (!localRegistered)
- featuresService.removeRepository(uri);
-
// broadcast the cluster event
ClusterRepositoryEvent event = new ClusterRepositoryEvent(uri.toString(), RepositoryEvent.EventType.RepositoryAdded);
event.setInstall(install);
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/037a7c9b/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoRemoveCommand.java
----------------------------------------------------------------------
diff --git a/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoRemoveCommand.java b/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoRemoveCommand.java
index df03c29..65bd6df 100644
--- a/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoRemoveCommand.java
+++ b/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoRemoveCommand.java
@@ -27,6 +27,8 @@ import org.apache.karaf.features.FeaturesService;
import org.apache.karaf.features.Repository;
import org.apache.karaf.features.RepositoryEvent;
import org.apache.karaf.features.command.completers.InstalledRepoNameCompleter;
+import org.apache.karaf.features.internal.model.Features;
+import org.apache.karaf.features.internal.model.JaxbUtil;
import org.apache.karaf.shell.api.action.Argument;
import org.apache.karaf.shell.api.action.Command;
import org.apache.karaf.shell.api.action.Completion;
@@ -121,47 +123,16 @@ public class RepoRemoveCommand extends CellarCommandSupport {
}
}
if (found) {
- // update the repository temporary locally
- Repository repository = null;
- boolean localRegistered = false;
- // local lookup
- for (Repository registeredRepository : featuresService.listRepositories()) {
- if (registeredRepository.getURI().equals(new URI(url))) {
- repository = registeredRepository;
- break;
- }
- }
- if (repository == null) {
- // registered locally
- try {
- featuresService.addRepository(new URI(url));
- } catch (Exception e) {
- System.err.println("Repository URL " + url + " is not valid: " + e.getMessage());
- continue;
- }
- // get the repository
- for (Repository registeredRepository : featuresService.listRepositories()) {
- if (registeredRepository.getURI().equals(new URI(url))) {
- repository = registeredRepository;
- break;
- }
- }
- } else {
- localRegistered = true;
- }
+ Features repositoryModel = JaxbUtil.unmarshal(url, true);
// update the features repositories in the cluster group
clusterRepositories.remove(url);
// update the features in the cluster group
- for (Feature feature : repository.getFeatures()) {
+ for (Feature feature : repositoryModel.getFeature()) {
clusterFeatures.remove(feature.getName() + "/" + feature.getVersion());
}
- // un-register the repository if it's not local registered
- if (!localRegistered)
- featuresService.removeRepository(new URI(url));
-
// broadcast a cluster event
ClusterRepositoryEvent event = new ClusterRepositoryEvent(url, RepositoryEvent.EventType.RepositoryRemoved);
event.setUninstall(uninstall);