You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by no...@apache.org on 2010/02/17 19:19:57 UTC

svn commit: r911133 - in /incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr: OBRAriesResolver.java impl/ApplicationResourceImpl.java impl/RequirementImpl.java

Author: not
Date: Wed Feb 17 18:19:57 2010
New Revision: 911133

URL: http://svn.apache.org/viewvc?rev=911133&view=rev
Log:
ARIES-174 Fix to the failing test, and resolve against the Application-Content header, rather than the bundles included the application.

Added:
    incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/ApplicationResourceImpl.java
Modified:
    incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/OBRAriesResolver.java
    incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/RequirementImpl.java

Modified: incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/OBRAriesResolver.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/OBRAriesResolver.java?rev=911133&r1=911132&r2=911133&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/OBRAriesResolver.java (original)
+++ incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/OBRAriesResolver.java Wed Feb 17 18:19:57 2010
@@ -20,31 +20,22 @@
 
 package org.apache.aries.application.resolver.obr;
 
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.aries.application.ApplicationMetadata;
 import org.apache.aries.application.Content;
 import org.apache.aries.application.management.AriesApplication;
 import org.apache.aries.application.management.AriesApplicationResolver;
 import org.apache.aries.application.management.BundleInfo;
 import org.apache.aries.application.management.ResolverException;
-import org.apache.aries.application.resolver.obr.impl.CapabilityImpl;
+import org.apache.aries.application.resolver.obr.impl.ApplicationResourceImpl;
 import org.apache.aries.application.resolver.obr.impl.OBRBundleInfo;
-import org.apache.aries.application.resolver.obr.impl.RequirementImpl;
-import org.apache.aries.application.resolver.obr.impl.ResourceImpl;
 import org.apache.aries.application.utils.manifest.ManifestHeaderProcessor;
-import org.osgi.framework.Filter;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.Version;
-import org.osgi.service.obr.Capability;
 import org.osgi.service.obr.RepositoryAdmin;
 import org.osgi.service.obr.Requirement;
 import org.osgi.service.obr.Resolver;
@@ -66,10 +57,18 @@
   public Set<BundleInfo> resolve(AriesApplication app) throws ResolverException
   {
     Resolver obrResolver = repositoryAdmin.resolver();
-    for (BundleInfo bundleInfo: app.getBundleInfo()) {
-      Resource resource = toResource(bundleInfo);
-      obrResolver.add(resource);
-    }
+    
+    ApplicationMetadata appMeta = app.getApplicationMetadata();
+    
+    String appName = appMeta.getApplicationSymbolicName();
+    Version appVersion = appMeta.getApplicationVersion();
+    List<Content> appContent = appMeta.getApplicationContents();
+
+    // add a resource describing the requirements of the application metadata.
+    obrResolver.add(new ApplicationResourceImpl(appName, appVersion, appContent));
+    
+    // TODO we need to resolve against the app content so we need to generate an OBR.xml for the content
+    
     if (obrResolver.resolve()) {
       Set<BundleInfo> result = new HashSet<BundleInfo>(app.getBundleInfo());
       for (Resource resource: obrResolver.getRequiredResources()) {
@@ -128,101 +127,4 @@
             null,
             null);
   }
-
-  private Resource toResource(BundleInfo bundleInfo) throws ResolverException
-  {
-    String id = bundleInfo.getSymbolicName() + "_" + bundleInfo.getVersion();
-    List<Requirement> requirements = new ArrayList<Requirement>();
-    requirements.addAll(toRequirements(bundleInfo.getImportPackage(), "package"));
-    requirements.addAll(toRequirements(bundleInfo.getImportService(), "service"));
-    List<Capability> capabilities = new ArrayList<Capability>();
-    capabilities.addAll(toPackageCapabilities(bundleInfo.getExportPackage()));
-    capabilities.addAll(toServiceCapabilities(bundleInfo.getExportService()));
-    URL url;
-    try {
-      url = new URL(bundleInfo.getLocation());
-    } catch (MalformedURLException e) {
-      throw new ResolverException(e);
-    }
-    return new ResourceImpl(bundleInfo.getHeaders(),
-            bundleInfo.getSymbolicName(),
-            bundleInfo.getSymbolicName(),
-            bundleInfo.getVersion(),
-            id,
-            url,
-            requirements.toArray(new Requirement[requirements.size()]),
-            capabilities.toArray(new Capability[capabilities.size()]),
-            null,
-            null);
-  }
-
-  private Collection<Requirement> toRequirements(Set<Content> imports, String type) throws ResolverException
-  {
-    Collection<Requirement> requirements = new ArrayList<Requirement>(imports.size());
-    for (Content content: imports) {
-      requirements.add(toRequirement(content, type));
-    }
-    return requirements;
-  }
-
-  private Requirement toRequirement(Content content, String type) throws ResolverException
-  {
-    Map<String, String> attributes = new HashMap<String, String>();
-    for (Map.Entry<String, String> entry: content.getNameValueMap().entrySet()) {
-      //leave out resolution:=optional, etc
-      if (!entry.getKey().endsWith(":")) {
-        attributes.put(entry.getKey(), entry.getValue());
-      }
-    }
-    String filterString = ManifestHeaderProcessor.generateFilter(type, content.getContentName(), attributes);
-    Filter filter = null;
-    try {
-      filter = FrameworkUtil.createFilter(filterString);
-    } catch (InvalidSyntaxException e) {
-      throw new ResolverException(e);
-    }
-    boolean multiple = false;
-    boolean optional = "optional".equals(content.getNameValueMap().get("resolution:"));
-    boolean extend = false;
-    return new RequirementImpl("package",
-            filter,
-            multiple,
-            optional,
-            extend,
-            null);
-  }
-
-  private Collection<Capability> toPackageCapabilities(Set<Content> exportPackage)
-  {
-    Collection<Capability> capabilities = new ArrayList<Capability>(exportPackage.size());
-    for (Content content: exportPackage) {
-      capabilities.add(toPackageCapability(content));
-    }
-    return capabilities;
-  }
-
-  private Capability toPackageCapability(Content content)
-  {
-    Map<String,String> props = new HashMap<String,String>();
-    props.put("package", content.getContentName());
-    props.put("version", content.getVersion() != null ? content.getVersion().getMinimumVersion().toString() : Version.emptyVersion.toString());
-    return new CapabilityImpl("package", props);
-  }
-
-  private Collection<Capability> toServiceCapabilities(Set<Content> exportPackage)
-  {
-    Collection<Capability> capabilities = new ArrayList<Capability>(exportPackage.size());
-    for (Content content: exportPackage) {
-      capabilities.add(toServiceCapability(content));
-    }
-    return capabilities;
-  }
-
-  private Capability toServiceCapability(Content content)
-  {
-    Map<String,String> props = new HashMap<String,String>();
-    props.put("service", content.getContentName());
-    return new CapabilityImpl("service", props);
-  }
-
-}
+}
\ No newline at end of file

Added: incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/ApplicationResourceImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/ApplicationResourceImpl.java?rev=911133&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/ApplicationResourceImpl.java (added)
+++ incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/ApplicationResourceImpl.java Wed Feb 17 18:19:57 2010
@@ -0,0 +1,154 @@
+/*
+ * 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 WARRANTIES OR 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.resolver.obr.impl;
+
+import java.util.Dictionary;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.aries.application.Content;
+import org.apache.aries.application.utils.manifest.ManifestHeaderProcessor;
+import org.osgi.framework.Filter;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.Version;
+import org.osgi.service.obr.Capability;
+import org.osgi.service.obr.Repository;
+import org.osgi.service.obr.Requirement;
+import org.osgi.service.obr.Resource;
+
+public class ApplicationResourceImpl implements Resource
+{
+  private String _symbolicName;
+  private Version _version;
+  private Requirement[] _requirements;
+  
+  private class FilterWrapper implements Filter
+  {
+    private Filter delgate;
+    
+    public FilterWrapper(Filter f)
+    {
+      delgate = f;
+    }
+    
+    public boolean match(ServiceReference reference)
+    {
+      return delgate.match(reference);
+    }
+
+    public boolean match(Dictionary dictionary)
+    {
+      boolean result = delgate.match(dictionary);
+      
+      System.out.println("Filter:     " + delgate);
+      System.out.println("Dictionary: " + dictionary);
+      System.out.println("Result:     " + result);
+      
+      return result;
+    }
+
+    public boolean matchCase(Dictionary dictionary)
+    {
+      return delgate.matchCase(dictionary);
+    }
+    
+    public String toString()
+    {
+      return delgate.toString();
+    }
+  }
+  
+  public ApplicationResourceImpl(String appName, Version appVersion, List<Content> appContent)
+  {
+    _symbolicName = appName;
+    _version = appVersion;
+    
+    _requirements = new Requirement[appContent.size()];
+    for (int i = 0; i < _requirements.length; i++) {
+      Content c = appContent.get(i);
+      
+      String comment = "Requires " + Resource.SYMBOLIC_NAME + " " + c.getContentName() + " with attributes " + c.getAttributes();
+      
+      String resolution = c.getDirective("resolution");
+
+      boolean optional = Boolean.valueOf(resolution);
+      
+      String f = ManifestHeaderProcessor.generateFilter(Resource.SYMBOLIC_NAME, c.getContentName(), c.getAttributes());
+      Filter filter;
+      try {
+        filter = FrameworkUtil.createFilter(f);
+        _requirements[i] = new RequirementImpl("bundle", new FilterWrapper(filter), false, optional, false, comment);
+      } catch (InvalidSyntaxException e) {
+        // TODO work out what to do if his happens. If it does our filter generation code is bust.
+      }
+    }
+  }
+  
+  public Capability[] getCapabilities()
+  {
+    return null;
+  }
+
+  public String[] getCategories()
+  {
+    return null;
+  }
+
+  public String getId()
+  {
+    return _symbolicName;
+  }
+
+  public String getPresentationName()
+  {
+    return _symbolicName;
+  }
+
+  public Map getProperties()
+  {
+    return null;
+  }
+
+  public Repository getRepository()
+  {
+    return null;
+  }
+
+  public Requirement[] getRequirements()
+  {
+    return _requirements;
+  }
+
+  public String getSymbolicName()
+  {
+    return _symbolicName;
+  }
+
+  public java.net.URL getURL()
+  {
+    return null;
+  }
+
+  public Version getVersion()
+  {
+    return _version;
+  }
+}
\ No newline at end of file

Modified: incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/RequirementImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/RequirementImpl.java?rev=911133&r1=911132&r2=911133&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/RequirementImpl.java (original)
+++ incubator/aries/trunk/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/impl/RequirementImpl.java Wed Feb 17 18:19:57 2010
@@ -29,7 +29,6 @@
  */
 public class RequirementImpl implements Requirement
 {
-
   private final String name;
   private final Filter filter;
   private final boolean multiple;