Author: jwross
Date: Tue Jul  9 14:03:30 2013
New Revision: 1501275

URL: http://svn.apache.org/r1501275
Log:
[aries-952] Ask only what is required from the Application Modeller.

Previously, subsystems asked the modeller for the entire modelled resource. 
This resulted in unneccessarily computing
non-service capabilities and requirements twice. Now, subsystems asks the 
modeller to compute only the needed
service requirements and capabilities.

Modified:
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResource.java
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleRevisionResource.java

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResource.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResource.java?rev=1501275&r1=1501274&r2=1501275&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResource.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResource.java
 Tue Jul  9 14:03:30 2013
@@ -27,9 +27,9 @@ import java.util.jar.JarOutputStream;
 
 import org.apache.aries.application.modelling.ExportedService;
 import org.apache.aries.application.modelling.ImportedService;
-import org.apache.aries.application.modelling.ModelledResource;
 import org.apache.aries.application.modelling.ModelledResourceManager;
 import org.apache.aries.application.modelling.ModellerException;
+import org.apache.aries.application.modelling.ParsedServiceElements;
 import org.apache.aries.subsystem.core.archive.BundleManifest;
 import 
org.apache.aries.subsystem.core.archive.BundleRequiredExecutionEnvironmentHeader;
 import org.apache.aries.subsystem.core.archive.BundleSymbolicNameHeader;
@@ -164,8 +164,7 @@ public class BundleResource implements R
                capabilities.add(new OsgiIdentityCapability(this, manifest));
        }
        
-       private void computeOsgiServiceCapabilities(ModelledResource resource) {
-               Collection<? extends ExportedService> services = 
resource.getExportedServices();
+       private void computeOsgiServiceCapabilities(Collection<ExportedService> 
services) {
                for (ExportedService service : services)
                        capabilities.add(new BasicCapability.Builder()
                                        
.namespace(ServiceNamespace.SERVICE_NAMESPACE)
@@ -175,8 +174,7 @@ public class BundleResource implements R
                                        .build());
        }
        
-       private void computeOsgiServiceRequirements(ModelledResource resource) {
-               Collection<? extends ImportedService> services = 
resource.getImportedServices();
+       private void computeOsgiServiceRequirements(Collection<ImportedService> 
services) {
                for (ImportedService service : services) {
                        StringBuilder builder = new StringBuilder("(&(")
                                        
.append(ServiceNamespace.CAPABILITY_OBJECTCLASS_ATTRIBUTE)
@@ -228,16 +226,18 @@ public class BundleResource implements R
        }
        
        private void computeRequirementsAndCapabilities(IDirectory directory) 
throws ModellerException {
+               // Compute all requirements and capabilities other than those 
related
+               // to services.
                computeRequirementsOtherThanService();
                computeCapabilitiesOtherThanService();
+               // Compute service requirements and capabilities if the optional
+               // ModelledResourceManager service is present.
                ModelledResourceManager manager = getModelledResourceManager();
                if (manager == null)
                        return;
-               // TODO Could use ModelledResourceManager.getServiceElements 
instead. 
-               // Only the service dependency info is being used right now.
-               ModelledResource resource = 
manager.getModelledResource(directory);
-               computeOsgiServiceRequirements(resource);
-               computeOsgiServiceCapabilities(resource);
+               ParsedServiceElements elements = 
manager.getServiceElements(directory);
+               computeOsgiServiceRequirements(elements.getReferences());
+               computeOsgiServiceCapabilities(elements.getServices());
        }
        
        private void computeRequirementsOtherThanService() {

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleRevisionResource.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleRevisionResource.java?rev=1501275&r1=1501274&r2=1501275&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleRevisionResource.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleRevisionResource.java
 Tue Jul  9 14:03:30 2013
@@ -20,9 +20,9 @@ import java.util.List;
 
 import org.apache.aries.application.modelling.ExportedService;
 import org.apache.aries.application.modelling.ImportedService;
-import org.apache.aries.application.modelling.ModelledResource;
 import org.apache.aries.application.modelling.ModelledResourceManager;
 import org.apache.aries.application.modelling.ModellerException;
+import org.apache.aries.application.modelling.ParsedServiceElements;
 import org.osgi.framework.wiring.BundleRevision;
 import org.osgi.namespace.service.ServiceNamespace;
 import org.osgi.resource.Capability;
@@ -34,7 +34,7 @@ import org.osgi.service.subsystem.Subsys
 public class BundleRevisionResource implements Resource {
        private final BundleRevision revision;
        
-       private volatile ModelledResource resource;
+       private volatile ParsedServiceElements elements;
        
        public BundleRevisionResource(BundleRevision revision) {
                if (revision == null)
@@ -72,14 +72,14 @@ public class BundleRevisionResource impl
                return revision.getRequirements(namespace);
        }
        
-       private ModelledResource computeModelledResource() {
+       private ParsedServiceElements computeParsedServiceElements() {
                Activator activator = Activator.getInstance();
                ModelledResourceManager manager = 
activator.getModelledResourceManager();
                if (manager == null)
                        return null;
                BundleDirectory directory = new 
BundleDirectory(revision.getBundle());
                try {
-                       return manager.getModelledResource(directory);
+                       return manager.getServiceElements(directory);
                }
                catch (ModellerException e) {
                        throw new SubsystemException(e);
@@ -87,10 +87,10 @@ public class BundleRevisionResource impl
        }
        
        private List<Capability> computeServiceCapabilities() {
-               ModelledResource resource = getModelledResource();
-               if (resource == null)
+               ParsedServiceElements elements = getParsedServiceElements();
+               if (elements == null)
                        return Collections.emptyList();
-               Collection<? extends ExportedService> services = 
resource.getExportedServices();
+               Collection<? extends ExportedService> services = 
elements.getServices();
                if (services.isEmpty())
                        return Collections.emptyList();
                List<Capability> result = new 
ArrayList<Capability>(services.size());
@@ -105,10 +105,10 @@ public class BundleRevisionResource impl
        }
        
        private List<Requirement> computeServiceRequirements() {
-               ModelledResource resource = getModelledResource();
-               if (resource == null)
+               ParsedServiceElements elements = getParsedServiceElements();
+               if (elements == null)
                        return Collections.emptyList();
-               Collection<? extends ImportedService> services = 
resource.getImportedServices();
+               Collection<? extends ImportedService> services = 
elements.getReferences();
                if (services.isEmpty())
                        return Collections.emptyList();
                List<Requirement> result = new 
ArrayList<Requirement>(services.size());
@@ -134,13 +134,13 @@ public class BundleRevisionResource impl
                return result;
        }
 
-       private ModelledResource getModelledResource() {
-               ModelledResource result = resource;
+       private ParsedServiceElements getParsedServiceElements() {
+               ParsedServiceElements result = elements;
                if (result == null) {
                        synchronized (this) {
-                               result = resource;
+                               result = elements;
                                if (result == null)
-                                       resource = result = 
computeModelledResource();
+                                       elements = result = 
computeParsedServiceElements();
                        }
                }
                return result;


Reply via email to