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;