You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ti...@apache.org on 2011/07/29 12:32:25 UTC

svn commit: r1152159 - in /aries/trunk/application: application-api/src/main/java/org/apache/aries/application/modelling/ application-modeller/src/main/java/org/apache/aries/application/modelling/impl/ application-modeller/src/main/resources/OSGI-INF/b...

Author: timothyjward
Date: Fri Jul 29 10:32:24 2011
New Revision: 1152159

URL: http://svn.apache.org/viewvc?rev=1152159&view=rev
Log:
ARIES-716 : Allow extensions to the modelling code

Added:
    aries/trunk/application/application-api/src/main/java/org/apache/aries/application/modelling/ServiceModeller.java
Modified:
    aries/trunk/application/application-modeller/src/main/java/org/apache/aries/application/modelling/impl/ModelledResourceManagerImpl.java
    aries/trunk/application/application-modeller/src/main/resources/OSGI-INF/blueprint/app-modeller.xml

Added: aries/trunk/application/application-api/src/main/java/org/apache/aries/application/modelling/ServiceModeller.java
URL: http://svn.apache.org/viewvc/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/modelling/ServiceModeller.java?rev=1152159&view=auto
==============================================================================
--- aries/trunk/application/application-api/src/main/java/org/apache/aries/application/modelling/ServiceModeller.java (added)
+++ aries/trunk/application/application-api/src/main/java/org/apache/aries/application/modelling/ServiceModeller.java Fri Jul 29 10:32:24 2011
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIESOR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.application.modelling;
+
+import org.apache.aries.util.filesystem.IDirectory;
+import org.apache.aries.util.manifest.BundleManifest;
+
+public interface ServiceModeller {
+
+  /**
+   * Determine whether any additional services will be imported or exported 
+   * by this bundle. For example as EJBs, Declarative Services etc
+   *
+   * @param bundle
+   * @return
+   */
+  public ParsedServiceElements modelServices(BundleManifest manifest, IDirectory bundle);
+  
+}

Modified: aries/trunk/application/application-modeller/src/main/java/org/apache/aries/application/modelling/impl/ModelledResourceManagerImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/application/application-modeller/src/main/java/org/apache/aries/application/modelling/impl/ModelledResourceManagerImpl.java?rev=1152159&r1=1152158&r2=1152159&view=diff
==============================================================================
--- aries/trunk/application/application-modeller/src/main/java/org/apache/aries/application/modelling/impl/ModelledResourceManagerImpl.java (original)
+++ aries/trunk/application/application-modeller/src/main/java/org/apache/aries/application/modelling/impl/ModelledResourceManagerImpl.java Fri Jul 29 10:32:24 2011
@@ -45,8 +45,11 @@ import org.apache.aries.application.mode
 import org.apache.aries.application.modelling.ModellingManager;
 import org.apache.aries.application.modelling.ParsedServiceElements;
 import org.apache.aries.application.modelling.ParserProxy;
+import org.apache.aries.application.modelling.ServiceModeller;
 import org.apache.aries.application.modelling.internal.BundleBlueprintParser;
 import org.apache.aries.application.modelling.internal.MessageUtil;
+import org.apache.aries.util.filesystem.FileSystem;
+import org.apache.aries.util.filesystem.ICloseableDirectory;
 import org.apache.aries.util.filesystem.IDirectory;
 import org.apache.aries.util.filesystem.IFile;
 import org.apache.aries.util.io.IOUtils;
@@ -60,6 +63,11 @@ public class ModelledResourceManagerImpl
   private final Logger _logger = LoggerFactory.getLogger(ModelledResourceManagerImpl.class);
   private ParserProxy _parserProxy;
   private ModellingManager _modellingManager;
+  private Collection<ServiceModeller> modellingPlugins;
+
+  public void setModellingPlugins(Collection<ServiceModeller> modellingPlugins) {
+    this.modellingPlugins = modellingPlugins;
+  }
 
   public void setModellingManager (ModellingManager m) { 
     _modellingManager = m;
@@ -73,8 +81,6 @@ public class ModelledResourceManagerImpl
     return _parserProxy;
   }
 
-
-
   /**
    * For a given file, which we know to be a bundle, parse out all the
    * service, reference and reference-list elements. This method will return
@@ -92,23 +98,40 @@ public class ModelledResourceManagerImpl
   
   @Override
   public ParsedServiceElements getServiceElements(InputStreamProvider archive) throws ModellerException {
+      ICloseableDirectory dir = null;
       try {
-          BundleManifest bm = BundleManifest.fromBundle(archive.open());
-          return getServiceElements(bm, findBlueprints(bm, archive.open()));
+          dir = FileSystem.getFSRoot(archive.open());
+          BundleManifest bm = BundleManifest.fromBundle(dir);
+          return getServiceElements(bm, dir);
       } catch (IOException e) {
           throw new ModellerException(e);
+      } finally {
+          IOUtils.close(dir);
       }
   }
   
   private ParsedServiceElements getServiceElements (BundleManifest bundleMf, IDirectory archive) throws ModellerException { 
+      
+      Set<ExportedService> services = new HashSet<ExportedService>();
+      Set<ImportedService> references = new HashSet<ImportedService>();
+    
       try {
-        return getServiceElements(bundleMf, findBlueprints(bundleMf, archive));
-    } catch (IOException e) {
-        throw new ModellerException(e);
-    }
+          ParsedServiceElements pse = getBlueprintServiceElements(bundleMf, 
+                      findBlueprints(bundleMf, archive));
+          services.addAll(pse.getServices());
+          references.addAll(pse.getReferences());
+          for (ServiceModeller sm : modellingPlugins) {
+            pse = sm.modelServices(bundleMf, archive);
+            services.addAll(pse.getServices());
+            references.addAll(pse.getReferences());
+          }
+          return new ParsedServiceElementsImpl(services, references);
+      } catch (Exception e) {
+          throw new ModellerException(e);
+      }
   }
   
-  private ParsedServiceElements getServiceElements (BundleManifest bundleMf, Iterable<InputStream> blueprints) throws ModellerException { 
+  private ParsedServiceElements getBlueprintServiceElements (BundleManifest bundleMf, Iterable<InputStream> blueprints) throws ModellerException { 
     _logger.debug(LOG_ENTRY,"getServiceElements", new Object[] {bundleMf, blueprints} );
 
     Set<ExportedService> services = new HashSet<ExportedService>();
@@ -119,11 +142,8 @@ public class ModelledResourceManagerImpl
           ParsedServiceElements pse = getParserProxy().parseAllServiceElements(is);
           services.addAll(pse.getServices());
           references.addAll(pse.getReferences());
-
         } finally {
-          if (is != null) {
-            is.close();
-          }
+          IOUtils.close(is);
         }
       }
     } catch (Exception e) {
@@ -149,12 +169,14 @@ public class ModelledResourceManagerImpl
 
   @Override
   public ModelledResource getModelledResource(String uri, InputStreamProvider bundle) throws ModellerException {
+      ICloseableDirectory dir = null;
       try {
-          BundleManifest bm = BundleManifest.fromBundle(bundle.open());
-          ParsedServiceElements pse = getServiceElements(bm, findBlueprints(bm, bundle.open()));
-          return model(uri, bm, pse);
+          dir = FileSystem.getFSRoot(bundle.open());
+          return getModelledResource(uri, dir);
       } catch (IOException e) {
           throw new ModellerException(e);
+      } finally {
+          IOUtils.close(dir);
       }
   }
   

Modified: aries/trunk/application/application-modeller/src/main/resources/OSGI-INF/blueprint/app-modeller.xml
URL: http://svn.apache.org/viewvc/aries/trunk/application/application-modeller/src/main/resources/OSGI-INF/blueprint/app-modeller.xml?rev=1152159&r1=1152158&r2=1152159&view=diff
==============================================================================
--- aries/trunk/application/application-modeller/src/main/resources/OSGI-INF/blueprint/app-modeller.xml (original)
+++ aries/trunk/application/application-modeller/src/main/resources/OSGI-INF/blueprint/app-modeller.xml Fri Jul 29 10:32:24 2011
@@ -21,6 +21,7 @@
   <bean id="modelledResourceManager" class="org.apache.aries.application.modelling.impl.ModelledResourceManagerImpl">
     <property name="modellingManager" ref="modellingManager"/>
     <property name="parserProxy" ref="parserProxy"/>
+    <property name="modellingPlugins" ref="modellingPlugins"/>
   </bean>
   <service id = "modelledResourceManagerService" ref="modelledResourceManager" interface="org.apache.aries.application.modelling.ModelledResourceManager"/>
 
@@ -38,4 +39,5 @@
   <bean id="modellingHelper" class="org.apache.aries.application.modelling.utils.impl.ModellingHelperImpl"/>
   <service id="modellingHelperService" ref="modellingHelper" interface="org.apache.aries.application.modelling.utils.ModellingHelper"/>
   
+  <reference-list id="modellingPlugins" interface="org.apache.aries.application.modelling.ServiceModeller" availability="optional"/>
 </blueprint>
\ No newline at end of file