You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by jw...@apache.org on 2012/02/29 01:16:42 UTC

svn commit: r1294912 - in /aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core: archive/ internal/

Author: jwross
Date: Wed Feb 29 00:16:41 2012
New Revision: 1294912

URL: http://svn.apache.org/viewvc?rev=1294912&view=rev
Log:
ARIES-825: Update subsystems to latest Subsystem, Resolver, and Repository APIs.

Initial support for Subsystem-ExportService header in composites.

Added:
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceCapability.java
Modified:
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/DeploymentManifest.java
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/HeaderFactory.java
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceHeader.java
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceHeader.java
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceRequirement.java
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemManifest.java
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/AriesSubsystem.java

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/DeploymentManifest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/DeploymentManifest.java?rev=1294912&r1=1294911&r2=1294912&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/DeploymentManifest.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/DeploymentManifest.java Wed Feb 29 00:16:41 2012
@@ -39,6 +39,7 @@ public class DeploymentManifest {
 	public static final String PROVISION_RESOURCE = SubsystemConstants.PROVISION_RESOURCE;
 	public static final String REQUIRE_BUNDLE = Constants.REQUIRE_BUNDLE;
 	public static final String REQUIRE_CAPABILITY = Constants.REQUIRE_CAPABILITY;
+	public static final String SUBSYSTEM_EXPORTSERVICE = SubsystemConstants.SUBSYSTEM_EXPORTSERVICE;
 	public static final String SUBSYSTEM_IMPORTSERVICE = SubsystemConstants.SUBSYSTEM_IMPORTSERVICE;
 	public static final String SUBSYSTEM_SYMBOLICNAME = SubsystemConstants.SUBSYSTEM_SYMBOLICNAME;
 	public static final String SUBSYSTEM_VERSION = SubsystemConstants.SUBSYSTEM_VERSION;
@@ -137,6 +138,9 @@ public class DeploymentManifest {
 				header = subsystemManifest.getProvideCapabilityHeader();
 				if (header != null)
 					headers.put(PROVIDE_CAPABILITY, header);
+				header = subsystemManifest.getSubsystemExportServiceHeader();
+				if (header != null)
+					headers.put(SUBSYSTEM_EXPORTSERVICE, header);
 				// TODO Compute additional headers for a composite. 
 			}
 			// Features require no additional headers.
@@ -184,6 +188,10 @@ public class DeploymentManifest {
 		return (RequireCapabilityHeader)getHeaders().get(REQUIRE_CAPABILITY);
 	}
 	
+	public SubsystemExportServiceHeader getSubsystemExportServiceHeader() {
+		return (SubsystemExportServiceHeader)getHeaders().get(SUBSYSTEM_EXPORTSERVICE);
+	}
+	
 	public SubsystemImportServiceHeader getSubsystemImportServiceHeader() {
 		return (SubsystemImportServiceHeader)getHeaders().get(SUBSYSTEM_IMPORTSERVICE);
 	}

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java?rev=1294912&r1=1294911&r2=1294912&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java Wed Feb 29 00:16:41 2012
@@ -132,6 +132,11 @@ public interface Grammar {
 	public static final String CAPABILITY = NAMESPACE + "(?:;\\s*(?:(?:" + DIRECTIVE + ")|(?:" + TYPED_ATTR + ")))*";
 	public static final String PROVIDE_CAPABILITY = CAPABILITY + "(?:,\\s*(?:" + CAPABILITY + "))*";
 	
+	public static final String OBJECTCLASS = PACKAGENAME;
+	public static final String SERVICE = OBJECTCLASS + "(?:;\\s*(?:" + PARAMETER + "))*";
+	public static final String SUBSYSTEM_EXPORTSERVICE = SERVICE + "(?:,\\s*(?:" + SERVICE + "))*";
+	public static final String SUBSYSTEM_IMPORTSERVICE = SERVICE + "(?:,\\s*(?:" + SERVICE + "))*";
+	
 	/*
 	 * number ::= digit+
 	 * version ::= major( '.' minor ( '.' micro ( '.' qualifier )? )? )?

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/HeaderFactory.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/HeaderFactory.java?rev=1294912&r1=1294911&r2=1294912&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/HeaderFactory.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/HeaderFactory.java Wed Feb 29 00:16:41 2012
@@ -103,6 +103,8 @@ public class HeaderFactory {
 			return new RequireBundleHeader(value);
 		if (ProvideCapabilityHeader.NAME.equals(name))
 			return new ProvideCapabilityHeader(value);
+		if (SubsystemExportServiceHeader.NAME.equals(name))
+			return new SubsystemExportServiceHeader(value);
 		return new GenericHeader(name, value);
 			
 	}

Added: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceCapability.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceCapability.java?rev=1294912&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceCapability.java (added)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceCapability.java Wed Feb 29 00:16:41 2012
@@ -0,0 +1,52 @@
+package org.apache.aries.subsystem.core.archive;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.aries.subsystem.core.resource.AbstractCapability;
+import org.osgi.framework.Constants;
+import org.osgi.resource.Namespace;
+import org.osgi.resource.Resource;
+
+public class SubsystemExportServiceCapability extends AbstractCapability {
+	public static final String DIRECTIVE_FILTER = Namespace.REQUIREMENT_FILTER_DIRECTIVE;
+	// TODO Replace value with ServiceNamspace.SERVICE_NAMESPACE constant when available.
+	public static final String NAMESPACE = "osgi.service";
+	
+	private final Map<String, Object> attributes = new HashMap<String, Object>();
+	private final Map<String, String> directives = new HashMap<String, String>();
+	private final Resource resource;
+	
+	public SubsystemExportServiceCapability(SubsystemExportServiceHeader.Clause clause, Resource resource) {
+		StringBuilder builder = new StringBuilder("(&(")
+				.append(Constants.OBJECTCLASS).append('=')
+				.append(clause.getObjectClass()).append(')');
+		Directive filter = clause
+				.getDirective(SubsystemImportServiceHeader.Clause.DIRECTIVE_FILTER);
+		if (filter != null)
+			builder.append(filter.getValue());
+		directives.put(DIRECTIVE_FILTER, builder.append(')').toString());
+		this.resource = resource;
+	}
+
+	@Override
+	public Map<String, Object> getAttributes() {
+		return Collections.unmodifiableMap(attributes);
+	}
+
+	@Override
+	public Map<String, String> getDirectives() {
+		return Collections.unmodifiableMap(directives);
+	}
+
+	@Override
+	public String getNamespace() {
+		return NAMESPACE;
+	}
+
+	@Override
+	public Resource getResource() {
+		return resource;
+	}
+}

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceHeader.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceHeader.java?rev=1294912&r1=1294911&r2=1294912&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceHeader.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceHeader.java Wed Feb 29 00:16:41 2012
@@ -24,39 +24,27 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.osgi.framework.Constants;
-import org.osgi.resource.Resource;
 import org.osgi.service.subsystem.SubsystemConstants;
 
 public class SubsystemExportServiceHeader implements Header<SubsystemExportServiceHeader.Clause> {
 	public static class Clause implements org.apache.aries.subsystem.core.archive.Clause {
-		public static final String ATTRIBUTE_VERSION = Constants.VERSION_ATTRIBUTE;
-		public static final String DIRECTIVE_EXCLUDE = Constants.EXCLUDE_DIRECTIVE;
-		public static final String DIRECTIVE_INCLUDE = Constants.INCLUDE_DIRECTIVE;
-		public static final String DIRECTIVE_MANDATORY = Constants.MANDATORY_DIRECTIVE;
-		public static final String DIRECTIVE_USES = Constants.USES_DIRECTIVE;
+		public static final String DIRECTIVE_FILTER = Constants.FILTER_DIRECTIVE;
 		
-		private static final Pattern PATTERN_PACKAGENAME = Pattern.compile('(' + Grammar.PACKAGENAME + ")(?=;|\\z)");
-		private static final Pattern PATTERN_PACKAGENAMES = Pattern.compile('(' + Grammar.PACKAGENAMES + ")(?=;|\\z)");
+		private static final Pattern PATTERN_OBJECTCLASS = Pattern.compile('(' + Grammar.OBJECTCLASS + ")(?=;|\\z)");
 		private static final Pattern PATTERN_PARAMETER = Pattern.compile('(' + Grammar.PARAMETER + ")(?=;|\\z)");
 		
 		private static void fillInDefaults(Map<String, Parameter> parameters) {
-			Parameter parameter = parameters.get(ATTRIBUTE_VERSION);
-			if (parameter == null)
-				parameters.put(ATTRIBUTE_VERSION, VersionAttribute.DEFAULT);
+			// No defaults.
 		}
 		
-		private final Collection<String> packageNames = new HashSet<String>();
 		private final String path;
 		private final Map<String, Parameter> parameters = new HashMap<String, Parameter>();
 		
 		public Clause(String clause) {
-			Matcher main = PATTERN_PACKAGENAMES.matcher(clause);
+			Matcher main = PATTERN_OBJECTCLASS.matcher(clause);
 			if (!main.find())
-				throw new IllegalArgumentException("Missing package names path: " + clause);
+				throw new IllegalArgumentException("Missing objectClass path: " + clause);
 			path = main.group();
-			Matcher path = PATTERN_PACKAGENAME.matcher(this.path);
-			while (path.find())
-				packageNames.add(main.group());
 			main.usePattern(PATTERN_PARAMETER);
 			while (main.find()) {
 				Parameter parameter = ParameterFactory.create(main.group());
@@ -107,8 +95,8 @@ public class SubsystemExportServiceHeade
 			return directives;
 		}
 		
-		public Collection<String> getPackageNames() {
-			return Collections.unmodifiableCollection(packageNames);
+		public String getObjectClass() {
+			return path;
 		}
 
 		@Override
@@ -126,13 +114,6 @@ public class SubsystemExportServiceHeade
 			return path;
 		}
 		
-		public Collection<ExportPackageCapability> toCapabilities(Resource resource) {
-			Collection<ExportPackageCapability> result = new ArrayList<ExportPackageCapability>(packageNames.size());
-			for (String packageName : packageNames)
-				result.add(new ExportPackageCapability(packageName, parameters.values(), resource));
-			return result;
-		}
-		
 		@Override
 		public String toString() {
 			StringBuilder builder = new StringBuilder()
@@ -146,8 +127,7 @@ public class SubsystemExportServiceHeade
 	
 	public static final String NAME = SubsystemConstants.SUBSYSTEM_EXPORTSERVICE;
 	
-	// TODO Subsystem-ExportService currently does not have its own grammar, but it's similar to Provide-Capability.
-	private static final Pattern PATTERN = Pattern.compile('(' + Grammar.CAPABILITY + ")(?=,|\\z)");
+	private static final Pattern PATTERN = Pattern.compile('(' + Grammar.SERVICE + ")(?=,|\\z)");
 	
 	private final Set<Clause> clauses = new HashSet<Clause>();
 	
@@ -174,13 +154,6 @@ public class SubsystemExportServiceHeade
 		return toString();
 	}
 	
-	public Collection<ExportPackageCapability> toCapabilities(Resource resource) {
-		Collection<ExportPackageCapability> result = new ArrayList<ExportPackageCapability>();
-		for (Clause clause : clauses)
-			result.addAll(clause.toCapabilities(resource));
-		return result;
-	}
-	
 	@Override
 	public String toString() {
 		StringBuilder builder = new StringBuilder();

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceHeader.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceHeader.java?rev=1294912&r1=1294911&r2=1294912&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceHeader.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceHeader.java Wed Feb 29 00:16:41 2012
@@ -88,6 +88,10 @@ public class SubsystemImportServiceHeade
 			directives.trimToSize();
 			return directives;
 		}
+		
+		public String getObjectClass() {
+			return path;
+		}
 
 		@Override
 		public Parameter getParameter(String name) {
@@ -104,10 +108,6 @@ public class SubsystemImportServiceHeade
 			return path;
 		}
 		
-		public String getServiceName() {
-			return path;
-		}
-		
 		@Override
 		public String toString() {
 			StringBuilder builder = new StringBuilder()

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceRequirement.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceRequirement.java?rev=1294912&r1=1294911&r2=1294912&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceRequirement.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceRequirement.java Wed Feb 29 00:16:41 2012
@@ -25,7 +25,7 @@ public class SubsystemImportServiceRequi
 			SubsystemImportServiceHeader.Clause clause, Resource resource) {
 		StringBuilder builder = new StringBuilder("(&(")
 				.append(Constants.OBJECTCLASS).append('=')
-				.append(clause.getServiceName()).append(')');
+				.append(clause.getObjectClass()).append(')');
 		Directive filter = clause
 				.getDirective(SubsystemImportServiceHeader.Clause.DIRECTIVE_FILTER);
 		if (filter != null)

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemManifest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemManifest.java?rev=1294912&r1=1294911&r2=1294912&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemManifest.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemManifest.java Wed Feb 29 00:16:41 2012
@@ -134,6 +134,10 @@ public class SubsystemManifest {
 		return (SubsystemContentHeader)getHeaders().get(SUBSYSTEM_CONTENT);
 	}
 	
+	public SubsystemExportServiceHeader getSubsystemExportServiceHeader() {
+		return (SubsystemExportServiceHeader)getHeaders().get(SUBSYSTEM_EXPORTSERVICE);
+	}
+	
 	public SubsystemImportServiceHeader getSubsystemImportServiceHeader() {
 		return (SubsystemImportServiceHeader)getHeaders().get(SUBSYSTEM_IMPORTSERVICE);
 	}

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/AriesSubsystem.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/AriesSubsystem.java?rev=1294912&r1=1294911&r2=1294912&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/AriesSubsystem.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/AriesSubsystem.java Wed Feb 29 00:16:41 2012
@@ -60,6 +60,8 @@ import org.apache.aries.subsystem.core.a
 import org.apache.aries.subsystem.core.archive.RequireCapabilityHeader;
 import org.apache.aries.subsystem.core.archive.RequireCapabilityRequirement;
 import org.apache.aries.subsystem.core.archive.SubsystemArchive;
+import org.apache.aries.subsystem.core.archive.SubsystemExportServiceCapability;
+import org.apache.aries.subsystem.core.archive.SubsystemExportServiceHeader;
 import org.apache.aries.subsystem.core.archive.SubsystemImportServiceHeader;
 import org.apache.aries.subsystem.core.archive.SubsystemImportServiceRequirement;
 import org.apache.aries.subsystem.core.archive.SubsystemManifest;
@@ -1052,6 +1054,7 @@ public class AriesSubsystem implements S
 		if (isComposite()) {
 			setExportIsolationPolicy(builder, getDeploymentManifest().getExportPackageHeader());
 			setExportIsolationPolicy(builder, getDeploymentManifest().getProvideCapabilityHeader());
+			setExportIsolationPolicy(builder, getDeploymentManifest().getSubsystemExportServiceHeader());
 			// TODO Implement export isolation policy for composites.
 		}
 		RegionFilter regionFilter = builder.build();
@@ -1091,6 +1094,19 @@ public class AriesSubsystem implements S
 			builder.allow(policy, filter.toString());
 		}
 	}
+	
+	private void setExportIsolationPolicy(RegionFilterBuilder builder, SubsystemExportServiceHeader header) throws InvalidSyntaxException {
+		if (header == null)
+			return;
+		String policy = RegionFilter.VISIBLE_SERVICE_NAMESPACE;
+		for (SubsystemExportServiceHeader.Clause clause : header.getClauses()) {
+			SubsystemExportServiceCapability capability = new SubsystemExportServiceCapability(clause, this);
+			String filter = capability.getDirectives().get(SubsystemExportServiceCapability.DIRECTIVE_FILTER);
+			if (LOGGER.isDebugEnabled())
+				LOGGER.debug("Allowing " + policy + " of " + filter);
+			builder.allow(policy, filter.toString());
+		}
+	}
 
 	private void setImportIsolationPolicy() throws BundleException, IOException, InvalidSyntaxException {
 		if (isRoot())