Author: jwross
Date: Thu Aug 18 00:02:31 2011
New Revision: 1158976

URL: http://svn.apache.org/viewvc?rev=1158976&view=rev
Log:
ARIES-730: Generation of the osgi.identity requirement must support version 
ranges.

Added:
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Clause.java
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/GenericClause.java
    
aries/trunk/subsystem/subsystem-itests/src/test/resources/META-INF/platform-equinox/definition-3.8.0-SNAPSHOT.xml
Removed:
    aries/trunk/subsystem/subsystem-api/src/main/java/org/apache/aries/
    
aries/trunk/subsystem/subsystem-itests/src/test/resources/application1/tb1.jar
    aries/trunk/subsystem/subsystem-itests/src/test/resources/feature1/tb1.jar
    aries/trunk/subsystem/subsystem-itests/src/test/resources/feature2/tb2.jar
    aries/trunk/subsystem/subsystem-itests/src/test/resources/subsystem1/
Modified:
    aries/trunk/subsystem/subsystem-api/pom.xml
    aries/trunk/subsystem/subsystem-core/pom.xml
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/DeploymentManifest.java
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/ProvisionResourceHeader.java
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemContentHeader.java
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/TypeAttribute.java
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/VersionRangeAttribute.java
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Activator.java
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/AriesSubsystem.java
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/OsgiIdentityRequirement.java
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/obr/SubsystemEnvironment.java
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/resource/BundleRuntimeResource.java
    aries/trunk/subsystem/subsystem-itests/pom.xml
    
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/FeatureTest.java
    
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java
    
aries/trunk/subsystem/subsystem-itests/src/test/java/org/ops4j/pax/runner/platform/equinox/internal/SsActivator.java
    
aries/trunk/subsystem/subsystem-itests/src/test/resources/feature1/OSGI-INF/SUBSYSTEM.MF
    
aries/trunk/subsystem/subsystem-itests/src/test/resources/ss-runner.properties

Modified: aries/trunk/subsystem/subsystem-api/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-api/pom.xml?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-api/pom.xml (original)
+++ aries/trunk/subsystem/subsystem-api/pom.xml Thu Aug 18 00:02:31 2011
@@ -21,7 +21,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.aries</groupId>
-        <artifactId>java5-parent</artifactId>
+        <artifactId>java6-parent</artifactId>
         <version>0.4</version>
         <relativePath />
     </parent>

Modified: aries/trunk/subsystem/subsystem-core/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/pom.xml?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/pom.xml (original)
+++ aries/trunk/subsystem/subsystem-core/pom.xml Thu Aug 18 00:02:31 2011
@@ -21,7 +21,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.aries</groupId>
-        <artifactId>java5-parent</artifactId>
+        <artifactId>java6-parent</artifactId>
         <version>0.4</version>
         <relativePath />
     </parent>

Added: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Clause.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Clause.java?rev=1158976&view=auto
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Clause.java
 (added)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Clause.java
 Thu Aug 18 00:02:31 2011
@@ -0,0 +1,32 @@
+/*
+ * Licensed 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.subsystem.core.archive;
+
+import java.util.Collection;
+
+public interface Clause {
+       Attribute getAttribute(String name);
+       
+       Collection<Attribute> getAttributes();
+       
+       Directive getDirective(String name);
+       
+       Collection<Directive> getDirectives();
+       
+       Parameter getParameter(String name);
+       
+       Collection<Parameter> getParameters();
+       
+       String getPath();
+}

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/DeploymentManifest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/DeploymentManifest.java?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/DeploymentManifest.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/DeploymentManifest.java
 Thu Aug 18 00:02:31 2011
@@ -34,7 +34,7 @@ public class DeploymentManifest extends 
                result.headers.put(ManifestVersionHeader.NAME, 
manifest.getManifestVersion());
                Collection<Requirement> requirements = new 
ArrayList<Requirement>();
                for (SubsystemContentHeader.Content content : 
manifest.getSubsystemContent().getContents()) {
-                       Requirement requirement = 
OsgiIdentityRequirement.newInstance(content);
+                       Requirement requirement = new 
OsgiIdentityRequirement(content.getName(), content.getVersionRange(), 
content.getType(), false);
                        requirements.add(requirement);
                }
                // TODO This does not validate that all content bundles were 
found.

Added: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/GenericClause.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/GenericClause.java?rev=1158976&view=auto
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/GenericClause.java
 (added)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/GenericClause.java
 Thu Aug 18 00:02:31 2011
@@ -0,0 +1,98 @@
+/*
+ * Licensed 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.subsystem.core.archive;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class GenericClause implements Clause {
+       private static final String REGEX = '(' + Grammar.PATH + "(?:;" + 
Grammar.PATH + ")*)(?:;(" + Grammar.PARAMETER + "))*";
+       
+       private static final Pattern PATTERN = Pattern.compile(REGEX);
+       private static final Pattern PATTERN_PARAMETER = 
Pattern.compile(Grammar.PARAMETER);
+       
+       private final Map<String, Parameter> parameters = new HashMap<String, 
Parameter>();
+       private final String path;
+       
+       public GenericClause(String clause) {
+               Matcher matcher = PATTERN.matcher(clause);
+               if (!matcher.matches()) {
+                       throw new IllegalArgumentException("Invalid clause: " + 
clause);
+               }
+               path = matcher.group(1);
+               matcher = PATTERN_PARAMETER.matcher(clause);
+               while(matcher.find()) {
+                       String group = matcher.group();
+                       if (group == null || group.length() == 0)
+                               continue;
+                       Parameter parameter = ParameterFactory.create(group);
+                       parameters.put(parameter.getName(), parameter);
+               }
+       }
+       
+       public Attribute getAttribute(String name) {
+               Parameter result = parameters.get(name);
+               if (result instanceof Attribute) {
+                       return (Attribute)result;
+               }
+               return null;
+       }
+       
+       public Collection<Attribute> getAttributes() {
+               ArrayList<Attribute> attributes = new 
ArrayList<Attribute>(parameters.size());
+               for (Parameter parameter : parameters.values()) {
+                       if (parameter instanceof Attribute) {
+                               attributes.add((Attribute)parameter);
+                       }
+               }
+               attributes.trimToSize();
+               return attributes;
+       }
+       
+       public Directive getDirective(String name) {
+               Parameter result = parameters.get(name);
+               if (result instanceof Directive) {
+                       return (Directive)result;
+               }
+               return null;
+       }
+       
+       public Collection<Directive> getDirectives() {
+               ArrayList<Directive> directives = new 
ArrayList<Directive>(parameters.size());
+               for (Parameter parameter : parameters.values()) {
+                       if (parameter instanceof Directive) {
+                               directives.add((Directive)parameter);
+                       }
+               }
+               directives.trimToSize();
+               return directives;
+       }
+       
+       public Parameter getParameter(String name) {
+               return parameters.get(name);
+       }
+       
+       public Collection<Parameter> getParameters() {
+               return Collections.unmodifiableCollection(parameters.values());
+       }
+       
+       public String getPath() {
+               return path;
+       }
+}

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java
 Thu Aug 18 00:02:31 2011
@@ -60,26 +60,26 @@ public interface Grammar {
 //     digit ::= [0..9]
 //     alpha ::= [a..zA..Z]
 //     alphanum ::= alpha | digit
-//     extended ::= ( alphanum | ’_’ | ’-’ | ’.’ )+
-//     quoted-string ::= ’"’ ( ~["\#x0D#x0A#x00] | ’\"’|’\\’)* 
’"’
+//     extended ::= ( alphanum | _ | - | . )+
+//     quoted-string ::= " ( ~["\#x0D#x0A#x00] | \"|\\)* "
 //     argument ::= extended | quoted-string
 //     parameter ::= directive | attribute
-//     directive ::= extended ’:=’ argument
-//     attribute ::= extended ’=’ argument
-//     path ::= path-unquoted | (’"’ path-unquoted ’"’)
+//     directive ::= extended := argument
+//     attribute ::= extended = argument
+//     path ::= path-unquoted | (" path-unquoted ")
 //     path-unquoted ::= path-sep | path-sep? path-element (path-sep 
path-element)*
 //     path-element ::= ~[/"\#x0D#x0A#x00]+
-//     path-sep ::= ’/’
-//     header ::= clause ( ’,’ clause ) *
-//     clause ::= path ( ’;’ path ) * ( ’;’ parameter ) *
+//     path-sep ::= /
+//     header ::= clause ( , clause ) *
+//     clause ::= path ( ; path ) * ( ; parameter ) *
        
        public static final String DIGIT = "[0-9]";
        public static final String ALPHA = "[A-Za-z]";
        public static final String ALPHANUM = DIGIT + '|' + ALPHA;
        public static final String TOKEN = "(?:" + ALPHANUM + "|_|-)+";
        public static final String EXTENDED = "(?:" + ALPHANUM + "|_|-|\\.)+";
-       public static final String QUOTED_STRING = 
"\"(?:[^\"\r\n\u0000]|\\\\\"|\\\\\\\\)*\"";
-       public static final String ARGUMENT = EXTENDED /*+ '|' + 
QUOTED_STRING*/;
+       public static final String QUOTED_STRING = 
"\"(?:[^\\\\\"\r\n\u0000]|\\\\\"|\\\\\\\\)*\"";
+       public static final String ARGUMENT = EXTENDED + '|' + QUOTED_STRING;
        public static final String DIRECTIVE = EXTENDED + ":=(?:" + ARGUMENT + 
')';
        public static final String ATTRIBUTE = EXTENDED + "=(?:" + ARGUMENT + 
')';
        public static final String PARAMETER = "(?:" + DIRECTIVE + ")|(?:" + 
ATTRIBUTE + ')';
@@ -88,7 +88,7 @@ public interface Grammar {
        public static final String PATH_SEP = "/";
        public static final String PATH_UNQUOTED = PATH_SEP + '|' + PATH_SEP + 
'?' + PATH_ELEMENT + "(?:" + PATH_SEP + PATH_ELEMENT + ")*";
        public static final String PATH_UNQUOTED_NT = PATH_SEP + '|' + PATH_SEP 
+ '?' + PATH_ELEMENT_NT + "(?:" + PATH_SEP + PATH_ELEMENT_NT + ")*";
-       public static final String PATH = "(?:" + PATH_UNQUOTED_NT + ")|(?:\"" 
+ PATH_UNQUOTED + "\")";
+       public static final String PATH = "(?:" + PATH_UNQUOTED_NT + ")|\"(?:" 
+ PATH_UNQUOTED + ")\"";
        public static final String CLAUSE = "(?:" + PATH + ")(?:;" + PATH + 
")*(?:;(?:" + PARAMETER + "))*";
        public static final String HEADERCHAR = ALPHANUM + "|_|-";
        public static final String NAME = ALPHANUM + "(?:" + HEADERCHAR + ")*";

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/ProvisionResourceHeader.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/ProvisionResourceHeader.java?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/ProvisionResourceHeader.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/ProvisionResourceHeader.java
 Thu Aug 18 00:02:31 2011
@@ -51,11 +51,13 @@ public class ProvisionResourceHeader ext
        
        public static ProvisionResourceHeader newInstance(Collection<Resource> 
resources) {
                StringBuilder builder = new StringBuilder();
-               appendResource(resources.iterator().next(), builder);
                for (Resource resource : resources) {
-                       builder.append(',');
                        appendResource(resource, builder);
+                       builder.append(',');
                }
+               // Remove the trailing comma.
+               // TODO Intentionally letting the exception propagate since 
there must be at least one resource.
+               builder.deleteCharAt(builder.length() - 1);
                return new ProvisionResourceHeader(builder.toString());
        }
        

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemContentHeader.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemContentHeader.java?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemContentHeader.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemContentHeader.java
 Thu Aug 18 00:02:31 2011
@@ -19,19 +19,20 @@ import java.util.Collections;
 
 import org.osgi.framework.Constants;
 import org.osgi.framework.Version;
+import org.osgi.framework.VersionRange;
 
 public class SubsystemContentHeader extends AbstractHeader {
        public static class Content {
                private final boolean mandatory;
                private final String name;
                private final String type;
-               private final Version version;
+               private final VersionRange versionRange;
                
-               public Content(boolean mandatory, String name, String type, 
Version version) {
+               public Content(boolean mandatory, String name, String type, 
VersionRange versionRange) {
                        this.mandatory = mandatory;
                        this.name = name;
                        this.type = type;
-                       this.version = version;
+                       this.versionRange = versionRange;
                }
                
                public String getName() {
@@ -42,8 +43,8 @@ public class SubsystemContentHeader exte
                        return type;
                }
                
-               public Version getVersion() {
-                       return version;
+               public VersionRange getVersionRange() {
+                       return versionRange;
                }
                
                public boolean isMandatory() {
@@ -55,7 +56,7 @@ public class SubsystemContentHeader exte
                                .append(';')
                                .append(VersionAttribute.NAME)
                                .append('=')
-                               .append(getVersion())
+                               .append(getVersionRange())
                                .append(';')
                                .append(TypeAttribute.NAME)
                                .append("=")
@@ -87,11 +88,12 @@ public class SubsystemContentHeader exte
                        Attribute attribute = 
clause.getAttribute(TypeAttribute.NAME);
                        if (attribute != null)
                                type = ((TypeAttribute)attribute).getType();
-                       Version version = Version.emptyVersion;
+                       VersionRange versionRange = new 
VersionRange(Version.emptyVersion.toString());
                        attribute = 
clause.getAttribute(Constants.VERSION_ATTRIBUTE);
-                       if (attribute != null)
-                               version = 
((VersionAttribute)attribute).getVersion();
-                       contents.add(new Content(mandatory, name, type, 
version));
+                       if (attribute != null) {
+                               versionRange = new 
VersionRange(attribute.getValue());
+                       }
+                       contents.add(new Content(mandatory, name, type, 
versionRange));
                }
        }
 

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/TypeAttribute.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/TypeAttribute.java?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/TypeAttribute.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/TypeAttribute.java
 Thu Aug 18 00:02:31 2011
@@ -20,6 +20,12 @@ public class TypeAttribute extends Abstr
        // TODO Add to constants.
        public static final String NAME = "type";
        
+       public static TypeAttribute newInstance(String value) {
+               if (value == null || value.length() == 0)
+                       return DEFAULT;
+               return new TypeAttribute(value);
+       }
+       
        public TypeAttribute() {
                this(DEFAULT_VALUE);
        }

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/VersionRangeAttribute.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/VersionRangeAttribute.java?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/VersionRangeAttribute.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/VersionRangeAttribute.java
 Thu Aug 18 00:02:31 2011
@@ -13,115 +13,28 @@
  */
 package org.apache.aries.subsystem.core.archive;
 
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 import org.osgi.framework.Constants;
 import org.osgi.framework.Version;
+import org.osgi.framework.VersionRange;
 
 public class VersionRangeAttribute extends AbstractAttribute {
-       public static class RangedVersion extends Version {
-               private final boolean inclusive;
-               
-               public RangedVersion() {
-                       super(Version.emptyVersion.toString());
-                       inclusive = true;
-               }
-               
-               public RangedVersion(String value) {
-                       this(value, true);
-               }
-               
-               public RangedVersion(String value, boolean inclusive) {
-                       super(value);
-                       this.inclusive = inclusive;
-               }
-               
-               public boolean isExclusive() {
-                       return !inclusive;
-               }
-               
-               public boolean isInclusive() {
-                       return inclusive;
-               }
-       }
-       
-       public static class Range {
-               private static final String INTERVAL = "([\\[\\(])(" + 
Grammar.FLOOR + "),(" + Grammar.CEILING + ")([\\[\\)])";
-               private static final String REGEX = INTERVAL + "|(" + 
Grammar.ATLEAST + ')';
-               private static final Pattern PATTERN = Pattern.compile(REGEX);
-               
-               private final RangedVersion ceiling;
-               private final RangedVersion floor;
-               
-               public Range() {
-                       ceiling = null;
-                       floor = new RangedVersion();
-               }
-               
-               public Range(String value) {
-                       Matcher matcher = PATTERN.matcher(value);
-                       if (!matcher.matches()) {
-                               throw new IllegalArgumentException("Invalid " + 
Constants.VERSION_ATTRIBUTE + " attribute value: " + value);
-                       }
-                       String floorSymbol = matcher.group(1);
-                       String floorStr = matcher.group(2);
-                       String ceilingStr = matcher.group(3);
-                       String ceilingSymbol = matcher.group(4);
-                       String atLeastStr = matcher.group(5);
-                       if (atLeastStr != null) {
-                               floor = new RangedVersion(atLeastStr);
-                               ceiling = null;
-                       }
-                       else {
-                               floor = new RangedVersion(floorStr, 
floorSymbol.equals("("));
-                               if (ceilingStr != null) {
-                                       ceiling = new RangedVersion(ceilingStr, 
ceilingSymbol.equals("("));
-                               }
-                               else {
-                                       ceiling = null;
-                               }
-                       }
-               }
-               
-               public RangedVersion getCeiling() {
-                       return ceiling;
-               }
-               
-               public RangedVersion getFloor() {
-                       return floor;
-               }
-       }
-       
-       private static final String REGEX = '(' + Grammar.INTERVAL + ")|(" + 
Grammar.ATLEAST + ')';
-       private static final Pattern PATTERN = Pattern.compile(REGEX);
-       
-       private final Range range;
+       private final VersionRange range;
        
        public VersionRangeAttribute() {
                super(Constants.VERSION_ATTRIBUTE, 
Version.emptyVersion.toString());
-               range = new Range();
+               range = new VersionRange(getValue());
        }
                        
        public VersionRangeAttribute(String value) {
                super(Constants.VERSION_ATTRIBUTE, value);
-               Matcher matcher = PATTERN.matcher(value);
-               if (!matcher.matches()) {
-                       throw new IllegalArgumentException("Invalid " + 
Constants.VERSION_ATTRIBUTE + " attribute value: " + value);
-               }
-               range = new Range(matcher.group(1));
+               range = new VersionRange(getValue());
        }
        
        public StringBuilder appendToFilter(StringBuilder builder) {
-               Range range = getRange();
-               builder.append(getName()).append(">=").append(range.getFloor());
-               if (range.getCeiling() != null) {
-                       
builder.append(")(!(").append(getName()).append(">=").append(range.getCeiling()).append(')');
-               }
-               return builder;
+               return 
builder.append(range.toFilterString(Constants.VERSION_ATTRIBUTE));
        }
 
-       public Range getRange() {
+       public VersionRange getVersionRange() {
                return range;
        }
 }

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Activator.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Activator.java?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Activator.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Activator.java
 Thu Aug 18 00:02:31 2011
@@ -150,13 +150,13 @@ public class Activator implements Bundle
                                for (org.apache.felix.bundlerepository.Resource 
resource : resolver.getRequiredResources()) {
                                        Resource r = new 
FelixResourceAdapter(resource);
                                        // Make the environment aware of the 
resource and its URL.
-                                       environment.findProviders(new 
OsgiIdentityRequirement(r, resource.getSymbolicName(), resource.getVersion()));
+                                       environment.findProviders(new 
OsgiIdentityRequirement(r, true));
                                resources.add(r);
                                }
                                for (org.apache.felix.bundlerepository.Resource 
resource : resolver.getOptionalResources()) {
                                        Resource r = new 
FelixResourceAdapter(resource);
                                        // Make the environment aware of the 
resource and its URL.
-                                       environment.findProviders(new 
OsgiIdentityRequirement(r, resource.getSymbolicName(), resource.getVersion()));
+                                       environment.findProviders(new 
OsgiIdentityRequirement(r, true));
                                resources.add(r);
                                }
                        }

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/AriesSubsystem.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/AriesSubsystem.java?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/AriesSubsystem.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/AriesSubsystem.java
 Thu Aug 18 00:02:31 2011
@@ -171,6 +171,10 @@ public class AriesSubsystem implements S
                
        }
        
+       public void addConstituent(Resource resource) {
+               constituents.add(resource);
+       }
+       
        @Override
        public void cancel() throws SubsystemException {
                // TODO Auto-generated method stub
@@ -317,6 +321,13 @@ public class AriesSubsystem implements S
                return 
"osgi.feature".equals(archive.getSubsystemManifest().getSubsystemType().getValue());
        }
        
+       public boolean isTransitive(Resource resource) {
+               SubsystemEnvironment environment = getEnvironment();
+               if (environment == null)
+                       return true;
+               return !environment.isContentResource(resource);
+       }
+       
        /* INSTALLING   Wait, Start
         * INSTALLED    -
         * RESOLVING    Wait, Start
@@ -450,10 +461,6 @@ public class AriesSubsystem implements S
                }
        }
        
-       protected void addConstituent(Resource resource) {
-               constituents.add(resource);
-       }
-       
        protected boolean contains(Resource resource) {
                return constituents.contains(resource);
        }
@@ -534,6 +541,8 @@ public class AriesSubsystem implements S
        }
        
        private Region createRegion() throws BundleException {
+               if (isRoot())
+                       return Activator.getRegionDigraph().getRegion(0);
                return 
Activator.getRegionDigraph().createRegion(getSymbolicName() + ';' + 
getVersion());
        }
        
@@ -541,40 +550,40 @@ public class AriesSubsystem implements S
 //             String content = ResourceHelper.getContentAttribute(resource);
 //             String location = getSubsystemId() + '@' + getSymbolicName() + 
'@' + content;
                try {
-                       final RuntimeResource runtimeResource;
+//                     final RuntimeResource runtimeResource;
 //                     final Bundle bundle;
-                       if (transitive) {
+//                     if (transitive) {
                                // Transitive dependencies should be 
provisioned into the highest possible level.
                                // Transitive dependencies do not become a 
constituent.
                                // TODO Assumes root is always the appropriate 
level.
-                               AriesSubsystem subsystem = this;
-                               while (subsystem.parent != null)
-                                       subsystem = subsystem.parent;
-                               runtimeResource = new 
RuntimeResourceFactoryImpl().create(resource, null, subsystem);
+//                             AriesSubsystem subsystem = this;
+//                             while (subsystem.parent != null)
+//                                     subsystem = subsystem.parent;
+                               RuntimeResource runtimeResource = new 
RuntimeResourceFactoryImpl().create(resource, null, this);
                                runtimeResource.install(coordination);
-                               subsystem.constituents.add(runtimeResource);
+//                             subsystem.constituents.add(runtimeResource);
 //                             bundle = 
subsystem.region.installBundle(location, new URL(content).openStream());
-                       }
-                       else if (region == null) {
+//                     }
+//                     else if (region == null) {
                                // Feature resources should be provisioned into 
the parent, unless the parent is also a feature.
                                // TODO Assumes parent is always highest 
possible level.
 //                             AriesSubsystem subsystem = this.parent;
 //                             while (subsystem.region == null)
 //                                     subsystem = subsystem.parent;
-                               runtimeResource = new 
RuntimeResourceFactoryImpl().create(resource, null, this);
-                               runtimeResource.install(coordination);
+//                             runtimeResource = new 
RuntimeResourceFactoryImpl().create(resource, null, this);
+//                             runtimeResource.install(coordination);
 //                             bundle = 
subsystem.region.installBundle(location, new URL(content).openStream());
                                // Features retain their constituents.
-                               constituents.add(runtimeResource);
-                       }
-                       else {
+//                             constituents.add(runtimeResource);
+//                     }
+//                     else {
                                // Constituent (non-transitive) resources must 
be provisioned into the owning subsystem, except for features.
                                // We know this isn't a feature because the 
region was not null.
-                               runtimeResource = new 
RuntimeResourceFactoryImpl().create(resource, null, this);
-                               runtimeResource.install(coordination);
+//                             runtimeResource = new 
RuntimeResourceFactoryImpl().create(resource, null, this);
+//                             runtimeResource.install(coordination);
 //                             bundle = region.installBundle(location, new 
URL(content).openStream());
-                               constituents.add(runtimeResource);
-                       }
+//                             constituents.add(runtimeResource);
+//                     }
 //                     coordination.addParticipant(new Participant() {
 //                             public void ended(Coordination coordination) 
throws Exception {
 //                                     // noop
@@ -610,7 +619,7 @@ public class AriesSubsystem implements S
                DeployedContentHeader contentHeader = 
manifest.getDeployedContent();
                for (DeployedContent content : 
contentHeader.getDeployedContents()) {
                        Collection<Capability> capabilities = 
environment.findProviders(
-                                       new OsgiIdentityRequirement(null, 
content.getName(), content.getDeployedVersion(), content.getNamespace()));
+                                       new 
OsgiIdentityRequirement(content.getName(), content.getDeployedVersion(), 
content.getNamespace(), false));
                        if (capabilities.isEmpty())
                                throw new SubsystemException("Subsystem content 
resource does not exist: " + content.getName() + ";version=" + 
content.getDeployedVersion());
                        Resource resource = 
capabilities.iterator().next().getResource();
@@ -626,7 +635,7 @@ public class AriesSubsystem implements S
                if (resourceHeader != null) {
                        for (ProvisionedResource content : 
resourceHeader.getProvisionedResources()) {
                                Collection<Capability> capabilities = 
environment.findProviders(
-                                               new 
OsgiIdentityRequirement(null, content.getName(), content.getDeployedVersion(), 
content.getNamespace()));
+                                               new 
OsgiIdentityRequirement(content.getName(), content.getDeployedVersion(), 
content.getNamespace(), true));
                                if (capabilities.isEmpty())
                                        throw new SubsystemException("Subsystem 
content resource does not exist: " + content.getName() + ";version=" + 
content.getDeployedVersion());
                                Resource resource = 
capabilities.iterator().next().getResource();
@@ -683,11 +692,17 @@ public class AriesSubsystem implements S
                        return;
                }
                if (isApplication()) {
+                       // TODO Implement import isolation policy for 
applications.
+                       // Applications have an implicit import policy equating 
to "import everything that I require", which is not the same as features.
+                       // This must be computed from the application 
requirements and will be done using the Wires returned by the Resolver, when 
one is available.
                        region.connectRegion(
                                        parent.getRegion(), 
                                        
region.getRegionDigraph().createRegionFilterBuilder().allowAll(RegionFilter.VISIBLE_ALL_NAMESPACE).build());
                }
-               // TODO Implement import isolation policy for composites.
+               else if (isComposite()) {
+                       // TODO Implement import isolation policy for 
composites.
+                       // Composites specify an explicit import policy in 
their subsystem and deployment manifests.
+               }
        }
        
 //     private void start(Resource resource, Coordination coordination) throws 
BundleException {

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/OsgiIdentityRequirement.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/OsgiIdentityRequirement.java?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/OsgiIdentityRequirement.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/OsgiIdentityRequirement.java
 Thu Aug 18 00:02:31 2011
@@ -17,12 +17,12 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.aries.subsystem.core.archive.SubsystemContentHeader;
 import org.osgi.framework.Constants;
 import org.osgi.framework.Filter;
 import org.osgi.framework.FrameworkUtil;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.Version;
+import org.osgi.framework.VersionRange;
 import org.osgi.framework.wiring.Capability;
 import org.osgi.framework.wiring.Requirement;
 import org.osgi.framework.wiring.Resource;
@@ -30,60 +30,107 @@ import org.osgi.framework.wiring.Resourc
 import org.osgi.service.subsystem.SubsystemException;
 
 public class OsgiIdentityRequirement implements Requirement {
-       public static OsgiIdentityRequirement 
newInstance(SubsystemContentHeader.Content content) {
-               return new OsgiIdentityRequirement(null, content.getName(), 
content.getVersion(), content.getType());
+       private static Filter createFilter(String symbolicName, Version 
version, String type) {
+               return createFilter(
+                               symbolicName,
+                               new StringBuilder()
+                                       .append('(')
+                                       
.append(ResourceConstants.IDENTITY_VERSION_ATTRIBUTE)
+                                       .append('=')
+                                       .append(version)
+                                       .append(')')
+                                       .toString(),
+                               type);
        }
        
-       private final Map<String, String> directives = new HashMap<String, 
String>();
-       private final Filter filter;
-       private final Resource resource;
+       private static Filter createFilter(String symbolicName, VersionRange 
versionRange, String type) {
+               return createFilter(
+                               symbolicName,
+                               
versionRange.toFilterString(ResourceConstants.IDENTITY_VERSION_ATTRIBUTE),
+                               type);
+       }
        
-       public OsgiIdentityRequirement(Resource resource, String symbolicName, 
Version version) {
-               this(resource, symbolicName, version, 
ResourceConstants.IDENTITY_TYPE_BUNDLE);
+       private static Filter createFilter(Resource resource) {
+               Map<String, Object> attributes = 
resource.getCapabilities(ResourceConstants.IDENTITY_NAMESPACE).get(0).getAttributes();
+               String symbolicName = 
String.valueOf(attributes.get(ResourceConstants.IDENTITY_NAMESPACE));
+               Version version = 
Version.parseVersion(String.valueOf(attributes.get(ResourceConstants.IDENTITY_VERSION_ATTRIBUTE)));
+               String type = 
String.valueOf(attributes.get(ResourceConstants.IDENTITY_TYPE_ATTRIBUTE));
+               return createFilter(symbolicName, version, type);
        }
        
-       public OsgiIdentityRequirement(Resource resource, String symbolicName, 
Version version, String type) {
-               this.resource = resource;
-               StringBuilder builder = new StringBuilder("(&(")
+       private static Filter createFilter(String symbolicName, String 
versionFilter, String type) {
+               try {
+                       return 
FrameworkUtil.createFilter(createFilterString(symbolicName, versionFilter, 
type));
+               }
+               catch (InvalidSyntaxException e) {
+                       throw new SubsystemException(e);
+               }
+       }
+       
+       private static String createFilterString(String symbolicName, String 
versionFilter, String type) {
+               return new StringBuilder("(&(")
                        .append(ResourceConstants.IDENTITY_NAMESPACE)
                        .append('=')
                        .append(symbolicName)
-                       .append(")(")
-                       .append(ResourceConstants.IDENTITY_VERSION_ATTRIBUTE)
-                       .append('=')
-                       // TODO This does not take into account version ranges.
-                       .append(version)
-                       .append(")(")
+                       .append(')')
+                       .append(versionFilter)
+                       .append('(')
                        .append(ResourceConstants.IDENTITY_TYPE_ATTRIBUTE)
                        .append('=')
                        .append(type)
-                       .append("))");
-               try {
-                       filter = FrameworkUtil.createFilter(builder.toString());
-               }
-               catch (InvalidSyntaxException e) {
-                       throw new SubsystemException(e);
-               }
+                       .append("))").toString();
+       }
+       
+       private final Map<String, String> directives = new HashMap<String, 
String>();
+       private final Filter filter;
+       private final Resource resource;
+       private final boolean transitive;
+       
+       public OsgiIdentityRequirement(String symbolicName, VersionRange 
versionRange, String type, boolean transitive) {
+               this(createFilter(symbolicName, versionRange, type), null, 
transitive);
+       }
+       
+       public OsgiIdentityRequirement(String symbolicName, Version version, 
String type, boolean transitive) {
+               this(createFilter(symbolicName, version, type), null, 
transitive);
+       }
+       
+       public OsgiIdentityRequirement(Resource resource, boolean transitive) {
+               this(createFilter(resource), resource, transitive);
+       }
+       
+       private OsgiIdentityRequirement(Filter filter, Resource resource, 
boolean transitive) {
+               this.filter = filter;
+               this.resource = resource;
+               this.transitive = transitive;
                directives.put(ResourceConstants.IDENTITY_SINGLETON_DIRECTIVE, 
Boolean.FALSE.toString());
                directives.put(Constants.EFFECTIVE_DIRECTIVE, 
Constants.EFFECTIVE_RESOLVE);
        }
 
+       @Override
        public Map<String, Object> getAttributes() {
                return Collections.emptyMap();
        }
 
+       @Override
        public Map<String, String> getDirectives() {
                return Collections.unmodifiableMap(directives);
        }
 
+       @Override
        public String getNamespace() {
                return ResourceConstants.IDENTITY_NAMESPACE;
        }
 
+       @Override
        public Resource getResource() {
                return resource;
        }
+       
+       public boolean isTransitiveDependency() {
+               return transitive;
+       }
 
+       @Override
        public boolean matches(Capability capability) {
                if (capability == null) return false;
                if (!capability.getNamespace().equals(getNamespace())) return 
false;
@@ -91,5 +138,4 @@ public class OsgiIdentityRequirement imp
                // TODO Check directives.
                return true;
        }
-
 }

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/obr/SubsystemEnvironment.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/obr/SubsystemEnvironment.java?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/obr/SubsystemEnvironment.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/obr/SubsystemEnvironment.java
 Thu Aug 18 00:02:31 2011
@@ -111,7 +111,7 @@ public class SubsystemEnvironment implem
        
        private void findContentProviders(Collection<Capability> capabilities, 
OsgiIdentityRequirement requirement) {
                findArchiveProviders(capabilities, requirement);
-               findRepositoryServiceProviders(capabilities, requirement, true);
+               findRepositoryServiceProviders(capabilities, requirement, 
!requirement.isTransitiveDependency());
        }
        
        private void findFeatureContentProviders(Collection<Capability> 
capabilities, OsgiIdentityRequirement requirement) {
@@ -149,7 +149,6 @@ public class SubsystemEnvironment implem
                                if (content)
                                        resources.add(capability.getResource());
                        }
-                       
capabilities.addAll(repository.findProviders(requirement));
                }
        }
        

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/resource/BundleRuntimeResource.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/resource/BundleRuntimeResource.java?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/resource/BundleRuntimeResource.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/resource/BundleRuntimeResource.java
 Thu Aug 18 00:02:31 2011
@@ -36,12 +36,27 @@ public class BundleRuntimeResource exten
 
        @Override
        protected void doInstall(Coordination coordination) throws 
BundleException, IOException {
-               URL content = subsystem.getEnvironment().getContent(resource);
                AriesSubsystem subsystem = this.subsystem;
-               if (subsystem.isFeature()) {
+               URL content = subsystem.getEnvironment().getContent(resource);
+               if (subsystem.isTransitive(resource)) {
+                       // Transitive dependencies should be provisioned into 
the highest possible level.
+                       // Transitive dependencies become constituents of the 
susbsytem into which they were provisioned.
+                       // TODO Assumes root is always the appropriate level.
+                       while (subsystem.getParent() != null)
+                               subsystem = subsystem.getParent();
+                       subsystem.addConstituent(this);
+               }
+               else if (subsystem.isFeature()) {
                        // Feature resources should be provisioned into the 
first parent that's not a feature.
+                       // Feature resources become constituents of the feature.
                        while (subsystem.getRegion() == null)
                                subsystem = subsystem.getParent();
+                       this.subsystem.addConstituent(this);
+               }
+               else {
+                       // Application and composite resources are provisioned 
into the application or composite;
+                       // Application and composite resources become 
constituents of the application or composite.
+                       subsystem.addConstituent(this);
                }
                String location = subsystem.getSubsystemId() + '@' + 
subsystem.getSymbolicName() + '@' + content;
                bundle = subsystem.getRegion().installBundle(location, 
content.openStream());
@@ -53,6 +68,7 @@ public class BundleRuntimeResource exten
                        }
 
                        public void failed(Coordination coordination) throws 
Exception {
+                               // TODO Remove the constituent?
                                bundle.uninstall();
                        }
                });

Modified: aries/trunk/subsystem/subsystem-itests/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/pom.xml?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/pom.xml (original)
+++ aries/trunk/subsystem/subsystem-itests/pom.xml Thu Aug 18 00:02:31 2011
@@ -13,7 +13,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.aries</groupId>
-        <artifactId>java5-parent</artifactId>
+        <artifactId>java6-parent</artifactId>
         <version>0.4</version>
         <relativePath />
     </parent>

Modified: 
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/FeatureTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/FeatureTest.java?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/FeatureTest.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/FeatureTest.java
 Thu Aug 18 00:02:31 2011
@@ -74,7 +74,7 @@ public class FeatureTest extends Subsyst
                try {
                        
assertSymbolicName("org.apache.aries.subsystem.feature1", subsystem);
                        assertVersion("1.0.0", subsystem);
-                       assertConstituents(2, subsystem);
+                       assertConstituents(3, subsystem);
                        // TODO Test internal events for installation.
                        startSubsystem(subsystem);
                        // TODO Test internal events for starting.

Modified: 
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java
 Thu Aug 18 00:02:31 2011
@@ -101,7 +101,7 @@ public abstract class SubsystemTest exte
                                mavenBundle("org.apache.aries.subsystem", 
"org.apache.aries.subsystem.executor"),
 //                             
org.ops4j.pax.exam.container.def.PaxRunnerOptions.vmOption("-Xdebug 
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"),
                                PaxRunnerOptions.rawPaxRunnerOption("config", 
"classpath:ss-runner.properties"),
-                               equinox().version("3.8.0.v20110621"));
+                               equinox().version("3.8.0-SNAPSHOT"));
                options = updateOptions(options);
                return options;
        }

Modified: 
aries/trunk/subsystem/subsystem-itests/src/test/java/org/ops4j/pax/runner/platform/equinox/internal/SsActivator.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/ops4j/pax/runner/platform/equinox/internal/SsActivator.java?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-itests/src/test/java/org/ops4j/pax/runner/platform/equinox/internal/SsActivator.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-itests/src/test/java/org/ops4j/pax/runner/platform/equinox/internal/SsActivator.java
 Thu Aug 18 00:02:31 2011
@@ -27,6 +27,7 @@ public class SsActivator extends Abstrac
             new EquinoxPlatformBuilder( bundleContext, "3.7.0.V20110110" ),
             new EquinoxPlatformBuilder( bundleContext, "3.7.0.V20110221" ),
             new EquinoxPlatformBuilder( bundleContext, "3.8.0.V20110621" ),
+            new EquinoxPlatformBuilder( bundleContext, "3.8.0-SNAPSHOT" ),
             new EquinoxPlatformBuilderSnapshot( bundleContext )
         };
     }

Added: 
aries/trunk/subsystem/subsystem-itests/src/test/resources/META-INF/platform-equinox/definition-3.8.0-SNAPSHOT.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/META-INF/platform-equinox/definition-3.8.0-SNAPSHOT.xml?rev=1158976&view=auto
==============================================================================
--- 
aries/trunk/subsystem/subsystem-itests/src/test/resources/META-INF/platform-equinox/definition-3.8.0-SNAPSHOT.xml
 (added)
+++ 
aries/trunk/subsystem/subsystem-itests/src/test/resources/META-INF/platform-equinox/definition-3.8.0-SNAPSHOT.xml
 Thu Aug 18 00:02:31 2011
@@ -0,0 +1,8 @@
+<platform>
+
+  <name>Equinox 3.8.0</name>
+  <system>mvn:org.eclipse/osgi/3.8.0-SNAPSHOT</system>
+
+  <profile name="minimal" default="true"/>
+
+</platform>

Modified: 
aries/trunk/subsystem/subsystem-itests/src/test/resources/feature1/OSGI-INF/SUBSYSTEM.MF
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/feature1/OSGI-INF/SUBSYSTEM.MF?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-itests/src/test/resources/feature1/OSGI-INF/SUBSYSTEM.MF
 (original)
+++ 
aries/trunk/subsystem/subsystem-itests/src/test/resources/feature1/OSGI-INF/SUBSYSTEM.MF
 Thu Aug 18 00:02:31 2011
@@ -4,5 +4,5 @@ Subsystem-SymbolicName: org.apache.aries
 Subsystem-Version: 1.0.0
 Subsystem-Name: %feature1.name
 Subsystem-Description: %feature1.description
-Subsystem-Content: 
org.apache.aries.subsystem.itests.tb1;version=1.0.0,derby;version=10.5.3000000.802917
+Subsystem-Content: 
org.apache.aries.subsystem.itests.tb1,derby;version=10.5.0,org.apache.felix.fileinstall;version="[2.0,3.0)"
 Subsystem-Type: osgi.feature

Modified: 
aries/trunk/subsystem/subsystem-itests/src/test/resources/ss-runner.properties
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/ss-runner.properties?rev=1158976&r1=1158975&r2=1158976&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-itests/src/test/resources/ss-runner.properties 
(original)
+++ 
aries/trunk/subsystem/subsystem-itests/src/test/resources/ss-runner.properties 
Thu Aug 18 00:02:31 2011
@@ -66,6 +66,7 @@ platform.equinox.SNAPSHOT=org.ops4j.pax.
 
platform.equinox.3.7.0.V20110110=org.ops4j.pax.runner.platform.equinox.internal.SsActivator
 
platform.equinox.3.7.0.V20110221=org.ops4j.pax.runner.platform.equinox.internal.SsActivator
 
platform.equinox.3.8.0.V20110621=org.ops4j.pax.runner.platform.equinox.internal.SsActivator
+platform.equinox.3.8.0-SNAPSHOT=org.ops4j.pax.runner.platform.equinox.internal.SsActivator
 # Felix
 platform.felix.1.0.0=org.ops4j.pax.runner.platform.felix.internal.Activator
 platform.felix.1.0.1=org.ops4j.pax.runner.platform.felix.internal.Activator


Reply via email to