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