You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by an...@apache.org on 2013/03/26 17:32:48 UTC

svn commit: r1461208 - in /karaf/cellar/branches/cellar-2.3.x/bundle: pom.xml src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java src/main/resources/OSGI-INF/blueprint/blueprint.xml

Author: anierbeck
Date: Tue Mar 26 16:32:48 2013
New Revision: 1461208

URL: http://svn.apache.org/r1461208
Log:
[KARAF-2251] - Cellar: features:install ignores incoming and outgoing blacklist

Modified:
    karaf/cellar/branches/cellar-2.3.x/bundle/pom.xml
    karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
    karaf/cellar/branches/cellar-2.3.x/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml

Modified: karaf/cellar/branches/cellar-2.3.x/bundle/pom.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.3.x/bundle/pom.xml?rev=1461208&r1=1461207&r2=1461208&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.3.x/bundle/pom.xml (original)
+++ karaf/cellar/branches/cellar-2.3.x/bundle/pom.xml Tue Mar 26 16:32:48 2013
@@ -42,6 +42,7 @@
             org.apache.karaf.shell.console;version="[2.3,3)",
             org.apache.karaf.shell.console.commands;version="[2.3,3)",
             org.apache.karaf.shell.console.completer;version="[2.3,3)",
+            org.apache.karaf.features;version="[2.2,3)",
             org.osgi.service.cm;version="[1.4,2)",
             org.osgi*,
             org.slf4j;resolution:=optional
@@ -64,6 +65,12 @@
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.configadmin</artifactId>
         </dependency>
+        
+        <!-- Karaf features -->
+        <dependency>
+            <groupId>org.apache.karaf.features</groupId>
+            <artifactId>org.apache.karaf.features.core</artifactId>
+        </dependency>
 
         <!-- Logging Dependencies -->
         <dependency>

Modified: karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java?rev=1461208&r1=1461207&r2=1461208&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java (original)
+++ karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java Tue Mar 26 16:32:48 2013
@@ -13,12 +13,18 @@
  */
 package org.apache.karaf.cellar.bundle;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.karaf.cellar.core.Configurations;
 import org.apache.karaf.cellar.core.control.BasicSwitch;
 import org.apache.karaf.cellar.core.control.Switch;
 import org.apache.karaf.cellar.core.control.SwitchStatus;
 import org.apache.karaf.cellar.core.event.EventHandler;
 import org.apache.karaf.cellar.core.event.EventType;
+import org.apache.karaf.features.BundleInfo;
+import org.apache.karaf.features.Feature;
+import org.apache.karaf.features.FeaturesService;
 import org.osgi.framework.BundleEvent;
 import org.osgi.framework.BundleException;
 import org.osgi.service.cm.Configuration;
@@ -32,6 +38,8 @@ public class BundleEventHandler extends 
     public static final String SWITCH_ID = "org.apache.karaf.cellar.bundle.handler";
 
     private final Switch eventSwitch = new BasicSwitch(SWITCH_ID);
+    
+    private FeaturesService featureService;
 
     /**
      * Handles remote bundle events.
@@ -54,6 +62,13 @@ public class BundleEventHandler extends 
         try {
             //Check if the pid is marked as local.
             if (isAllowed(event.getSourceGroup(), Constants.CATEGORY, event.getLocation(), EventType.INBOUND)) {
+            	//check the features first
+            	List<Feature> matchingFeatures = retrieveFeature(event);
+            	for (Feature feature : matchingFeatures) {
+					if (!isAllowed(event.getSourceGroup(), "features", feature.getName(), EventType.INBOUND)) {
+						LOGGER.warn("CELLAR BUNDLE: bundle {} is contained in a feature marked as BLOCKED INBOUND", event.getLocation());
+					}
+				}
                 if (event.getType() == BundleEvent.INSTALLED) {
                     LOGGER.debug("CELLAR BUNDLE: installing bundle {} from {}", event.getId(), event.getLocation());
                     installBundleFromLocation(event.getLocation());
@@ -73,9 +88,26 @@ public class BundleEventHandler extends 
             } else LOGGER.warn("CELLAR BUNDLE: bundle {} is marked as BLOCKED INBOUND", event.getLocation());
         } catch (BundleException e) {
             LOGGER.error("CELLAR BUNDLE: failed to handle bundle event", e);
+        } catch (Exception e) {
+        	LOGGER.error("CELLAR BUNDLE: failed to handle bundle event", e);
         }
     }
 
+    private List<Feature> retrieveFeature(RemoteBundleEvent event) throws Exception {
+    	Feature[] features = featureService.listFeatures();
+    	List<Feature> matchingFeatures = new ArrayList<Feature>();
+    	for (Feature feature : features) {
+			List<BundleInfo> bundles = feature.getBundles();
+			for (BundleInfo bundleInfo : bundles) {
+				String location = bundleInfo.getLocation();
+				if (location.equalsIgnoreCase(event.getLocation())) {
+					matchingFeatures.add(feature);
+				}
+			}
+		}
+		return matchingFeatures;
+	}
+    
     /**
      * Initialization Method.
      */
@@ -111,5 +143,19 @@ public class BundleEventHandler extends 
     public Class<RemoteBundleEvent> getType() {
         return RemoteBundleEvent.class;
     }
+    
+	/**
+	 * @return the featureService
+	 */
+	public FeaturesService getFeatureService() {
+		return featureService;
+	}
+
+	/**
+	 * @param featureService the featureService to set
+	 */
+	public void setFeatureService(FeaturesService featureService) {
+		this.featureService = featureService;
+	}
 
 }

Modified: karaf/cellar/branches/cellar-2.3.x/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.3.x/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml?rev=1461208&r1=1461207&r2=1461208&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.3.x/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml (original)
+++ karaf/cellar/branches/cellar-2.3.x/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml Tue Mar 26 16:32:48 2013
@@ -42,6 +42,7 @@
         <property name="clusterManager" ref="clusterManager"/>
         <property name="groupManager" ref="groupManager"/>
         <property name="bundleContext" ref="blueprintBundleContext"/>
+        <property name="featuresService" ref="featuresService"/>
     </bean>
     <service ref="eventHandler" interface="org.apache.karaf.cellar.core.event.EventHandler">
         <service-properties>
@@ -54,5 +55,6 @@
     <reference id="groupManager" interface="org.apache.karaf.cellar.core.GroupManager"/>
     <reference id="configurationAdmin" interface="org.osgi.service.cm.ConfigurationAdmin"/>
     <reference id="eventProducer" interface="org.apache.karaf.cellar.core.event.EventProducer"/>
+    <reference id="featuresService" interface="org.apache.karaf.features.FeaturesService"/>
 
 </blueprint>