aries-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ga...@apache.org
Subject svn commit: r1160853 - in /aries/branches/0.2-incubating-RCx/application/application-obr-resolver: ./ src/main/java/org/apache/aries/application/resolver/internal/ src/main/java/org/apache/aries/application/resolver/obr/ src/main/resources/org/ src/mai...
Date Tue, 23 Aug 2011 19:04:56 GMT
Author: gawor
Date: Tue Aug 23 19:04:55 2011
New Revision: 1160853

URL: http://svn.apache.org/viewvc?rev=1160853&view=rev
Log:
ARIES-734: Back port improvements made to resolution error messages in OBR application resolver

Added:
    aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/
    aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/MessageUtil.java
  (with props)
    aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/ModellingConstants.java
  (with props)
    aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/resources/org/
    aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/resources/org/apache/
    aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/resources/org/apache/aries/
    aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/resources/org/apache/aries/application/
    aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/resources/org/apache/aries/application/resolver/
    aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/resources/org/apache/aries/application/resolver/messages/
    aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/resources/org/apache/aries/application/resolver/messages/ResolverMessages.properties
  (with props)
Modified:
    aries/branches/0.2-incubating-RCx/application/application-obr-resolver/pom.xml
    aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/OBRAriesResolver.java

Modified: aries/branches/0.2-incubating-RCx/application/application-obr-resolver/pom.xml
URL: http://svn.apache.org/viewvc/aries/branches/0.2-incubating-RCx/application/application-obr-resolver/pom.xml?rev=1160853&r1=1160852&r2=1160853&view=diff
==============================================================================
--- aries/branches/0.2-incubating-RCx/application/application-obr-resolver/pom.xml (original)
+++ aries/branches/0.2-incubating-RCx/application/application-obr-resolver/pom.xml Tue Aug
23 19:04:55 2011
@@ -28,6 +28,18 @@
       Implementation of the AriesApplicationResolver using OBR
     </description>
     
+    <properties>
+        <!-- Export package versions are maintained in packageinfo files -->
+        <aries.osgi.export.pkg>
+            org.apache.aries.application.resolver.obr;
+            org.apache.aries.application.resolver.obr.generator;
+        </aries.osgi.export.pkg>
+        <aries.osgi.private.pkg>
+            org.apache.aries.application.resolver.obr.impl;
+            org.apache.aries.application.resolver.internal;
+        </aries.osgi.private.pkg>
+    </properties>
+    
     <dependencies>
         <dependency>
             <groupId>org.osgi</groupId>

Added: aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/MessageUtil.java
URL: http://svn.apache.org/viewvc/aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/MessageUtil.java?rev=1160853&view=auto
==============================================================================
--- aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/MessageUtil.java
(added)
+++ aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/MessageUtil.java
Tue Aug 23 19:04:55 2011
@@ -0,0 +1,46 @@
+/*
+ * 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.resolver.internal;
+
+import java.text.MessageFormat;
+import java.util.ResourceBundle;
+
+public class MessageUtil
+{
+  /** The resource bundle for blueprint messages */
+  private final static ResourceBundle messages = ResourceBundle.getBundle("org.apache.aries.application.resolver.messages.ResolverMessages");
+  
+  /**
+   * Resolve a message from the bundle, including any necessary formatting.
+   * 
+   * @param key     the message key.
+   * @param inserts any required message inserts.
+   * @return        the message translated into the server local.
+   */
+  public static final String getMessage(String key, Object ... inserts)
+  {
+    String msg = messages.getString(key);
+    
+    if (inserts.length > 0)
+      msg = MessageFormat.format(msg, inserts);
+    
+    return msg;
+  }
+}

Propchange: aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/MessageUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/MessageUtil.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/MessageUtil.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/ModellingConstants.java
URL: http://svn.apache.org/viewvc/aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/ModellingConstants.java?rev=1160853&view=auto
==============================================================================
--- aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/ModellingConstants.java
(added)
+++ aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/ModellingConstants.java
Tue Aug 23 19:04:55 2011
@@ -0,0 +1,34 @@
+/*
+ * 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.resolver.internal;
+
+import org.osgi.framework.Constants;
+
+public class ModellingConstants
+{
+  public static final String OBR_SYMBOLIC_NAME = "symbolicname";
+  public static final String OBR_PRESENTATION_NAME = "presentationname";
+  public static final String OBR_MANIFEST_VERSION = "manifestversion";
+  public static final String OBR_BUNDLE = "bundle";
+  public static final String OBR_PACKAGE = "package";
+  public static final String OBR_SERVICE = "service";
+  public static final String OBR_COMPOSITE_BUNDLE = "composite-bundle";
+  public static final String OBR_UNKNOWN = "unknown";
+  public static final String OPTIONAL_KEY = Constants.RESOLUTION_DIRECTIVE + ":";
+}

Propchange: aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/ModellingConstants.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/ModellingConstants.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/internal/ModellingConstants.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/OBRAriesResolver.java
URL: http://svn.apache.org/viewvc/aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/OBRAriesResolver.java?rev=1160853&r1=1160852&r2=1160853&view=diff
==============================================================================
--- aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/OBRAriesResolver.java
(original)
+++ aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/java/org/apache/aries/application/resolver/obr/OBRAriesResolver.java
Tue Aug 23 19:04:55 2011
@@ -23,8 +23,11 @@ import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStreamReader;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -41,15 +44,19 @@ import org.apache.aries.application.mana
 import org.apache.aries.application.management.BundleInfo;
 import org.apache.aries.application.management.ResolveConstraint;
 import org.apache.aries.application.management.ResolverException;
+import org.apache.aries.application.resolver.internal.MessageUtil;
+import org.apache.aries.application.resolver.internal.ModellingConstants;
 import org.apache.aries.application.resolver.obr.generator.RepositoryDescriptorGenerator;
 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.ResourceWrapper;
 import org.apache.aries.application.utils.manifest.ManifestHeaderProcessor;
+import org.apache.felix.bundlerepository.Capability;
 import org.apache.felix.bundlerepository.DataModelHelper;
 import org.apache.felix.bundlerepository.Reason;
 import org.apache.felix.bundlerepository.Repository;
 import org.apache.felix.bundlerepository.RepositoryAdmin;
+import org.apache.felix.bundlerepository.Requirement;
 import org.apache.felix.bundlerepository.Resolver;
 import org.apache.felix.bundlerepository.Resource;
 import org.osgi.framework.Constants;
@@ -66,6 +73,9 @@ public class OBRAriesResolver implements
 {
   private static Logger log = LoggerFactory.getLogger(OBRAriesResolver.class);
 
+  private final static String LOG_ENTRY = "Method entry: {}, args {}";
+  private final static String LOG_EXIT = "Method exit: {}, returning {}";
+  
   private final RepositoryAdmin repositoryAdmin;  
   private boolean returnOptionalResources = true;
   
@@ -143,7 +153,25 @@ public class OBRAriesResolver implements
       }
       return result;
     } else {
-      throw new ResolverException("Could not resolve requirements: " + getUnsatisfiedRequirements(obrResolver));
+        Reason[] reasons = obrResolver.getUnsatisfiedRequirements();
+        // let's refine the list by removing the indirect unsatisfied
+        // bundles that are caused by unsatisfied packages or other bundles
+        Map<String, Set<String>> refinedReqs = refineUnsatisfiedRequirements(obrResolver,
reasons);
+
+        StringBuffer reqList = new StringBuffer();
+        Map<String, String> unsatisfiedRequirements = extractConsumableMessageInfo(refinedReqs);
+        for (String reason : unsatisfiedRequirements.keySet()) {
+            reqList.append('\n');
+            reqList.append(reason);
+        }
+
+        ResolverException re = new ResolverException(MessageUtil.getMessage("RESOLVER_UNABLE_TO_RESOLVE",
+                new Object[] { appName, reqList }));
+        List<String> list = new ArrayList<String>();
+        list.addAll(unsatisfiedRequirements.keySet());
+        re.setUnsatisfiedRequirements(list);
+
+        throw re;
     }
   }
 
@@ -188,21 +216,6 @@ public class OBRAriesResolver implements
     }
   }
 
-  private String getUnsatisfiedRequirements(Resolver resolver)
-  {
-    Reason[] reqs = resolver.getUnsatisfiedRequirements();
-    if (reqs != null) {
-      StringBuilder sb = new StringBuilder();
-      for (int reqIdx = 0; reqIdx < reqs.length; reqIdx++) {
-        sb.append("   " + reqs[reqIdx].getRequirement().getFilter()).append("\n");
-        Resource resource = reqs[reqIdx].getResource();
-        sb.append("      " + resource.getPresentationName()).append("\n");
-      }
-      return sb.toString();
-    }
-    return null;
-  }
-
   private BundleInfo toBundleInfo(Resource resource, boolean optional)
   {
     Map<String, String> directives = null;
@@ -223,4 +236,179 @@ public class OBRAriesResolver implements
                              directives,
                              null);
   }
+    
+    /**
+     * Refine the unsatisfied requirements ready for later human comsumption
+     * 
+     * @param resolver
+     *            The resolver to be used to refine the requirements
+     * @param reasons
+     *            The reasons
+     * @return A map of the unsatifiedRequirement to the set of bundles that
+     *         have that requirement unsatisfied (values associated with the
+     *         keys can be null)
+     */
+    private Map<String, Set<String>> refineUnsatisfiedRequirements(Resolver resolver,
Reason[] reasons) {
+        log.debug(LOG_ENTRY, "refineUnsatisfiedRequirements", new Object[] { resolver, Arrays.toString(reasons)
});
+
+        Map<Requirement, Set<String>> req_resources = new HashMap<Requirement,
Set<String>>();
+        // add the reasons to the map, use the requirement as the key, the
+        // resources required the requirement as the values
+        Set<Resource> resources = new HashSet<Resource>();
+        for (Reason reason : reasons) {
+            resources.add(reason.getResource());
+            Requirement key = reason.getRequirement();
+            String value = reason.getResource().getSymbolicName() + "_" + reason.getResource().getVersion().toString();
+            Set<String> values = req_resources.get(key);
+            if (values == null) {
+                values = new HashSet<String>();
+            }
+            values.add(value);
+            req_resources.put(key, values);
+        }
+
+        // remove the requirements that can be satisifed by the resources. It is
+        // listed because the resources are not satisfied by other requirements.
+        // For an instance, the unsatisfied reasons are [package a, required by
+        // bundle aa], [package b, required by bundle bb] and [package c,
+        // required by bundle cc],
+        // If the bundle aa exports the package a and c. In our error message,
+        // we only want to display package a is needed by bundle aa.
+        // Go through each requirement and find out whether the requirement can
+        // be satisfied by the reasons.
+        Set<Capability> caps = new HashSet<Capability>();
+        for (Resource res : resources) {
+            if ((res != null) && (res.getCapabilities() != null)) {
+                List<Capability> capList = Arrays.asList(res.getCapabilities());
+                if (capList != null) {
+                    caps.addAll(capList);
+                }
+            }
+        }
+        
+        Iterator<Map.Entry<Requirement, Set<String>>> iterator = req_resources.entrySet().iterator();
+        while (iterator.hasNext()) {
+            Map.Entry<Requirement, Set<String>> entry = iterator.next();
+            Requirement req = entry.getKey();
+            for (Capability cap : caps) {
+                if (req.isSatisfied(cap)) { // remove the key from the map
+                    iterator.remove();
+                    break;
+                }
+            }
+        }
+        // Now the map only contains the necessary missing requirements
+
+        Map<String, Set<String>> result = new HashMap<String, Set<String>>();
+        for (Map.Entry<Requirement, Set<String>> req_res : req_resources.entrySet())
{
+            result.put(req_res.getKey().getFilter(), req_res.getValue());
+        }
+        
+        log.debug(LOG_EXIT, "refineUnsatisfiedRequirements", new Object[] { result });
+
+        return result;
+    }
+
+    private static final Set<String> SPECIAL_FILTER_ATTRS = Collections.unmodifiableSet(new
HashSet<String>(Arrays
+            .asList(ModellingConstants.OBR_PACKAGE, ModellingConstants.OBR_SYMBOLIC_NAME,
+                    ModellingConstants.OBR_SERVICE, Constants.VERSION_ATTRIBUTE)));
+
+    /**
+     * Turn a requirement into a human readable String for debug.
+     * 
+     * @param filter
+     *            The filter that is failing
+     * @param bundlesFailing
+     *            For problems with a bundle, the set of bundles that have a
+     *            problem
+     * @return human readable form
+     */
+    private Map<String, String> extractConsumableMessageInfo(Map<String, Set<String>>
refinedReqs) {
+        log.debug(LOG_ENTRY, "extractConsumableMessageInfo", refinedReqs);
+
+        Map<String, String> unsatisfiedRequirements = new HashMap<String, String>();
+
+        for (Map.Entry<String, Set<String>> filterEntry : refinedReqs.entrySet())
{
+
+            String filter = filterEntry.getKey();
+            Set<String> bundlesFailing = filterEntry.getValue();
+
+            log.debug("unable to satisfy the filter , filter = " + filter + "required by
"
+                      + Arrays.toString(bundlesFailing.toArray()));
+
+            Map<String, String> attrs = ManifestHeaderProcessor.parseFilter(filter);
+            Map<String, String> customAttrs = new HashMap<String, String>();
+            for (Map.Entry<String, String> e : attrs.entrySet()) {
+                if (!SPECIAL_FILTER_ATTRS.contains(e.getKey())) {
+                    customAttrs.put(e.getKey(), e.getValue());
+                }
+            }
+
+            StringBuilder msgKey = new StringBuilder();
+            List<Object> inserts = new ArrayList<Object>();
+
+            final String type;
+            boolean unknownType = false;
+            if (attrs.containsKey(ModellingConstants.OBR_PACKAGE)) {
+                type = ModellingConstants.OBR_PACKAGE;
+                msgKey.append("RESOLVER_UNABLE_TO_RESOLVE_PACKAGE");
+                inserts.add(attrs.get(ModellingConstants.OBR_PACKAGE));
+            } else if (attrs.containsKey(ModellingConstants.OBR_SYMBOLIC_NAME)) {
+                type = ModellingConstants.OBR_SYMBOLIC_NAME;
+                msgKey.append("RESOLVER_UNABLE_TO_RESOLVE_BUNDLE");
+                inserts.add(attrs.get(ModellingConstants.OBR_SYMBOLIC_NAME));
+            } else if (attrs.containsKey(ModellingConstants.OBR_SERVICE)) {
+                type = ModellingConstants.OBR_SERVICE;
+                msgKey.append("RESOLVER_UNABLE_TO_RESOLVE_SERVICE");
+                // No insert for service name as the name must be "*" to match
+                // any
+                // Service capability
+            } else {
+                type = ModellingConstants.OBR_UNKNOWN;
+                unknownType = true;
+                msgKey.append("RESOLVER_UNABLE_TO_RESOLVE_FILTER");
+                inserts.add(filter);
+            }
+
+            if (bundlesFailing != null && bundlesFailing.size() != 0) {
+                msgKey.append("_REQUIRED_BY_BUNDLE");
+                if (bundlesFailing.size() == 1)
+                    inserts.add(bundlesFailing.iterator().next()); // Just take
+                // the string
+                // if there's only one
+                // of them
+                else
+                    inserts.add(bundlesFailing.toString()); // Add the whole set
+                // if there
+                // isn't exactly one
+            }
+            if (!unknownType && !customAttrs.isEmpty()) {
+                msgKey.append("_WITH_ATTRS");
+                inserts.add(customAttrs);
+            }
+
+            if (!unknownType && attrs.containsKey(Constants.VERSION_ATTRIBUTE)) {
+                msgKey.append("_WITH_VERSION");
+                VersionRange vr = ManifestHeaderProcessor.parseVersionRange(attrs.get(Constants.VERSION_ATTRIBUTE));
+                inserts.add(vr.getMinimumVersion());
+
+                if (!!!vr.isExactVersion()) {
+                    msgKey.append(vr.isMinimumExclusive() ? "_LOWEX" : "_LOW");
+                    if (vr.getMaximumVersion() != null) {
+                        msgKey.append(vr.isMaximumExclusive() ? "_UPEX" : "_UP");
+                        inserts.add(vr.getMaximumVersion());
+                    }
+                }
+            }
+
+            String msgKeyStr = msgKey.toString();
+
+            String msg = MessageUtil.getMessage(msgKeyStr, inserts.toArray());
+            unsatisfiedRequirements.put(msg, type);
+        }
+
+        log.debug(LOG_EXIT, "extractConsumableMessageInfo", unsatisfiedRequirements);
+
+        return unsatisfiedRequirements;
+    }
 }

Added: aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/resources/org/apache/aries/application/resolver/messages/ResolverMessages.properties
URL: http://svn.apache.org/viewvc/aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/resources/org/apache/aries/application/resolver/messages/ResolverMessages.properties?rev=1160853&view=auto
==============================================================================
--- aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/resources/org/apache/aries/application/resolver/messages/ResolverMessages.properties
(added)
+++ aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/resources/org/apache/aries/application/resolver/messages/ResolverMessages.properties
Tue Aug 23 19:04:55 2011
@@ -0,0 +1,127 @@
+#
+# 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.
+#
+RESOLVER_UNABLE_TO_READ_REPOSITORY_EXCEPTION=An internal error occurred. When provisioning
the EBA archive {0}, cannot read the repository {1}.
+
+RESOLVER_UNABLE_TO_RESOLVE=The system cannot provision the EBA {0} because the following
problems in the dependency chain were detected: {1}
+#
+# The following sentences will be added as separate lines following the message above. They
are NOT used as independent messages.
+#
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE=The package dependency {0} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_WITH_ATTRS=The package dependency {0} with attributes
{1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_WITH_VERSION=The package dependency {0} with the version
{1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_WITH_VERSION_LOW=The package dependency {0} with the version
greater than or equal to {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_WITH_VERSION_LOW_UP=The package dependency {0} with the
version greater than or equal to {1} and less than or equal to {2} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_WITH_VERSION_LOW_UPEX=The package dependency {0} with
the version greater than or equal to {1} and less than {2} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_WITH_VERSION_LOWEX=The package dependency {0} with the
version greater than {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_WITH_VERSION_LOWEX_UP=The package dependency {0} with
the version greater than {1} and less than or equal to {2} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_WITH_VERSION_LOWEX_UPEX=The package dependency {0} with
the version greater than {1} and less than {2} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_WITH_ATTRS_WITH_VERSION=The package dependency {0} with
attributes {1} and the version {2} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_WITH_ATTRS_WITH_VERSION_LOW=The package dependency {0}
with attributes {1} and the version greater than or equal to {2} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_WITH_ATTRS_WITH_VERSION_LOW_UP=The package dependency
{0} with attributes {1} and the version greater than or equal to {2} and less than or equal
to {3} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_WITH_ATTRS_WITH_VERSION_LOW_UPEX=The package dependency
{0} with attributes {1} and the version greater than or equal to {2} and less than {3} cannot
be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_WITH_ATTRS_WITH_VERSION_LOWEX=The package dependency {0}
with attributes {1} and the version greater than {2} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_WITH_ATTRS_WITH_VERSION_LOWEX_UP=The package dependency
{0} with attributes {1} and the version greater than {2} and below than or equal to {3} cannot
be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_WITH_ATTRS_WITH_VERSION_LOWEX_UPEX=The package dependency
{0} with attributes {1} and the version greater than {2} and less than {3} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_REQUIRED_BY_BUNDLE=The package dependency {0} required
by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_REQUIRED_BY_BUNDLE_WITH_ATTRS=The package dependency {0}
with attributes {2} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_REQUIRED_BY_BUNDLE_WITH_VERSION=The package dependency
{0} with the version {2} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOW=The package dependency
{0} with the version greater than or equal to {2} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOW_UP=The package dependency
{0} with the version greater than or equal to {2} and less than or equal to {3} required by
bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOW_UPEX=The package dependency
{0} with the version greater than or equal to {2} and less than {3} required by bundle {1}
cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOWEX=The package dependency
{0} with the version greater than {2} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOWEX_UP=The package dependency
{0} with the version greater than {2} and less than or equal to {3} required by bundle {1}
cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOWEX_UPEX=The package
dependency {0} with the version greater than {2} and less than {3} required by bundle {1}
cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION=The package
dependency {0} with attributes {2} and the version {3} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOW=The package
dependency {0} with attributes {2} and the version greater than or equal to {3} required by
bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOW_UP=The
package dependency {0} with attributes {2} and the version greater than or equal to {3} and
less than or equal to {4} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOW_UPEX=The
package dependency {0} with attributes {2} and the version greater than or equal to {3} and
less than {4} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOWEX=The package
dependency {0} with attributes {2} and the version greater than {3} required by bundle {1}
cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOWEX_UP=The
package dependency {0} with attributes {2} and the version greater than {3} and below than
or equal to {4} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_PACKAGE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOWEX_UPEX=The
package dependency {0} with attributes {2} and the version greater than {3} and less than
{4} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE=The bundle dependency {0} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_WITH_ATTRS=The bundle dependency {0} with attributes {1}
cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_WITH_VERSION=The bundle dependency {0} with the version
{1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_WITH_VERSION_LOW=The bundle dependency {0} with the version
greater than or equal to {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_WITH_VERSION_LOW_UP=The bundle dependency {0} with the
version greater than or equal to {1} and less than or equal to {2} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_WITH_VERSION_LOW_UPEX=The bundle dependency {0} with the
version greater than or equal to {1} and less than {2} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_WITH_VERSION_LOWEX=The bundle dependency {0} with the version
greater than {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_WITH_VERSION_LOWEX_UP=The bundle dependency {0} with the
version greater than {1} and less than or equal to {2} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_WITH_VERSION_LOWEX_UPEX=The bundle dependency {0} with
the version greater than {1} and less than {2} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_WITH_ATTRS_WITH_VERSION=The bundle dependency {0} with
attributes {1} and the version {2} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_WITH_ATTRS_WITH_VERSION_LOW=The bundle dependency {0} with
attributes {1} and the version greater than or equal to {2} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_WITH_ATTRS_WITH_VERSION_LOW_UP=The bundle dependency {0}
with attributes {1} and the version greater than or equal to {2} and less than or equal to
{3} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_WITH_ATTRS_WITH_VERSION_LOW_UPEX=The bundle dependency
{0} with attributes {1} and the version greater than or equal to {2} and less than {3} cannot
be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_WITH_ATTRS_WITH_VERSION_LOWEX=The bundle dependency {0}
with attributes {1} and the version greater than {2} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_WITH_ATTRS_WITH_VERSION_LOWEX_UP=The bundle dependency
{0} with attributes {1} and the version greater than {2} and less than or equal to {3} cannot
be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_WITH_ATTRS_WITH_VERSION_LOWEX_UPEX=The bundle dependency
{0} with attributes {1} and the version greater than {2} and less than {3} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_REQUIRED_BY_BUNDLE=The bundle dependency {0} required by
bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_REQUIRED_BY_BUNDLE_WITH_ATTRS=The bundle dependency {0}
with attributes {2} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_REQUIRED_BY_BUNDLE_WITH_VERSION=The bundle dependency {0}
with the version {2} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOW=The bundle dependency
{0} with the version greater than or equal to {2} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOW_UP=The bundle dependency
{0} with the version greater than or equal to {2} and less than or equal to {3} required by
bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOW_UPEX=The bundle dependency
{0} with the version greater than or equal to {2} and less than {3} required by bundle {1}
cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOWEX=The bundle dependency
{0} with the version greater than {2} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOWEX_UP=The bundle dependency
{0} with the version greater than {2} and less than or equal to {3} required by bundle {1}
cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOWEX_UPEX=The bundle dependency
{0} with the version greater than {2} and less than {3} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION=The bundle dependency
{0} with attributes {2} and the version {3} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOW=The bundle
dependency {0} with attributes {2} and the version greater than or equal to {3} required by
bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOW_UP=The bundle
dependency {0} with attributes {2} and the version greater than or equal to {3} and less than
or equal to {4} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOW_UPEX=The
bundle dependency {0} with attributes {2} and the version greater than or equal to {3} and
less than {4} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOWEX=The bundle
dependency {0} with attributes {2} and the version greater than {3} required by bundle {1}
cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOWEX_UP=The
bundle dependency {0} with attributes {2} and the version greater than {3} and less than or
equal to {4} required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_BUNDLE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOWEX_UPEX=The
bundle dependency {0} with attributes {2} and the version greater than {3} and less than {4}
required by bundle {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE=The service dependency cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_WITH_ATTRS=The service dependency with attributes {0}
cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_WITH_VERSION=The service dependency with the version {0}
cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_WITH_VERSION_LOW=The service dependency with the version
greater than or equal to {0} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_WITH_VERSION_LOW_UP=The service dependency with the version
greater than or equal to {0} and less than or equal to {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_WITH_VERSION_LOW_UPEX=The service dependency with the
version greater than or equal to {0} and less than {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_WITH_VERSION_LOWEX=The service dependency with the version
greater than {0} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_WITH_VERSION_LOWEX_UP=The service dependency with the
version greater than {0} and less than or equal to {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_WITH_VERSION_LOWEX_UPEX=The service dependency with the
version greater than {0} and less than {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_WITH_ATTRS_WITH_VERSION=The service dependency with attributes
{0} and the version {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_WITH_ATTRS_WITH_VERSION_LOW=The service dependency with
attributes {0} and the version greater than or equal to {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_WITH_ATTRS_WITH_VERSION_LOW_UP=The service dependency
with attributes {0} and the version greater than or equal to {1} and less than or equal to
{2} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_WITH_ATTRS_WITH_VERSION_LOW_UPEX=The service dependency
with attributes {0} and the version greater than or equal to {1} and less than {2} cannot
be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_WITH_ATTRS_WITH_VERSION_LOWEX=The service dependency with
attributes {0} and the version greater than {1} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_WITH_ATTRS_WITH_VERSION_LOWEX_UP=The service dependency
with attributes {0} and the version greater than {1} and less than or equal to {2} cannot
be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_WITH_ATTRS_WITH_VERSION_LOWEX_UPEX=The service dependency
with attributes {0} and the version greater than {1} and less than {2} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_REQUIRED_BY_BUNDLE=The service dependency required by
bundle {0} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_REQUIRED_BY_BUNDLE_WITH_ATTRS=The service dependency with
attributes {1} required by bundle {0} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_REQUIRED_BY_BUNDLE_WITH_VERSION=The service dependency
with the version {1} required by bundle {0} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOW=The service dependency
with the version greater than or equal to {1} required by bundle {0} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOW_UP=The service dependency
with the version greater than or equal to {2} and less than or equal to {1} required by bundle
{0} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOW_UPEX=The service dependency
with the version greater than or equal to {2} and less than {1} required by bundle {0} cannot
be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOWEX=The service dependency
with the version greater than {1} required by bundle {0} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOWEX_UP=The service dependency
with the version greater than {2} and less than or equal to {1} required by bundle {0} cannot
be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_REQUIRED_BY_BUNDLE_WITH_VERSION_LOWEX_UPEX=The service
dependency with the version greater than {2} and less than {1} required by bundle {0} cannot
be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION=The service
dependency with attributes {1} and the version {2} required by bundle {0} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOW=The service
dependency with attributes {1} and the version greater than or equal to {2} required by bundle
{0} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOW_UP=The
service dependency with attributes {1} and the version greater than or equal to {3} and less
than or equal to {2} required by bundle {0} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOW_UPEX=The
service dependency with attributes {1} and the version greater than or equal to {3} and less
than {2} required by bundle {0}  cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOWEX=The service
dependency with attributes {1} and the version greater than {2} required by bundle {0} cannot
be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOWEX_UP=The
service dependency with attributes {1} and the version greater than {3} and less than or equal
to {2} required by bundle {0} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_SERVICE_REQUIRED_BY_BUNDLE_WITH_ATTRS_WITH_VERSION_LOWEX_UPEX=The
service dependency with attributes {1} and the version greater than {3} and less than {2}
required by bundle {0} cannot be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_FILTER=A dependency of unspecified type with filter {0} cannot
be resolved.
+RESOLVER_UNABLE_TO_RESOLVE_FILTER_REQUIRED_BY_BUNDLE=A dependency of unspecified type with
filter {0} required by bundle {1} cannot be resolved.
+#
+# End of sentences added
+NO_EXPORTED_BUNDLE=An internal error occurred. The runtime was unable to model the provisioned
resource as a bundle.
+TOO_MANY_EXPORTED_BUNDLES=An internal error occurred. The runtime was unable to model the
provisioned resource as a bundle.
+

Propchange: aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/resources/org/apache/aries/application/resolver/messages/ResolverMessages.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/resources/org/apache/aries/application/resolver/messages/ResolverMessages.properties
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: aries/branches/0.2-incubating-RCx/application/application-obr-resolver/src/main/resources/org/apache/aries/application/resolver/messages/ResolverMessages.properties
------------------------------------------------------------------------------
    svn:mime-type = text/plain



Mime
View raw message