You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by mn...@apache.org on 2010/09/10 15:44:44 UTC

svn commit: r995791 - in /incubator/aries/trunk/application: application-api/src/main/java/org/apache/aries/application/ application-api/src/main/java/org/apache/aries/application/management/ application-deployment-management/src/main/java/org/apache/a...

Author: mnuttall
Date: Fri Sep 10 13:44:43 2010
New Revision: 995791

URL: http://svn.apache.org/viewvc?rev=995791&view=rev
Log:
ARIES-361: Refactoring and tidy up. 

Added:
    incubator/aries/trunk/application/application-modeller/src/test/java/org/apache/aries/application/modelling/impl/
    incubator/aries/trunk/application/application-modeller/src/test/java/org/apache/aries/application/modelling/impl/ParserProxyImplTest.java
    incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/
    incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/
    incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/META-INF/
    incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/META-INF/APPLICATION.MF
    incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/META-INF/DEPLOYMENT.MF
    incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/
    incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/META-INF/
    incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/META-INF/MANIFEST.MF
    incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/
    incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/
    incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bp.xml
    incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bp2.xml
    incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bpMultiValues.xml
    incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/ext/
    incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/ext/BundleResource.java
      - copied, changed from r989604, incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/BundleResource.java
    incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/ext/BundleResourceTransformer.java
Removed:
    incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/BundleResource.java
Modified:
    incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/PostResolveTransformer.java
    incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/DeploymentManifestManager.java
    incubator/aries/trunk/application/application-deployment-management/src/main/java/org/apache/aries/application/deployment/management/impl/DeploymentManifestManagerImpl.java
    incubator/aries/trunk/application/application-deployment-management/src/test/java/org/apache/aries/application/deployment/management/DeploymentGeneratorTest.java
    incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/AriesApplicationManagerImplTest.java
    incubator/aries/trunk/application/application-modeller/pom.xml
    incubator/aries/trunk/application/application-modeller/src/main/java/org/apache/aries/application/modelling/utils/DeployedBundles.java
    incubator/aries/trunk/application/application-modeller/src/main/resources/OSGI-INF/blueprint/app-modeller.xml
    incubator/aries/trunk/application/application-obr-resolver/pom.xml
    incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/RepositoryGeneratorImpl.java
    incubator/aries/trunk/application/application-obr-resolver/src/main/resources/OSGI-INF/blueprint/obr-resolver.xml
    incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java

Modified: incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/PostResolveTransformer.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/PostResolveTransformer.java?rev=995791&r1=995790&r2=995791&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/PostResolveTransformer.java (original)
+++ incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/PostResolveTransformer.java Fri Sep 10 13:44:43 2010
@@ -21,7 +21,6 @@ package org.apache.aries.application;
 import java.util.Collection;
 import java.util.Map;
 
-import org.apache.aries.application.management.AriesApplication;
 import org.apache.aries.application.management.ResolverException;
 import org.apache.aries.application.modelling.ModelledResource;
 
@@ -29,11 +28,10 @@ public interface PostResolveTransformer
 {
 /**
  *  This method is to perform any post process after the resolver returns back a collection of bundles. It returns the updated manifest map.
- * @param app Aries application
  * @param bundles A collection of bundles required by this application. 
  * @param deploymentHeaders the deployment manifest map
  * @throws ResolverException
  */
-  void postResolveProcess(AriesApplication app, Collection<ModelledResource> bundles, Map<String, String> deploymentHeaders) throws ResolverException;
+  void postResolveProcess(Collection<ModelledResource> bundles, Map<String, String> deploymentHeaders) throws ResolverException;
   
 }

Modified: incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/DeploymentManifestManager.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/DeploymentManifestManager.java?rev=995791&r1=995790&r2=995791&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/DeploymentManifestManager.java (original)
+++ incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/DeploymentManifestManager.java Fri Sep 10 13:44:43 2010
@@ -22,6 +22,7 @@ import java.util.Collection;
 import java.util.jar.Manifest;
 
 import org.apache.aries.application.Content;
+import org.apache.aries.application.ServiceDeclaration;
 import org.apache.aries.application.modelling.ModelledResource;
 
 public interface DeploymentManifestManager
@@ -38,14 +39,22 @@ public interface DeploymentManifestManag
   
   /**
    * Generate the deployment manifest map. The method can be used for some advanced scenarios.
-   * @param app The Aries application
+   * @param appMeta The Aries application metadata
    * @param byValueBundles By value bundles
    * @param useBundleSet Use Bundle set
    * @param otherBundles Other bundles to be used to narrow the resolved bundles
+   * @param appImportServices the Application-ImportService header
    * @return the deployment manifest 
    * @throws ResolverException
    */
-  Manifest generateDeploymentManifest( AriesApplication app, Collection<ModelledResource> byValueBundles, Collection<Content> useBundleSet, Collection<Content> otherBundles) throws ResolverException;
+  Manifest generateDeploymentManifest( 
+      String appName, 
+      String appVersion, 
+      Collection<Content> appContent, 
+      Collection<ModelledResource> byValueBundles, 
+      Collection<Content> useBundleSet, 
+      Collection<Content> otherBundles, 
+      Collection<ServiceDeclaration> appImportServices) throws ResolverException;
 
   /**
    * 

Modified: incubator/aries/trunk/application/application-deployment-management/src/main/java/org/apache/aries/application/deployment/management/impl/DeploymentManifestManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-deployment-management/src/main/java/org/apache/aries/application/deployment/management/impl/DeploymentManifestManagerImpl.java?rev=995791&r1=995790&r2=995791&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-deployment-management/src/main/java/org/apache/aries/application/deployment/management/impl/DeploymentManifestManagerImpl.java (original)
+++ incubator/aries/trunk/application/application-deployment-management/src/main/java/org/apache/aries/application/deployment/management/impl/DeploymentManifestManagerImpl.java Fri Sep 10 13:44:43 2010
@@ -162,7 +162,9 @@ public class DeploymentManifestManagerIm
       Content content = ManifestHeaderProcessor.parseContent(constraint.getBundleName(), constraint.getVersionRange().toString());
       restrictedReqs.add(content);
     }
-    Manifest man = generateDeploymentManifest(app, byValueBundles, useBundles, restrictedReqs);
+    Manifest man = generateDeploymentManifest(appMetadata.getApplicationSymbolicName(),
+        appMetadata.getApplicationVersion().toString(), appMetadata.getApplicationContents(), 
+        byValueBundles, useBundles, restrictedReqs, appMetadata.getApplicationImportServices());
     _logger.debug(LOG_EXIT, "generateDeploymentManifest", new Object[] {man});
     return man;
   }
@@ -176,26 +178,32 @@ public class DeploymentManifestManagerIm
    * @throws ResolverException
    */
   public Manifest generateDeploymentManifest( 
-      AriesApplication app, Collection<ModelledResource> provideByValueBundles, Collection<Content> useBundleSet, Collection<Content> otherBundles) throws ResolverException {
-    _logger.debug(LOG_ENTRY, "generateDeploymentManifest", new Object[]{app, provideByValueBundles,useBundleSet,otherBundles });
+      String appSymbolicName, 
+      String appVersion,
+      Collection<Content> appContent, 
+      Collection<ModelledResource> provideByValueBundles, 
+      Collection<Content> useBundleSet, 
+      Collection<Content> otherBundles, 
+      Collection<ServiceDeclaration> applicationImportService) throws ResolverException {  
+    
+    _logger.debug(LOG_ENTRY, "generateDeploymentManifest", new Object[]{appSymbolicName, appVersion, 
+        appContent, provideByValueBundles,useBundleSet,otherBundles });
     Map<String, String> deploymentManifestMap = Collections.EMPTY_MAP;
 
-    ApplicationMetadata appMetadata = app.getApplicationMetadata();
     Collection<Content> bundlesToResolve = new ArrayList<Content>();
     Set<ImportedBundle> appContentIB = null;
-    Collection<Content> appContent = appMetadata.getApplicationContents();
     Set<ImportedBundle> useBundleIB = null;
     useBundleIB = new HashSet<ImportedBundle> (toImportedBundle(useBundleSet));
-    appContentIB = new HashSet<ImportedBundle>(toImportedBundle(appMetadata.getApplicationContents()));
+    appContentIB = new HashSet<ImportedBundle>(toImportedBundle(appContent));
 
     bundlesToResolve.addAll(useBundleSet);
 
-    bundlesToResolve.addAll(appMetadata.getApplicationContents());
+    bundlesToResolve.addAll(appContent);
     bundlesToResolve.addAll(otherBundles);
     Collection<ModelledResource> byValueBundles = new ArrayList<ModelledResource>(provideByValueBundles);
     ModelledResource fakeBundleResource;
     try { 
-      fakeBundleResource = createFakeBundle(appMetadata);
+      fakeBundleResource = createFakeBundle(applicationImportService);
     } catch (InvalidAttributeException iax) { 
       ResolverException rx = new ResolverException (iax);
       _logger.debug(LOG_EXIT, "generateDeploymentManifest", new Object[] {rx});
@@ -203,10 +211,8 @@ public class DeploymentManifestManagerIm
       throw rx;
     }
     byValueBundles.add(fakeBundleResource);
-    String appSymbolicName = appMetadata.getApplicationSymbolicName();
-    String appVersion = appMetadata.getApplicationVersion().toString();
     String uniqueName = appSymbolicName + "_" + appVersion;
-    deployedBundles = new DeployedBundles(appMetadata.getApplicationName(), appContentIB, useBundleIB, Arrays.asList(fakeBundleResource));
+    deployedBundles = new DeployedBundles(appSymbolicName, appContentIB, useBundleIB, Arrays.asList(fakeBundleResource));
     bundlesToBeProvisioned = resolver.resolve(
         appSymbolicName, appVersion, byValueBundles, bundlesToResolve);
     pruneFakeBundleFromResults (bundlesToBeProvisioned);
@@ -223,7 +229,7 @@ public class DeploymentManifestManagerIm
       if (requiredUseBundle.size() < useBundleSet.size())
       {
         // Some of the use-bundle entries were redundant so resolve again with just the good ones.
-        deployedBundles = new DeployedBundles(appMetadata.getApplicationName(), appContentIB, useBundleIB, Arrays.asList(fakeBundleResource));
+        deployedBundles = new DeployedBundles(appSymbolicName, appContentIB, useBundleIB, Arrays.asList(fakeBundleResource));
         bundlesToResolve.clear();
         bundlesToResolve.addAll(appContent);
         Collection<ImportedBundle> slimmedDownUseBundle = narrowUseBundles(useBundleIB, requiredUseBundle);
@@ -317,7 +323,7 @@ public class DeploymentManifestManagerIm
         // Well! if the msgs is empty, no need to throw an exception
         if (msgs.length() !=0) {
           String message = MessageUtil.getMessage(
-              "SUSPECTED_CIRCULAR_DEPENDENCIES", new Object[] {appMetadata.getApplicationSymbolicName(), msgs});
+              "SUSPECTED_CIRCULAR_DEPENDENCIES", new Object[] {appSymbolicName, msgs});
           ResolverException rx = new ResolverException (message);
           rx.setUnsatisfiedRequirements(unsatisfiedRequirements);
           _logger.debug(LOG_EXIT, "generateDeploymentManifest", new Object[] {rx});
@@ -327,16 +333,16 @@ public class DeploymentManifestManagerIm
 
       requiredUseBundle = deployedBundles.getRequiredUseBundle();
       importPackages = deployedBundles.getImportPackage();
-      Collection<ModelledResource> requriedBundles = new HashSet<ModelledResource>();
-      requriedBundles.addAll(deployedBundles.getDeployedContent());
-      requriedBundles.addAll(deployedBundles.getRequiredUseBundle());
-      requriedBundles.addAll(deployedBundles.getDeployedProvisionBundle());
-      deploymentManifestMap = generateDeploymentAttributes(appMetadata);
+      Collection<ModelledResource> requiredBundles = new HashSet<ModelledResource>();
+      requiredBundles.addAll(deployedBundles.getDeployedContent());
+      requiredBundles.addAll(deployedBundles.getRequiredUseBundle());
+      requiredBundles.addAll(deployedBundles.getDeployedProvisionBundle());
+      deploymentManifestMap = generateDeploymentAttributes(appSymbolicName, appVersion);
       // Perform some post process if there are any.
       if ((postResolveTransformers != null) && (!postResolveTransformers.isEmpty())) {
         // validate the contents
         for (PostResolveTransformer prt : postResolveTransformers) {
-          prt.postResolveProcess(app, requriedBundles, deploymentManifestMap);
+          prt.postResolveProcess(requiredBundles, deploymentManifestMap);
         }
       }
     }
@@ -373,15 +379,15 @@ public class DeploymentManifestManagerIm
 
 
 
-  private Map<String,String> generateDeploymentAttributes(ApplicationMetadata appMetadata) throws ResolverException
+  private Map<String,String> generateDeploymentAttributes(String appSymbolicName, String version) throws ResolverException
   {
-    _logger.debug(LOG_ENTRY, "generateDeploymentAttributes", new Object[] {appMetadata});
+    _logger.debug(LOG_ENTRY, "generateDeploymentAttributes", new Object[] {appSymbolicName, version});
     Map<String,String> result = new HashMap<String, String>();
     String content = deployedBundles.getContent();
     if (!content.isEmpty()) {
       result.put(AppConstants.DEPLOYMENT_CONTENT, content);
     } else {
-      throw new ResolverException(MessageUtil.getMessage("EMPTY_DEPLOYMENT_CONTENT", appMetadata.getApplicationSymbolicName()));
+      throw new ResolverException(MessageUtil.getMessage("EMPTY_DEPLOYMENT_CONTENT", appSymbolicName));
     }
 
     String useBundle = deployedBundles.getUseBundle();
@@ -405,9 +411,8 @@ public class DeploymentManifestManagerIm
       result.put(Constants.IMPORT_PACKAGE, importPackages);
     }
 
-    result.put(AppConstants.APPLICATION_VERSION, appMetadata.getApplicationVersion().toString());
-    result.put(AppConstants.APPLICATION_SYMBOLIC_NAME, appMetadata.getApplicationSymbolicName());
-
+    result.put(AppConstants.APPLICATION_VERSION, version);
+    result.put(AppConstants.APPLICATION_SYMBOLIC_NAME, appSymbolicName);
     _logger.debug(LOG_ENTRY, "generateDeploymentAttributes", new Object[] {result});
     return result;
   }
@@ -432,16 +437,15 @@ public class DeploymentManifestManagerIm
 
   // create a 'mock' bundle that does nothing but export services required by 
   // Application-ImportService
-  private ModelledResource createFakeBundle (ApplicationMetadata appMetadata) throws InvalidAttributeException 
+  private ModelledResource createFakeBundle (Collection<ServiceDeclaration> appImportServices) throws InvalidAttributeException 
   {
-    _logger.debug(LOG_ENTRY, "createFakeBundle", new Object[]{appMetadata});
+    _logger.debug(LOG_ENTRY, "createFakeBundle", new Object[]{appImportServices});
     Attributes attrs = new Attributes();
     attrs.putValue(Constants.BUNDLE_SYMBOLICNAME, FAKE_BUNDLE_NAME);
     attrs.putValue(Constants.BUNDLE_VERSION_ATTRIBUTE, "1.0");
     attrs.putValue(Constants.BUNDLE_MANIFESTVERSION, "2");
 
     // Build an ExportedService for every Application-ImportService entry
-    List<ServiceDeclaration> appImportServices = appMetadata.getApplicationImportServices();
     Collection<ExportedService> exportedServices = new ArrayList<ExportedService>();
     for (ServiceDeclaration sDec : appImportServices) { 
       Collection<String> ifaces = Arrays.asList(sDec.getInterfaceName());

Modified: incubator/aries/trunk/application/application-deployment-management/src/test/java/org/apache/aries/application/deployment/management/DeploymentGeneratorTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-deployment-management/src/test/java/org/apache/aries/application/deployment/management/DeploymentGeneratorTest.java?rev=995791&r1=995790&r2=995791&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-deployment-management/src/test/java/org/apache/aries/application/deployment/management/DeploymentGeneratorTest.java (original)
+++ incubator/aries/trunk/application/application-deployment-management/src/test/java/org/apache/aries/application/deployment/management/DeploymentGeneratorTest.java Fri Sep 10 13:44:43 2010
@@ -228,12 +228,11 @@ public class DeploymentGeneratorTest
   {
     
     Skeleton.getSkeleton(appMetadata).setReturnValue(new MethodCall(ApplicationMetadata.class, "getApplicationContents"), Arrays.asList(mockContent("aries.test.a", "1.0.0"), mockContent("aries.test.b", "[1.0.0, 2.0.0)" )));
-    
-    app = Skeleton.newMock(AriesApplication.class);
-    Skeleton.getSkeleton(app).setReturnValue(new MethodCall(AriesApplication.class, "getApplicationMetadata"), appMetadata);
-    
-    Manifest man = sut.generateDeploymentManifest(app, new ArrayList<ModelledResource>(), Arrays.asList(BUNDLE_C, BUNDLE_D), Collections.<Content>emptyList());
-    
+    Manifest man = sut.generateDeploymentManifest(appMetadata.getApplicationSymbolicName(), 
+        appMetadata.getApplicationVersion().toString(), appMetadata.getApplicationContents(), 
+        new ArrayList<ModelledResource>(), 
+        Arrays.asList(BUNDLE_C, BUNDLE_D), Collections.<Content>emptyList(), 
+        appMetadata.getApplicationImportServices());
     Attributes attrs = man.getMainAttributes();
     
     assertEquals("aries.test", attrs.getValue(AppConstants.APPLICATION_SYMBOLIC_NAME));
@@ -276,8 +275,11 @@ public class DeploymentGeneratorTest
     
     try { 
       
-      sut.generateDeploymentManifest(app, new ArrayList<ModelledResource>(), new ArrayList<Content>(), 
-           Collections.<Content>emptyList());
+      sut.generateDeploymentManifest(appMetadata.getApplicationSymbolicName(), 
+          appMetadata.getApplicationVersion().toString(), appMetadata.getApplicationContents(), 
+          new ArrayList<ModelledResource>(), new ArrayList<Content>(), 
+          Collections.<Content>emptyList(), 
+          appMetadata.getApplicationImportServices());
     } catch (ResolverException rx) { 
       List<String> usr = rx.getUnsatisfiedRequirements();
       assertEquals ("One unsatisfied requirement expected, not " + usr.size(), usr.size(), 1);
@@ -325,7 +327,11 @@ public class DeploymentGeneratorTest
     Skeleton.getSkeleton(app).setReturnValue(new MethodCall(AriesApplication.class, "getApplicationMetadata"), appMetadata);
     
     try {
-           sut.generateDeploymentManifest(app, Arrays.asList(new ModelledResource[] {testIsolated1.getBundle(), testIsolated2.getBundle()}), new ArrayList<Content>(), Collections.<Content>emptyList());
+           sut.generateDeploymentManifest(appMetadata.getApplicationSymbolicName(), 
+               appMetadata.getApplicationVersion().toString(), 
+               appMetadata.getApplicationContents(), 
+               Arrays.asList(new ModelledResource[] {testIsolated1.getBundle(), testIsolated2.getBundle()}), new ArrayList<Content>(), Collections.<Content>emptyList(), 
+               appMetadata.getApplicationImportServices());
 
     } catch (ResolverException rx) { 
       // Get the unsatisfied Requirements

Modified: incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/AriesApplicationManagerImplTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/AriesApplicationManagerImplTest.java?rev=995791&r1=995790&r2=995791&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/AriesApplicationManagerImplTest.java (original)
+++ incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/AriesApplicationManagerImplTest.java Fri Sep 10 13:44:43 2010
@@ -19,7 +19,10 @@
 
 package org.apache.aries.application.management.impl;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -43,6 +46,7 @@ import org.apache.aries.application.Cont
 import org.apache.aries.application.DeploymentContent;
 import org.apache.aries.application.DeploymentMetadata;
 import org.apache.aries.application.DeploymentMetadataFactory;
+import org.apache.aries.application.ServiceDeclaration;
 import org.apache.aries.application.filesystem.IDirectory;
 import org.apache.aries.application.filesystem.IFile;
 import org.apache.aries.application.impl.ApplicationMetadataFactoryImpl;
@@ -123,17 +127,6 @@ public class AriesApplicationManagerImpl
       return man;
     }
 
-   
-
-    public Manifest generateDeploymentManifest(AriesApplication app,
-        Collection<ModelledResource> byValueBundles, Collection<Content> useBundleSet,
-        Collection<Content> otherBundles) throws ResolverException
-    {
-      
-      return null;
-    }
-
-
     public void setResolver(AriesApplicationResolver resolver) {
       this.resolver = resolver;
     }
@@ -143,6 +136,15 @@ public class AriesApplicationManagerImpl
       
       return resolver;
     }
+
+    public Manifest generateDeploymentManifest(String appName,
+        String appVersion, Collection<Content> appContent,
+        Collection<ModelledResource> byValueBundles,
+        Collection<Content> useBundleSet, Collection<Content> otherBundles,
+        Collection<ServiceDeclaration> appImportServices)
+        throws ResolverException {
+      return null;
+    }
     
     
   }

Modified: incubator/aries/trunk/application/application-modeller/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-modeller/pom.xml?rev=995791&r1=995790&r2=995791&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-modeller/pom.xml (original)
+++ incubator/aries/trunk/application/application-modeller/pom.xml Fri Sep 10 13:44:43 2010
@@ -68,6 +68,11 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+          <groupId>org.osgi</groupId>
+          <artifactId>org.osgi.compendium</artifactId>
+          <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
             <scope>provided</scope>

Modified: incubator/aries/trunk/application/application-modeller/src/main/java/org/apache/aries/application/modelling/utils/DeployedBundles.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-modeller/src/main/java/org/apache/aries/application/modelling/utils/DeployedBundles.java?rev=995791&r1=995790&r2=995791&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-modeller/src/main/java/org/apache/aries/application/modelling/utils/DeployedBundles.java (original)
+++ incubator/aries/trunk/application/application-modeller/src/main/java/org/apache/aries/application/modelling/utils/DeployedBundles.java Fri Sep 10 13:44:43 2010
@@ -402,8 +402,7 @@ public final class DeployedBundles
   {
     return AppConstants.DEPLOYMENT_CONTENT + '=' + deployedContent + ' ' +
         AppConstants.DEPLOYMENT_USE_BUNDLE + '=' + deployedUseBundle + ' ' +
-        AppConstants.DEPLOYMENT_PROVISION_BUNDLE + '=' + deployedProvisionBundle;/* + ' ' /*+
-        AppConstants.WAS_FEATURE_REQUIRED + "=" + requiredFeatures;*/
+        AppConstants.DEPLOYMENT_PROVISION_BUNDLE + '=' + deployedProvisionBundle;
   }
   
   /**

Modified: incubator/aries/trunk/application/application-modeller/src/main/resources/OSGI-INF/blueprint/app-modeller.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-modeller/src/main/resources/OSGI-INF/blueprint/app-modeller.xml?rev=995791&r1=995790&r2=995791&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-modeller/src/main/resources/OSGI-INF/blueprint/app-modeller.xml (original)
+++ incubator/aries/trunk/application/application-modeller/src/main/resources/OSGI-INF/blueprint/app-modeller.xml Fri Sep 10 13:44:43 2010
@@ -25,4 +25,11 @@
   <reference id="parser-service" interface="org.apache.aries.blueprint.ParserService"/>
   <service id = "modelledResourceManagerService" ref="modelledResourceManager" interface="org.apache.aries.application.modelling.ModelledResourceManager"/>
   
+  <bean id="parserProxy" class="org.apache.aries.application.modelling.impl.ParserProxyImpl">
+    <argument index="0" ref="parser-service"/>
+    <argument index="1" ref="blueprintBundleContext"/>
+  </bean>
+  <service id="parserProxyService" ref="parserProxy" interface="org.apache.aries.application.modelling.ParserProxy"/>
+  
+  
 </blueprint>
\ No newline at end of file

Added: incubator/aries/trunk/application/application-modeller/src/test/java/org/apache/aries/application/modelling/impl/ParserProxyImplTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-modeller/src/test/java/org/apache/aries/application/modelling/impl/ParserProxyImplTest.java?rev=995791&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-modeller/src/test/java/org/apache/aries/application/modelling/impl/ParserProxyImplTest.java (added)
+++ incubator/aries/trunk/application/application-modeller/src/test/java/org/apache/aries/application/modelling/impl/ParserProxyImplTest.java Fri Sep 10 13:44:43 2010
@@ -0,0 +1,213 @@
+/*
+ * 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.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.aries.application.modelling.ParsedServiceElements;
+import org.apache.aries.application.modelling.ParserProxy;
+import org.apache.aries.application.modelling.WrappedReferenceMetadata;
+import org.apache.aries.application.modelling.WrappedServiceMetadata;
+import org.apache.aries.application.modelling.utils.ModellingManager;
+import org.apache.aries.blueprint.ParserService;
+import org.apache.aries.blueprint.container.NamespaceHandlerRegistry;
+import org.apache.aries.blueprint.container.ParserServiceImpl;
+import org.apache.aries.blueprint.namespace.NamespaceHandlerRegistryImpl;
+import org.apache.aries.mocks.BundleContextMock;
+import org.apache.aries.unittest.mocks.Skeleton;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.osgi.framework.BundleContext;
+
+public class ParserProxyImplTest {
+
+  static ParserProxy _parserProxy;
+  
+  @BeforeClass
+  public static void setup() { 
+    BundleContext mockCtx = Skeleton.newMock(new BundleContextMock(), BundleContext.class);
+    NamespaceHandlerRegistry nhri = new NamespaceHandlerRegistryImpl (mockCtx);
+    ParserService parserService = new ParserServiceImpl(nhri);
+    mockCtx.registerService(ParserService.class.getName(), parserService, new Hashtable<String, String>());
+    _parserProxy = new ParserProxyImpl(parserService, mockCtx); 
+  }
+  
+  
+  
+  @AfterClass
+  public static void teardown() { 
+    BundleContextMock.clear();
+  }
+  
+  
+  
+  @Test
+  public void basicTest1() throws Exception { 
+    File bpXml = new File ("../src/test/resources", "appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bp.xml");
+    File bp2Xml = new File ("../src/test/resources", "appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bp2.xml");
+    List<URL> urls = new ArrayList<URL>();
+    urls.add ((bpXml.toURI()).toURL());
+    urls.add ((bp2Xml.toURI()).toURL());
+    
+    List<? extends WrappedServiceMetadata> results = _parserProxy.parse(urls);
+    assertTrue ("Four results expected, not " + results.size(), results.size() == 4);
+    
+    Set<WrappedServiceMetadata> resultSet = new HashSet<WrappedServiceMetadata>(results);
+    Set<WrappedServiceMetadata> expectedResults = getTest1ExpectedResults();
+    assertEquals ("Blueprint parsed xml is not as expected: " + resultSet.toString() + " != " + expectedResults,
+        resultSet, expectedResults);
+  }
+  
+  @Test
+  public void testParseAllServiceElements() throws Exception { 
+    File bpXml = new File ("../src/test/resources", "appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bp.xml");
+    File bp2Xml = new File ("../src/test/resources", "appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bp2.xml");
+    
+    List<WrappedServiceMetadata> services = new ArrayList<WrappedServiceMetadata>();
+    List<WrappedReferenceMetadata> references = new ArrayList<WrappedReferenceMetadata>();
+    
+    FileInputStream fis = new FileInputStream (bpXml);
+    ParsedServiceElements bpelem = _parserProxy.parseAllServiceElements(fis); 
+    services.addAll(bpelem.getServices());
+    references.addAll(bpelem.getReferences());
+    
+    fis = new FileInputStream (bp2Xml);
+    bpelem = _parserProxy.parseAllServiceElements(fis); 
+    services.addAll(bpelem.getServices());
+    references.addAll(bpelem.getReferences());
+    
+    // We expect:
+    // bp.xml: 3 services and a reference
+    // bp2.xml: 3 services and a reference list
+    //
+    assertTrue ("Six services expected, not " + services.size(), services.size() == 6);
+    assertTrue ("Two references expected, not " + references.size(), references.size() == 2);
+    
+    Set<WrappedServiceMetadata> expectedServices = getTest2ExpectedServices();
+    // ServiceResultSet will contain some services with autogenerated names starting '.' so we can't 
+    // use a straight Set.equals(). We could add the autogenerated names to the expected results but instead
+    // let's test that differsOnlyByName() works
+    int serviceMatchesFound = 0;
+    for (WrappedServiceMetadata result : services) { 
+      Iterator<WrappedServiceMetadata> it = expectedServices.iterator();
+      while (it.hasNext()) { 
+        WrappedServiceMetadata next = it.next();
+        if (result.equals(next) || result.identicalOrDiffersOnlyByName(next)) { 
+          serviceMatchesFound++;
+          it.remove();
+        }
+      }
+    }
+    
+    assertEquals ("Parsed services are wrong: " + expectedServices + " unmatched ",
+        6, serviceMatchesFound);
+    
+    Set<WrappedReferenceMetadata> expectedReferences = getTest2ExpectedReferences();
+    Set<WrappedReferenceMetadata> results = new HashSet<WrappedReferenceMetadata>(references);
+    assertTrue ("Parsed references are not as we'd expected: " + results.toString() + " != " + expectedReferences,
+        results.equals(expectedReferences));
+  }
+  
+  @Test
+  public void checkMultiValues() throws Exception { 
+    File bpXml = new File ("../src/test/resources", "appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bpMultiValues.xml");
+    List<WrappedServiceMetadata> services = new ArrayList<WrappedServiceMetadata>();
+    FileInputStream fis = new FileInputStream (bpXml);
+    ParsedServiceElements bpelem = _parserProxy.parseAllServiceElements(fis); 
+    services.addAll(bpelem.getServices());
+    
+    assertEquals ("Multi valued service not parsed correctly", services.size(), 1);
+    
+    WrappedServiceMetadata wsm = services.get(0);
+    Map<String, Object> props = wsm.getServiceProperties();
+    String [] intents = (String[]) props.get("service.intents");
+    
+    assertEquals ("Service.intents[0] wrong", intents[0], "propagatesTransaction");
+    assertEquals ("Service.intents[1] wrong", intents[1], "confidentiality");
+    
+  }
+  
+  // model
+  // <reference id="fromOutside" interface="foo.bar.MyInjectedService"/>
+  // <reference-list id="refList1" interface="my.logging.services" filter="(active=true)"/>
+  //
+  private Set<WrappedReferenceMetadata> getTest2ExpectedReferences() throws Exception { 
+    Set<WrappedReferenceMetadata> expectedResults = new HashSet<WrappedReferenceMetadata>();
+         
+    expectedResults.add(ModellingManager.getImportedService(false, "foo.bar.MyInjectedService", null, 
+        null, "fromOutside", false));
+    expectedResults.add(ModellingManager.getImportedService(false, "my.logging.service", null, "(&(trace=on)(debug=true))", "refList1", true));
+    
+    return expectedResults;
+  }
+  
+  // Test 2 includes anonymous services: the expected results are a superset of test1
+  private Set<WrappedServiceMetadata> getTest2ExpectedServices() { 
+    Set<WrappedServiceMetadata> expectedResults = getTest1ExpectedResults();
+        
+    expectedResults.add(ModellingManager.getExportedService("", 0, Arrays.asList("foo.bar.AnonService"), null));
+    expectedResults.add(ModellingManager.getExportedService("", 0, Arrays.asList("foo.bar.NamedInnerBeanService"), null));
+    return expectedResults;
+  }
+  
+  private Set<WrappedServiceMetadata> getTest1ExpectedResults() { 
+    Set<WrappedServiceMetadata> expectedResults = new HashSet<WrappedServiceMetadata>();
+    Map<String, Object> props = new HashMap<String, Object>();
+    props.put ("priority", "9");
+    props.put("volume", "11");
+    props.put("osgi.service.blueprint.compname", "myBean");
+    expectedResults.add(ModellingManager.getExportedService("myService", 0, Arrays.asList("foo.bar.MyService"), props));
+
+    props = new HashMap<String, Object>();
+    props.put ("priority", "7");
+    props.put ("volume", "11");
+    props.put ("osgi.service.blueprint.compname", "bean1");
+    expectedResults.add(ModellingManager.getExportedService("service1.should.be.exported", 0, Arrays.asList("foo.bar.MyService"), props));
+ 
+    props = new HashMap<String, Object>();
+    props.put ("customer", "pig");
+    props.put ("osgi.service.blueprint.compname", "bean2");
+    expectedResults.add(ModellingManager.getExportedService("service2.should.not.be.exported", 0, Arrays.asList("com.acme.Delivery"), props));
+        
+    props = new HashMap<String, Object>();
+    props.put ("customer", "pig");
+    props.put ("target", "rabbit");
+    props.put ("payload", "excessive");
+    props.put ("osgi.service.blueprint.compname", "bean3");
+    expectedResults.add(ModellingManager.getExportedService("bean3", 0, Arrays.asList("com.acme.Delivery"), props));
+       
+    return expectedResults;
+  } 
+}

Added: incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/META-INF/APPLICATION.MF
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/META-INF/APPLICATION.MF?rev=995791&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/META-INF/APPLICATION.MF (added)
+++ incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/META-INF/APPLICATION.MF Fri Sep 10 13:44:43 2010
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Application-ManifestVersion: 1.0
+Application-Name: test1.eba
+Application-SymbolicName: com.ibm.ws.eba.admin.application.modeller.test1.eba
+Application-Version: 1.0
+Application-Content: com.ibm.ws.eba.admin.application.modeller.bundle1;version=1.0.0
+Application-ImportService: foo.bar.MyInjectedService;filter="(security.authority=intranet)", 
+  com.ibm.infrastructure.Manager;filter="(hands.off=true)"  
+Application-ExportService: foo.bar.MyService;filter="(volume=11)",
+  com.acme.Delivery;filter="(&(customer=pig)(target=rabbit))" 

Added: incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/META-INF/DEPLOYMENT.MF
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/META-INF/DEPLOYMENT.MF?rev=995791&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/META-INF/DEPLOYMENT.MF (added)
+++ incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/META-INF/DEPLOYMENT.MF Fri Sep 10 13:44:43 2010
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+Application-ManifestVersion: 2
+Application-SymbolicName: com.ibm.ws.eba.admin.application.modeller.test1.eba
+Application-Version: 1.0
+Deployed-Content: com.ibm.ws.eba.admin.application.modeller.bundle1;deployed-version=1.0.0

Added: incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/META-INF/MANIFEST.MF?rev=995791&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/META-INF/MANIFEST.MF (added)
+++ incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/META-INF/MANIFEST.MF Fri Sep 10 13:44:43 2010
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+Bundle-Version: 1.0.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: com.ibm.ws.eba.admin.application.modeller.bundle1
+Bundle-Name: bundle1
+
+

Added: incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bp.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bp.xml?rev=995791&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bp.xml (added)
+++ incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bp.xml Fri Sep 10 13:44:43 2010
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  IBM Confidential OCO Source Material
+  5724-J08, 5724-I63, 5724-H88, 5724-H89, 5655-N02, 5733-W70 COPYRIGHT International Business Machines Corp.  2009
+  The source code for this program is not published or otherwise divested
+  of its trade secrets, irrespective of what has been deposited with the
+  U.S. Copyright Office.
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+            
+  <bean id="myBean" class="foo.bar.MyBean" activation="lazy">
+    <property name="myInjectedService" ref="fromOutside"/>
+  </bean>
+  
+  <service id="myService" ref="myBean" interface="foo.bar.MyService">
+  	<service-properties>
+  	  <entry key="priority" value="9"/>
+  	  <entry key="volume" value="11"/>
+  	</service-properties>
+  </service>
+  
+  <!-- Services for which we can generate no name should not be exposed -->
+  <service interface="foo.bar.AnonService">
+  	<bean class="an.anonymous.Bean"/>
+  </service>
+  
+  <!-- All inlined classes will be given null IDs as per 121.4.8 of the OSGi 4.2 spec  -->
+  <service interface="foo.bar.NamedInnerBeanService">
+  	<bean id="namedInnerBean" class="an.anonymous.Bean"/>
+  </service>
+  
+  
+  <reference id="fromOutside" interface="foo.bar.MyInjectedService"/>
+
+</blueprint>
\ No newline at end of file

Added: incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bp2.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bp2.xml?rev=995791&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bp2.xml (added)
+++ incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bp2.xml Fri Sep 10 13:44:43 2010
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  IBM Confidential OCO Source Material
+  5724-J08, 5724-I63, 5724-H88, 5724-H89, 5655-N02, 5733-W70 COPYRIGHT International Business Machines Corp.  2009
+  The source code for this program is not published or otherwise divested
+  of its trade secrets, irrespective of what has been deposited with the
+  U.S. Copyright Office.
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+            
+  <bean id="bean1" class="com.ibm.useful.Bean"/>
+  
+  <bean id="bean2" class="com.ibm.useful.Bean"/>
+  
+  <bean id="bean3" class="com.ibm.useful.Bean"/>
+  
+  <service id="service1.should.be.exported" ref="bean1" interface="foo.bar.MyService">
+  	<service-properties>
+  	  <entry key="volume" value="11"/>
+  	  <entry key="priority" value="7"/>
+  	</service-properties>
+  </service>
+  
+  <service id="service2.should.not.be.exported" ref="bean2" interface="com.acme.Delivery">
+  	<service-properties>
+  	  <entry key="customer" value="pig"/>
+  	</service-properties>
+  </service>
+  
+  <!-- Let's put no id on this service - it should come from the bean -->
+  <service ref="bean3" interface="com.acme.Delivery">
+  	<service-properties>
+  	  <entry key="customer" value="pig"/>
+  	  <entry key="target" value="rabbit"/>
+  	  <entry key="payload" value="excessive"/>
+  	</service-properties>
+  </service>
+  
+  <reference-list id="refList1" interface="my.logging.service" filter="(&amp;(trace=on)(debug=true))"/>
+  
+</blueprint>
\ No newline at end of file

Added: incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bpMultiValues.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bpMultiValues.xml?rev=995791&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bpMultiValues.xml (added)
+++ incubator/aries/trunk/application/application-modeller/src/test/resources/appModeller/test1.eba/bundle1.jar/OSGI-INF/blueprint/bpMultiValues.xml Fri Sep 10 13:44:43 2010
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  IBM Confidential OCO Source Material
+  5724-J08, 5724-I63, 5724-H88, 5724-H89, 5655-N02, 5733-W70 COPYRIGHT International Business Machines Corp.  2009
+  The source code for this program is not published or otherwise divested
+  of its trade secrets, irrespective of what has been deposited with the
+  U.S. Copyright Office.
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+            
+  <bean id="myBean" class="foo.bar.MyBean" activation="lazy">
+  </bean>
+  
+  <service id="greeting" ref="myBean" interface="greeting.Greeting">
+  	<service-properties>
+  	  <entry key="service.exported.interfaces" value="greeting.Greeting"/>
+      <entry key="service.intents">
+          <array>
+             <value>propagatesTransaction</value>
+             <value>confidentiality</value>
+          </array>
+      </entry>
+  	</service-properties>
+  </service>
+  
+</blueprint>
\ No newline at end of file

Modified: incubator/aries/trunk/application/application-obr-resolver/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-obr-resolver/pom.xml?rev=995791&r1=995790&r2=995791&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-obr-resolver/pom.xml (original)
+++ incubator/aries/trunk/application/application-obr-resolver/pom.xml Fri Sep 10 13:44:43 2010
@@ -29,6 +29,7 @@
     </description>
     <properties>
         <aries.osgi.export.pkg>
+            org.apache.aries.application.resolver.obr.ext;
         </aries.osgi.export.pkg>
         <aries.osgi.private.pkg>
             org.apache.aries.application.resolver.obr;

Copied: incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/ext/BundleResource.java (from r989604, incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/BundleResource.java)
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/ext/BundleResource.java?p2=incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/ext/BundleResource.java&p1=incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/BundleResource.java&r1=989604&r2=995791&rev=995791&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/BundleResource.java (original)
+++ incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/ext/BundleResource.java Fri Sep 10 13:44:43 2010
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.aries.application.resolver.obr.impl;
+package org.apache.aries.application.resolver.obr.ext;
 
 import static org.apache.aries.application.utils.AppConstants.LOG_ENTRY;
 import static org.apache.aries.application.utils.AppConstants.LOG_EXIT;
@@ -37,6 +37,8 @@ import org.apache.aries.application.mode
 import org.apache.aries.application.modelling.ImportedService;
 import org.apache.aries.application.modelling.ModelledResource;
 import org.apache.aries.application.modelling.utils.ModellingConstants;
+import org.apache.aries.application.resolver.obr.impl.OBRCapability;
+import org.apache.aries.application.resolver.obr.impl.RequirementImpl;
 import org.apache.felix.bundlerepository.Capability;
 import org.apache.felix.bundlerepository.RepositoryAdmin;
 import org.apache.felix.bundlerepository.Requirement;
@@ -53,6 +55,22 @@ public class BundleResource implements R
   private final Collection<Requirement> _requirements;
   private final String _displayName;
   private Logger logger = LoggerFactory.getLogger(BundleResource.class);
+  
+  /**
+   * Build a BundleResource from another BundleResource and some optional extra capabilities and requirements
+   * @param br
+   * @param extraCapabilities can be null
+   * @param extraRequirements can be null
+   */
+  public BundleResource (BundleResource br, Collection<Capability> extraCapabilities, Collection<Requirement> extraRequirements) { 
+    _modelledBundle = br._modelledBundle;
+    _capabilities = new ArrayList<Capability> (br._capabilities);
+    _requirements = new ArrayList<Requirement> (br._requirements);
+    _displayName = new String (br._displayName);
+    if (extraCapabilities != null) _capabilities.addAll(extraCapabilities);
+    if (extraRequirements != null) _requirements.addAll(extraRequirements);
+  }
+  
   public BundleResource (ModelledResource mb, RepositoryAdmin repositoryAdmin) { 
     logger.debug(LOG_ENTRY,"BundleResource", mb);
     _modelledBundle = mb;
@@ -92,10 +110,16 @@ public class BundleResource implements R
       _displayName = possibleDisplayName;
     }
     
+    
+    
     logger.debug(LOG_EXIT,"BundleResource");
     
   }
 
+  public ModelledResource getModelledResource() { 
+    return _modelledBundle;
+  }
+  
   public Capability[] getCapabilities() {
    
     logger.debug(LOG_ENTRY,"getCapabilities");

Added: incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/ext/BundleResourceTransformer.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/ext/BundleResourceTransformer.java?rev=995791&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/ext/BundleResourceTransformer.java (added)
+++ incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/ext/BundleResourceTransformer.java Fri Sep 10 13:44:43 2010
@@ -0,0 +1,9 @@
+package org.apache.aries.application.resolver.obr.ext;
+
+
+public interface BundleResourceTransformer {
+
+  BundleResource transform (BundleResource b);
+}
+
+

Modified: incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/RepositoryGeneratorImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/RepositoryGeneratorImpl.java?rev=995791&r1=995790&r2=995791&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/RepositoryGeneratorImpl.java (original)
+++ incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/RepositoryGeneratorImpl.java Fri Sep 10 13:44:43 2010
@@ -23,7 +23,9 @@ import static org.apache.aries.applicati
 
 import java.io.IOException;
 import java.io.OutputStream;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
@@ -37,6 +39,8 @@ import javax.xml.transform.stream.Stream
 import org.apache.aries.application.management.RepositoryGenerator;
 import org.apache.aries.application.management.ResolverException;
 import org.apache.aries.application.modelling.ModelledResource;
+import org.apache.aries.application.resolver.obr.ext.BundleResource;
+import org.apache.aries.application.resolver.obr.ext.BundleResourceTransformer;
 import org.apache.felix.bundlerepository.Capability;
 import org.apache.felix.bundlerepository.Property;
 import org.apache.felix.bundlerepository.RepositoryAdmin;
@@ -51,6 +55,11 @@ public final class RepositoryGeneratorIm
 {
   private RepositoryAdmin repositoryAdmin;
   private static Logger logger = LoggerFactory.getLogger(RepositoryGeneratorImpl.class);
+  private static Collection<BundleResourceTransformer> bundleResourceTransformers = new ArrayList<BundleResourceTransformer>();
+  
+  public void setBundleResourceTransformers (List<BundleResourceTransformer> brts) { 
+    bundleResourceTransformers = brts;
+  }
   
   public RepositoryGeneratorImpl(RepositoryAdmin repositoryAdmin) {
     this.repositoryAdmin = repositoryAdmin;
@@ -66,6 +75,8 @@ public final class RepositoryGeneratorIm
     capability.appendChild(p);
     logger.debug(LOG_ENTRY, "addProperty", new Object[]{});
   }
+  
+  
 
   /**
    * Write out the resource element
@@ -198,8 +209,13 @@ public final class RepositoryGeneratorIm
 	    root.setAttribute("name", repositoryName);
 	    doc.appendChild(root);
 	    for (ModelledResource mr : byValueBundles) {
-	      writeResource(new BundleResource(mr, repositoryAdmin), mr.getLocation(), doc, root);
-
+	      BundleResource bundleResource = new BundleResource(mr, repositoryAdmin);
+	      if (bundleResourceTransformers.size() > 0) { 
+	        for (BundleResourceTransformer brt : bundleResourceTransformers) { 
+	          bundleResource = brt.transform (bundleResource);
+	        }
+	      }
+	      writeResource (bundleResource, mr.getLocation(), doc, root);
 	    }
 
 	    try {

Modified: incubator/aries/trunk/application/application-obr-resolver/src/main/resources/OSGI-INF/blueprint/obr-resolver.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-obr-resolver/src/main/resources/OSGI-INF/blueprint/obr-resolver.xml?rev=995791&r1=995790&r2=995791&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-obr-resolver/src/main/resources/OSGI-INF/blueprint/obr-resolver.xml (original)
+++ incubator/aries/trunk/application/application-obr-resolver/src/main/resources/OSGI-INF/blueprint/obr-resolver.xml Fri Sep 10 13:44:43 2010
@@ -33,9 +33,15 @@
         <argument>
             <reference interface="org.apache.felix.bundlerepository.RepositoryAdmin"/>
         </argument>
+        <property name="bundleResourceTransformers" ref="bundle-resource-transformers"/>
     </bean>
     <service id="repository-generator-service" ref="repository-generator" interface="org.apache.aries.application.management.RepositoryGenerator"/>
     <service interface="org.apache.aries.application.management.AriesApplicationResolver" ref="obr-resolver"/>
+    
+    <reference-list id="bundle-resource-transformers" 
+      interface="org.apache.aries.application.resolver.obr.ext.BundleResourceTransformer"
+      availability="optional"/>
+    
 
 </blueprint>
 

Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java?rev=995791&r1=995790&r2=995791&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java Fri Sep 10 13:44:43 2010
@@ -26,13 +26,14 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.Map.Entry;
+import java.util.Set;
 import java.util.jar.Attributes;
 import java.util.jar.Manifest;
 
 import org.apache.aries.application.filesystem.IDirectory;
 import org.apache.aries.application.filesystem.IFile;
+import org.apache.aries.application.utils.AppConstants;
 
 /**
  * This class contains utilities for parsing manifests. It provides methods to
@@ -70,6 +71,20 @@ public class ManifestProcessor
   }
   
   /**
+   * mapToManifest
+   */
+  public static Manifest mapToManifest (Map<String,String> attributes)
+  {
+    Manifest man = new Manifest();
+    Attributes att = man.getMainAttributes();
+    att.putValue(Attributes.Name.MANIFEST_VERSION.toString(), AppConstants.MANIFEST_VERSION);
+    for (Map.Entry<String, String> entry : attributes.entrySet()) {
+      att.putValue(entry.getKey(),  entry.getValue());
+    }
+    return man;
+  }
+  
+  /**
    * This method parses the manifest using a custom manifest parsing routine.
    * This means that we can avoid the 76 byte line length in a manifest providing
    * a better developer experience.