You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by jw...@apache.org on 2012/05/07 22:37:59 UTC
svn commit: r1335243 [2/2] - in /aries/trunk/subsystem: subsystem-core/
subsystem-core/src/main/java/org/apache/aries/subsystem/core/
subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/
subsystem-core/src/main/java/org/apache/aries/su...
Added: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/RawSubsystemResource.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/RawSubsystemResource.java?rev=1335243&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/RawSubsystemResource.java (added)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/RawSubsystemResource.java Mon May 7 20:37:56 2012
@@ -0,0 +1,319 @@
+package org.apache.aries.subsystem.core.internal;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.jar.Manifest;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.aries.subsystem.core.archive.DeploymentManifest;
+import org.apache.aries.subsystem.core.archive.Header;
+import org.apache.aries.subsystem.core.archive.ImportPackageHeader;
+import org.apache.aries.subsystem.core.archive.RequireBundleHeader;
+import org.apache.aries.subsystem.core.archive.RequireCapabilityHeader;
+import org.apache.aries.subsystem.core.archive.SubsystemContentHeader;
+import org.apache.aries.subsystem.core.archive.SubsystemManifest;
+import org.apache.aries.subsystem.core.archive.SubsystemSymbolicNameHeader;
+import org.apache.aries.subsystem.core.archive.SubsystemVersionHeader;
+import org.apache.aries.util.filesystem.FileSystem;
+import org.apache.aries.util.filesystem.IDirectory;
+import org.apache.aries.util.filesystem.IFile;
+import org.apache.aries.util.manifest.ManifestProcessor;
+import org.osgi.framework.Version;
+import org.osgi.framework.namespace.BundleNamespace;
+import org.osgi.framework.namespace.PackageNamespace;
+import org.osgi.resource.Capability;
+import org.osgi.resource.Requirement;
+import org.osgi.resource.Resource;
+import org.osgi.service.repository.Repository;
+import org.osgi.service.resolver.ResolutionException;
+import org.osgi.service.subsystem.SubsystemConstants;
+
+public class RawSubsystemResource implements Resource {
+ private static final Pattern PATTERN = Pattern.compile("([^@]+)(?:@(.+))?.esa");
+
+ private static SubsystemManifest computeExistingSubsystemManifest(IDirectory directory) throws IOException {
+ Manifest manifest = ManifestProcessor.obtainManifestFromAppDir(directory, "OSGI-INF/SUBSYSTEM.MF");
+ if (manifest == null)
+ return null;
+ return new SubsystemManifest(manifest);
+ }
+
+ private static SubsystemManifest computeNewSubsystemManifest() {
+ return new SubsystemManifest.Builder().build();
+ }
+
+ private static SubsystemManifest computeSubsystemManifest(IDirectory directory) throws IOException {
+ SubsystemManifest result = computeExistingSubsystemManifest(directory);
+ if (result == null)
+ result = computeNewSubsystemManifest();
+ return result;
+ }
+
+ private static String convertFileToLocation(IFile file) throws MalformedURLException {
+ String result = convertFileNameToLocation(file.getName());
+ if (result == null)
+ result = file.toURL().toString();
+ return result;
+ }
+
+ private static String convertFileNameToLocation(String fileName) {
+ Matcher matcher = PATTERN.matcher(fileName);
+ if (!matcher.matches())
+ return null;
+ String version = matcher.group(2);
+ return new SubsystemUri(matcher.group(1), version == null ? null
+ : Version.parseVersion(version), null).toString();
+ }
+
+ private final List<Capability> capabilities;
+ private final DeploymentManifest deploymentManifest;
+ private final IDirectory directory;
+ private final Repository localRepository;
+ private final Location location;
+ private final List<Requirement> requirements;
+ private final Collection<Resource> resources;
+ private final SubsystemManifest subsystemManifest;
+
+ public RawSubsystemResource(String location, InputStream content) throws URISyntaxException, IOException, UnsupportedOperationException, ResolutionException {
+ this.location = new Location(location);
+ if (content == null)
+ content = this.location.open();
+ directory = FileSystem.getFSRoot(content);
+ resources = computeResources();
+ localRepository = computeLocalRepository();
+ SubsystemManifest manifest = computeSubsystemManifest(directory);
+ manifest = computeSubsystemManifestBeforeRequirements(manifest);
+ requirements = computeRequirements(manifest);
+ subsystemManifest = computeSubsystemManifestAfterRequirements(manifest);
+ capabilities = computeCapabilities();
+ deploymentManifest = computeDeploymentManifest();
+ }
+
+ @Override
+ public List<Capability> getCapabilities(String namespace) {
+ if (namespace == null)
+ return Collections.unmodifiableList(capabilities);
+ ArrayList<Capability> result = new ArrayList<Capability>(capabilities.size());
+ for (Capability capability : capabilities)
+ if (namespace.equals(capability.getNamespace()))
+ result.add(capability);
+ result.trimToSize();
+ return Collections.unmodifiableList(result);
+ }
+
+ public DeploymentManifest getDeploymentManifest() {
+ return deploymentManifest;
+ }
+
+ public Repository getLocalRepository() {
+ return localRepository;
+ }
+
+ public Location getLocation() {
+ return location;
+ }
+
+ @Override
+ public List<Requirement> getRequirements(String namespace) {
+ if (namespace == null)
+ return Collections.unmodifiableList(requirements);
+ ArrayList<Requirement> result = new ArrayList<Requirement>(requirements.size());
+ for (Requirement requirement : requirements)
+ if (namespace.equals(requirement.getNamespace()))
+ result.add(requirement);
+ result.trimToSize();
+ return Collections.unmodifiableList(result);
+ }
+
+ public Collection<Resource> getResources() {
+ return Collections.unmodifiableCollection(resources);
+ }
+
+ public SubsystemManifest getSubsystemManifest() {
+ return subsystemManifest;
+ }
+
+ private void addHeader(SubsystemManifest.Builder builder, Header<?> header) {
+ if (header == null)
+ return;
+ builder.header(header);
+ }
+
+ private void addImportPackageHeader(SubsystemManifest.Builder builder) {
+ addHeader(builder, computeImportPackageHeader());
+ }
+
+ private void addRequireBundleHeader(SubsystemManifest.Builder builder) {
+ addHeader(builder, computeRequireBundleHeader());
+ }
+
+ private void addRequireCapabilityHeader(SubsystemManifest.Builder builder) {
+ addHeader(builder, computeRequireCapabilityHeader());
+ }
+
+ private void addSubsystemContentHeader(SubsystemManifest.Builder builder, SubsystemManifest manifest) {
+ SubsystemContentHeader header = computeSubsystemContentHeader(manifest);
+ if (header == null)
+ return;
+ addHeader(builder, header);
+ }
+
+ private void addSubsystemSymbolicNameHeader(SubsystemManifest.Builder builder, SubsystemManifest manifest) {
+ addHeader(builder, computeSubsystemSymbolicNameHeader(manifest));
+ }
+
+ private void addSubsystemVersionHeader(SubsystemManifest.Builder builder, SubsystemManifest manifest) {
+ addHeader(builder, computeSubsystemVersionHeader(manifest));
+ }
+
+ private List<Capability> computeCapabilities() {
+ return subsystemManifest.toCapabilities(this);
+ }
+
+ private DeploymentManifest computeDeploymentManifest() throws IOException {
+ return computeExistingDeploymentManifest();
+ }
+
+ private DeploymentManifest computeExistingDeploymentManifest() throws IOException {
+ Manifest manifest = ManifestProcessor.obtainManifestFromAppDir(directory, "OSGI-INF/DEPLOYMENT.MF");
+ if (manifest == null)
+ return null;
+ return new DeploymentManifest(manifest);
+ }
+
+ private ImportPackageHeader computeImportPackageHeader() {
+ if (requirements.isEmpty())
+ return null;
+ ArrayList<ImportPackageHeader.Clause> clauses = new ArrayList<ImportPackageHeader.Clause>(requirements.size());
+ for (Requirement requirement : requirements) {
+ if (!PackageNamespace.PACKAGE_NAMESPACE.equals(requirement.getNamespace()))
+ continue;
+ clauses.add(new ImportPackageHeader.Clause(requirement));
+ }
+ if (clauses.isEmpty())
+ return null;
+ clauses.trimToSize();
+ return new ImportPackageHeader(clauses);
+ }
+
+ private Repository computeLocalRepository() {
+ return new LocalRepository(resources);
+ }
+
+ private RequireBundleHeader computeRequireBundleHeader() {
+ if (requirements.isEmpty())
+ return null;
+ ArrayList<RequireBundleHeader.Clause> clauses = new ArrayList<RequireBundleHeader.Clause>(requirements.size());
+ for (Requirement requirement : requirements) {
+ if (!BundleNamespace.BUNDLE_NAMESPACE.equals(requirement.getNamespace()))
+ continue;
+ clauses.add(new RequireBundleHeader.Clause(requirement));
+ }
+ if (clauses.isEmpty())
+ return null;
+ clauses.trimToSize();
+ return new RequireBundleHeader(clauses);
+ }
+
+ private RequireCapabilityHeader computeRequireCapabilityHeader() {
+ if (requirements.isEmpty())
+ return null;
+ ArrayList<RequireCapabilityHeader.Clause> clauses = new ArrayList<RequireCapabilityHeader.Clause>();
+ for (Requirement requirement : requirements) {
+ if (requirement.getNamespace().startsWith("osgi."))
+ continue;
+ clauses.add(new RequireCapabilityHeader.Clause(requirement));
+ }
+ if (clauses.isEmpty())
+ return null;
+ clauses.trimToSize();
+ return new RequireCapabilityHeader(clauses);
+ }
+
+ private List<Requirement> computeRequirements(SubsystemManifest manifest) throws ResolutionException {
+ if (isComposite(manifest))
+ return manifest.toRequirements(this);
+ SubsystemContentHeader header = manifest.getSubsystemContentHeader();
+ if (header == null)
+ return Collections.emptyList();
+ // TODO Need the system repository in here. Preferred provider as well?
+ LocalRepository localRepo = new LocalRepository(resources);
+ RepositoryServiceRepository serviceRepo = new RepositoryServiceRepository(Activator.getInstance().getBundleContext());
+ CompositeRepository compositeRepo = new CompositeRepository(localRepo, serviceRepo);
+ List<Requirement> requirements = header.toRequirements();
+ List<Resource> resources = new ArrayList<Resource>(requirements.size());
+ for (Requirement requirement : requirements) {
+ Collection<Capability> capabilities = compositeRepo.findProviders(requirement);
+ if (capabilities.isEmpty())
+ continue;
+ resources.add(capabilities.iterator().next().getResource());
+ }
+ return new DependencyCalculator(resources).calculateDependencies();
+ }
+
+ private Collection<Resource> computeResources() throws IOException, URISyntaxException, UnsupportedOperationException, ResolutionException {
+ List<IFile> files = directory.listFiles();
+ if (files.isEmpty())
+ return Collections.emptyList();
+ ArrayList<Resource> result = new ArrayList<Resource>(files.size());
+ for (IFile file : directory.listFiles()) {
+ String name = file.getName();
+ if (name.endsWith(".jar"))
+ result.add(BundleResource.newInstance(file.toURL()));
+ else if (name.endsWith(".esa"))
+ result.add(new RawSubsystemResource(convertFileToLocation(file), file.open()));
+ }
+ result.trimToSize();
+ return result;
+ }
+
+ private SubsystemContentHeader computeSubsystemContentHeader(SubsystemManifest manifest) {
+ SubsystemContentHeader header = manifest.getSubsystemContentHeader();
+ if (header == null && !resources.isEmpty())
+ header = new SubsystemContentHeader(resources);
+ return header;
+ }
+
+ private SubsystemManifest computeSubsystemManifestAfterRequirements(SubsystemManifest manifest) {
+ if (isComposite(manifest))
+ return manifest;
+ SubsystemManifest.Builder builder = new SubsystemManifest.Builder().manifest(manifest);
+ addImportPackageHeader(builder);
+ addRequireBundleHeader(builder);
+ addRequireCapabilityHeader(builder);
+ return builder.build();
+ }
+
+ private SubsystemManifest computeSubsystemManifestBeforeRequirements(SubsystemManifest manifest) {
+ SubsystemManifest.Builder builder = new SubsystemManifest.Builder().manifest(manifest);
+ addSubsystemSymbolicNameHeader(builder, manifest);
+ addSubsystemVersionHeader(builder, manifest);
+ addSubsystemContentHeader(builder, manifest);
+ return builder.build();
+ }
+
+ private SubsystemSymbolicNameHeader computeSubsystemSymbolicNameHeader(SubsystemManifest manifest) {
+ SubsystemSymbolicNameHeader header = manifest.getSubsystemSymbolicNameHeader();
+ if (header == null)
+ header = new SubsystemSymbolicNameHeader(location.getSymbolicName());
+ return header;
+ }
+
+ private SubsystemVersionHeader computeSubsystemVersionHeader(SubsystemManifest manifest) {
+ SubsystemVersionHeader header = manifest.getSubsystemVersionHeader();
+ if (header.getVersion().equals(Version.emptyVersion) && location.getVersion() != null)
+ header = new SubsystemVersionHeader(location.getVersion());
+ return header;
+ }
+
+ private boolean isComposite(SubsystemManifest manifest) {
+ return SubsystemConstants.SUBSYSTEM_TYPE_COMPOSITE.equals(manifest.getSubsystemTypeHeader().getType());
+ }
+}
Added: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Region.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Region.java?rev=1335243&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Region.java (added)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Region.java Mon May 7 20:37:56 2012
@@ -0,0 +1,41 @@
+package org.apache.aries.subsystem.core.internal;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+import org.osgi.resource.Capability;
+import org.osgi.resource.Requirement;
+import org.osgi.service.repository.Repository;
+
+public class Region implements Repository {
+ private final AriesSubsystem scopedSubsystem;
+ private final Collection<AriesSubsystem> subsystems = new HashSet<AriesSubsystem>();
+
+ public Region(AriesSubsystem scopedSubsystem) {
+ if (!scopedSubsystem.isApplication() || !scopedSubsystem.isComposite())
+ throw new IllegalArgumentException("A region may only start with a scoped subsystem");
+ this.scopedSubsystem = scopedSubsystem;
+ subsystems.add(scopedSubsystem);
+ }
+
+ @Override
+ public Map<Requirement, Collection<Capability>> findProviders(
+ Collection<? extends Requirement> requirements) {
+ Map<Requirement, Collection<Capability>> result = new HashMap<Requirement, Collection<Capability>>();
+ for (Requirement requirement : requirements)
+ result.put(requirement, findProviders(requirement));
+ return result;
+ }
+
+ public Collection<Capability> findProviders(Requirement requirement) {
+ Collection<Capability> result = new HashSet<Capability>();
+ findProviders(requirement, result);
+ return result;
+ }
+
+ private void findProviders(Requirement requirement, Collection<Capability> capabilities) {
+
+ }
+}
Copied: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceHelper.java (from r1330054, aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/ResourceHelper.java)
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceHelper.java?p2=aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceHelper.java&p1=aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/ResourceHelper.java&r1=1330054&r2=1335243&rev=1335243&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/ResourceHelper.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceHelper.java Mon May 7 20:37:56 2012
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.aries.subsystem.core;
+package org.apache.aries.subsystem.core.internal;
import static org.apache.aries.application.utils.AppConstants.LOG_ENTRY;
import static org.apache.aries.application.utils.AppConstants.LOG_EXIT;
Copied: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResource.java (from r1330565, aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/resource/tmp/SubsystemResource.java)
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResource.java?p2=aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResource.java&p1=aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/resource/tmp/SubsystemResource.java&r1=1330565&r2=1335243&rev=1335243&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/resource/tmp/SubsystemResource.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResource.java Mon May 7 20:37:56 2012
@@ -1,356 +1,340 @@
-package org.apache.aries.subsystem.core.resource.tmp;
+package org.apache.aries.subsystem.core.internal;
import java.io.IOException;
import java.io.InputStream;
-import java.net.MalformedURLException;
import java.net.URISyntaxException;
-import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
-import java.util.jar.Manifest;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import java.util.Map;
+import org.apache.aries.subsystem.core.archive.DeployedContentHeader;
import org.apache.aries.subsystem.core.archive.DeploymentManifest;
-import org.apache.aries.subsystem.core.archive.Header;
-import org.apache.aries.subsystem.core.archive.ImportPackageHeader;
-import org.apache.aries.subsystem.core.archive.RequireBundleHeader;
-import org.apache.aries.subsystem.core.archive.RequireCapabilityHeader;
+import org.apache.aries.subsystem.core.archive.ProvisionResourceHeader;
import org.apache.aries.subsystem.core.archive.SubsystemContentHeader;
import org.apache.aries.subsystem.core.archive.SubsystemManifest;
-import org.apache.aries.subsystem.core.archive.SubsystemSymbolicNameHeader;
-import org.apache.aries.subsystem.core.archive.SubsystemTypeHeader;
-import org.apache.aries.subsystem.core.archive.SubsystemVersionHeader;
-import org.apache.aries.subsystem.core.internal.Activator;
-import org.apache.aries.subsystem.core.internal.RepositoryServiceRepository;
-import org.apache.aries.subsystem.core.internal.SubsystemUri;
-import org.apache.aries.subsystem.core.resource.BundleResource;
-import org.apache.aries.subsystem.core.resource.CompositeRepository;
-import org.apache.aries.subsystem.core.resource.DependencyCalculator;
-import org.apache.aries.subsystem.core.resource.LocalRepository;
-import org.apache.aries.util.filesystem.FileSystem;
-import org.apache.aries.util.filesystem.IDirectory;
-import org.apache.aries.util.filesystem.IFile;
-import org.apache.aries.util.manifest.ManifestProcessor;
-import org.osgi.framework.Version;
-import org.osgi.framework.namespace.BundleNamespace;
-import org.osgi.framework.namespace.PackageNamespace;
+import org.osgi.framework.wiring.BundleRevision;
import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
import org.osgi.resource.Resource;
+import org.osgi.resource.Wire;
+import org.osgi.resource.Wiring;
+import org.osgi.service.repository.Repository;
+import org.osgi.service.resolver.HostedCapability;
import org.osgi.service.resolver.ResolutionException;
+import org.osgi.service.resolver.ResolveContext;
+import org.osgi.service.subsystem.SubsystemConstants;
import org.osgi.service.subsystem.SubsystemException;
-public abstract class SubsystemResource implements Resource {
- protected static class Location {
- private final String symbolicName;
- private final URL url;
- private final String value;
- private final Version version;
-
- public Location(String location) throws MalformedURLException, URISyntaxException {
- value = location;
- SubsystemUri uri = null;
- if (location.startsWith("subsystem://"))
- uri = new SubsystemUri(location);
- symbolicName = uri == null ? null : uri.getSymbolicName();
- url = uri == null ? null : uri.getURL();
- version = uri == null ? null : uri.getVersion();
- }
-
- public String getSymbolicName() {
- return symbolicName;
- }
-
- public String getValue() {
- return value;
- }
-
- public Version getVersion() {
- return version;
- }
-
- public InputStream open() throws IOException {
- return url == null ? new URL(value).openStream() : url.openStream();
- }
+public class SubsystemResource implements Resource {
+ private final DeploymentManifest deploymentManifest;
+ private final Collection<Resource> installableContent = new HashSet<Resource>();
+ private final Collection<Resource> installableDependencies = new HashSet<Resource>();
+ private final Collection<Resource> mandatoryResources = new HashSet<Resource>();
+ private final Collection<Resource> optionalResources = new HashSet<Resource>();
+ private final AriesSubsystem parent;
+ private final Repository preferredProviderRepository;
+ private final RawSubsystemResource resource;
+ private final Collection<Resource> sharedContent = new HashSet<Resource>();
+ private final Collection<Resource> sharedDependencies = new HashSet<Resource>();
+
+ public SubsystemResource(String location, InputStream content, AriesSubsystem parent) throws UnsupportedOperationException, URISyntaxException, IOException, ResolutionException {
+ this(new RawSubsystemResource(location, content), parent);
+ }
+
+ public SubsystemResource(RawSubsystemResource resource, AriesSubsystem parent) throws IOException {
+ this.parent = parent;
+ this.resource = resource;
+ preferredProviderRepository = new PreferredProviderRepository(this);
+ deploymentManifest = computeDeploymentManifest();
}
-
- protected static final Pattern PATTERN = Pattern.compile("([^@]+)(?:@(.+))?.esa");
-
- public static SubsystemResource newInstance(String location, InputStream content) throws IOException, URISyntaxException, ResolutionException {
- Location loc = new Location(location);
- if (content == null)
- content = loc.open();
- IDirectory directory = FileSystem.getFSRoot(content);
- SubsystemManifest manifest = computeSubsystemManifest(directory);
- String type = manifest.getSubsystemTypeHeader().getType();
- // TODO Make an enum out of the types?
- if (SubsystemTypeHeader.TYPE_APPLICATION.equals(type))
- return new ApplicationResource(loc, directory, manifest);
- if (SubsystemTypeHeader.TYPE_COMPOSITE.equals(type))
- return new CompositeResource(loc, directory, manifest);
- if (SubsystemTypeHeader.TYPE_FEATURE.equals(type))
- return new FeatureResource(loc, directory, manifest);
- throw new SubsystemException("Unsupported subsystem type: " + type);
- }
-
- protected static SubsystemManifest computeExistingSubsystemManifest(IDirectory directory) throws IOException {
- Manifest manifest = ManifestProcessor.obtainManifestFromAppDir(directory, "OSGI-INF/SUBSYSTEM.MF");
- if (manifest == null)
- return null;
- return new SubsystemManifest(manifest);
+
+ @Override
+ public List<Capability> getCapabilities(String namespace) {
+ return resource.getCapabilities(namespace);
}
- protected static SubsystemManifest computeNewSubsystemManifest() {
- return new SubsystemManifest.Builder().build();
+ public DeploymentManifest getDeploymentManifest() {
+ return deploymentManifest;
}
- protected static SubsystemManifest computeSubsystemManifest(IDirectory directory) throws IOException {
- SubsystemManifest result = computeExistingSubsystemManifest(directory);
- if (result == null)
- result = computeNewSubsystemManifest();
- return result;
+ public Collection<Resource> getInstallableContent() {
+ return installableContent;
}
- protected static String convertFileToLocation(IFile file) throws MalformedURLException {
- String result = convertFileNameToLocation(file.getName());
- if (result == null)
- result = file.toURL().toString();
- return result;
+ public Collection<Resource> getInstallableDependencies() {
+ return installableDependencies;
}
- protected static String convertFileNameToLocation(String fileName) {
- Matcher matcher = PATTERN.matcher(fileName);
- if (!matcher.matches())
- return null;
- String version = matcher.group(2);
- return new SubsystemUri(matcher.group(1), version == null ? null
- : Version.parseVersion(version), null).toString();
- }
-
- protected final List<Capability> capabilities;
- protected final DeploymentManifest deploymentManifest;
- protected final IDirectory directory;
- protected final Location location;
- protected final List<Requirement> requirements;
- protected final Collection<Resource> resources;
- protected final SubsystemManifest subsystemManifest;
-
- public SubsystemResource(Location location, IDirectory directory, SubsystemManifest manifest) throws IOException, URISyntaxException, ResolutionException {
- this.location = location;
- this.directory = directory;
- resources = computeResources();
- manifest = computeSubsystemManifestBeforeRequirements(manifest);
- requirements = computeRequirements(manifest);
- subsystemManifest = computeSubsystemManifestAfterRequirements(manifest);
- capabilities = computeCapabilities();
- deploymentManifest = computeDeploymentManifest();
- }
-
- @Override
- public List<Capability> getCapabilities(String namespace) {
- if (namespace == null)
- return Collections.unmodifiableList(capabilities);
- ArrayList<Capability> result = new ArrayList<Capability>(capabilities.size());
- for (Capability capability : capabilities)
- if (namespace.equals(capability.getNamespace()))
- result.add(capability);
- result.trimToSize();
- return Collections.unmodifiableList(result);
+ public Repository getLocalRepository() {
+ return resource.getLocalRepository();
}
- public DeploymentManifest getDeploymentManifest() {
- return deploymentManifest;
+ public String getLocation() {
+ return resource.getLocation().getValue();
}
- public String getLocation() {
- return location.getValue();
+ public AriesSubsystem getParent() {
+ return parent;
}
@Override
public List<Requirement> getRequirements(String namespace) {
- if (namespace == null)
- return Collections.unmodifiableList(requirements);
- ArrayList<Requirement> result = new ArrayList<Requirement>(requirements.size());
- for (Requirement requirement : requirements)
- if (namespace.equals(requirement.getNamespace()))
- result.add(requirement);
- result.trimToSize();
- return Collections.unmodifiableList(result);
+ return resource.getRequirements(namespace);
}
public Collection<Resource> getResources() {
- return resources;
+ return resource.getResources();
}
- public SubsystemManifest getSubsystemManifest() {
- return subsystemManifest;
+ public Collection<Resource> getSharedContent() {
+ return sharedContent;
}
- protected void addHeader(SubsystemManifest.Builder builder, Header<?> header) {
- if (header == null)
- return;
- builder.header(header);
+ public Collection<Resource> getSharedDependencies() {
+ return sharedDependencies;
+ }
+
+ public SubsystemManifest getSubsystemManifest() {
+ return resource.getSubsystemManifest();
}
- protected void addImportPackageHeader(SubsystemManifest.Builder builder) {
- addHeader(builder, computeImportPackageHeader());
+ private void addContentResource(Resource resource) {
+ if (resource == null)
+ return;
+ if (isMandatory(resource))
+ mandatoryResources.add(resource);
+ else
+ optionalResources.add(resource);
+ if (isInstallable(resource))
+ installableContent.add(resource);
+ else
+ sharedContent.add(resource);
+ }
+
+ private boolean addDependencies(Repository repository, Requirement requirement, List<Capability> capabilities) {
+ Map<Requirement, Collection<Capability>> m = repository.findProviders(Collections.singleton(requirement));
+ if (m.containsKey(requirement)) {
+ Collection<Capability> cc = m.get(requirement);
+ // TODO The following check only needs to be done on capabilities from the system repository.
+ addValidCapabilities(cc, capabilities);
+ }
+ return !capabilities.isEmpty();
}
- protected void addRequireBundleHeader(SubsystemManifest.Builder builder) {
- addHeader(builder, computeRequireBundleHeader());
+ private boolean addDependenciesFromContentRepository(Requirement requirement, List<Capability> capabilities) {
+ Repository repository = new ContentRepository(installableContent, sharedContent);
+ return addDependencies(repository, requirement, capabilities);
}
- protected void addRequireCapabilityHeader(SubsystemManifest.Builder builder) {
- addHeader(builder, computeRequireCapabilityHeader());
+ private boolean addDependenciesFromLocalRepository(Requirement requirement, List<Capability> capabilities) {
+ Repository repository = resource.getLocalRepository();
+ return addDependencies(repository, requirement, capabilities);
}
- protected void addSubsystemContentHeader(SubsystemManifest.Builder builder, SubsystemManifest manifest) {
- SubsystemContentHeader header = computeSubsystemContentHeader(manifest);
- if (header == null)
- return;
- addHeader(builder, header);
+ private boolean addDependenciesFromPreferredProviderRepository(Requirement requirement, List<Capability> capabilities) {
+ return addDependencies(preferredProviderRepository, requirement, capabilities);
}
- protected void addSubsystemSymbolicNameHeader(SubsystemManifest.Builder builder, SubsystemManifest manifest) {
- addHeader(builder, computeSubsystemSymbolicNameHeader(manifest));
+ private boolean addDependenciesFromRepositoryServiceRepositories(Requirement requirement, List<Capability> capabilities) {
+ Repository repository = new RepositoryServiceRepository();
+ return addDependencies(repository, requirement, capabilities);
}
- protected void addSubsystemVersionHeader(SubsystemManifest.Builder builder, SubsystemManifest manifest) {
- addHeader(builder, computeSubsystemVersionHeader(manifest));
+ private boolean addDependenciesFromSystemRepository(Requirement requirement, List<Capability> capabilities) {
+ Repository repository = Activator.getInstance().getSystemRepository();
+ return addDependencies(repository, requirement, capabilities);
}
- protected List<Capability> computeCapabilities() {
- return subsystemManifest.toCapabilities(this);
+ private void addDependency(Resource resource) {
+ if (resource == null)
+ return;
+ if (isInstallable(resource))
+ installableDependencies.add(resource);
+ else
+ sharedDependencies.add(resource);
}
- protected DeploymentManifest computeExistingDeploymentManifest() throws IOException {
- Manifest manifest = ManifestProcessor.obtainManifestFromAppDir(directory, "OSGI-INF/DEPLOYMENT.MF");
- if (manifest == null)
- return null;
- return new DeploymentManifest(manifest);
+ private void addValidCapabilities(Collection<Capability> from, Collection<Capability> to) {
+ for (Capability c : from)
+ if (isValid(c))
+ to.add(c);
}
- protected DeploymentManifest computeDeploymentManifest() throws IOException {
- return computeExistingDeploymentManifest();
+ private DeploymentManifest computeExistingDeploymentManifest() throws IOException {
+ return resource.getDeploymentManifest();
}
- protected ImportPackageHeader computeImportPackageHeader() {
- if (requirements.isEmpty())
+ private DeployedContentHeader computeDeployedContentHeader() {
+ Collection<Resource> resources = new HashSet<Resource>();
+ SubsystemContentHeader contentHeader = resource.getSubsystemManifest().getSubsystemContentHeader();
+ if (contentHeader == null)
return null;
- ArrayList<ImportPackageHeader.Clause> clauses = new ArrayList<ImportPackageHeader.Clause>(requirements.size());
- for (Requirement requirement : requirements) {
- if (!PackageNamespace.PACKAGE_NAMESPACE.equals(requirement.getNamespace()))
+ for (SubsystemContentHeader.Content content : contentHeader.getContents()) {
+ OsgiIdentityRequirement requirement = new OsgiIdentityRequirement(
+ content.getName(), content.getVersionRange(),
+ content.getType(), false);
+ Resource resource = findContent(requirement);
+ if (resource == null) {
+ if (content.isMandatory())
+ throw new SubsystemException("Resource does not exist: "+ requirement);
continue;
- clauses.add(new ImportPackageHeader.Clause(requirement));
+ }
+ resources.add(resource);
+ addContentResource(resource);
}
- if (clauses.isEmpty())
- return null;
- clauses.trimToSize();
- return new ImportPackageHeader(clauses);
+ return DeployedContentHeader.newInstance(resources);
}
- protected RequireBundleHeader computeRequireBundleHeader() {
- if (requirements.isEmpty())
- return null;
- ArrayList<RequireBundleHeader.Clause> clauses = new ArrayList<RequireBundleHeader.Clause>(requirements.size());
- for (Requirement requirement : requirements) {
- if (!BundleNamespace.BUNDLE_NAMESPACE.equals(requirement.getNamespace()))
- continue;
- clauses.add(new RequireBundleHeader.Clause(requirement));
- }
- if (clauses.isEmpty())
- return null;
- clauses.trimToSize();
- return new RequireBundleHeader(clauses);
+ private DeploymentManifest computeDeploymentManifest() throws IOException {
+ DeploymentManifest result = computeExistingDeploymentManifest();
+ if (result != null)
+ return result;
+ result = new DeploymentManifest.Builder().manifest(resource.getSubsystemManifest())
+ .header(computeDeployedContentHeader())
+ .header(computeProvisionResourceHeader()).build();
+ return result;
}
- protected RequireCapabilityHeader computeRequireCapabilityHeader() {
- if (requirements.isEmpty())
- return null;
- ArrayList<RequireCapabilityHeader.Clause> clauses = new ArrayList<RequireCapabilityHeader.Clause>();
- for (Requirement requirement : requirements) {
- if (requirement.getNamespace().startsWith("osgi."))
- continue;
- clauses.add(new RequireCapabilityHeader.Clause(requirement));
+ private ProvisionResourceHeader computeProvisionResourceHeader() {
+ SubsystemContentHeader contentHeader = resource.getSubsystemManifest().getSubsystemContentHeader();
+ // TODO This does not validate that all content bundles were found.
+ Map<Resource, List<Wire>> resolution;
+ try {
+ resolution = Activator.getInstance().getResolver().resolve(createResolveContext());
+ }
+ catch (ResolutionException e) {
+ throw new SubsystemException(e);
+ }
+ Collection<Resource> provisionResource = new HashSet<Resource>();
+ for (Resource resource : resolution.keySet()) {
+ if (!contentHeader.contains(resource)) {
+ provisionResource.add(resource);
+ addDependency(resource);
+ }
}
- if (clauses.isEmpty())
+ if (provisionResource.isEmpty())
return null;
- clauses.trimToSize();
- return new RequireCapabilityHeader(clauses);
+ return ProvisionResourceHeader.newInstance(provisionResource);
}
- protected List<Requirement> computeRequirements(SubsystemManifest manifest) throws ResolutionException {
- SubsystemContentHeader header = manifest.getSubsystemContentHeader();
- if (header == null)
- return Collections.emptyList();
- // TODO Need the system repository in here. Preferred provider as well?
- LocalRepository localRepo = new LocalRepository(resources);
- RepositoryServiceRepository serviceRepo = new RepositoryServiceRepository(Activator.getInstance().getBundleContext());
- CompositeRepository compositeRepo = new CompositeRepository(localRepo, serviceRepo);
- List<Requirement> requirements = header.toRequirements();
- List<Resource> resources = new ArrayList<Resource>(requirements.size());
- for (Requirement requirement : requirements) {
- Collection<Capability> capabilities = compositeRepo.findProviders(requirement);
- if (capabilities.isEmpty())
- continue;
- resources.add(capabilities.iterator().next().getResource());
+ private ResolveContext createResolveContext() {
+ return new ResolveContext() {
+ @Override
+ public List<Capability> findProviders(Requirement requirement) {
+ List<Capability> result = new ArrayList<Capability>();
+ if (addDependenciesFromContentRepository(requirement, result))
+ return result;
+ if (addDependenciesFromPreferredProviderRepository(requirement, result))
+ return result;
+ if (addDependenciesFromSystemRepository(requirement, result))
+ return result;
+ if (addDependenciesFromLocalRepository(requirement, result))
+ return result;
+ if (addDependenciesFromRepositoryServiceRepositories(requirement, result))
+ return result;
+ return result;
+ }
+
+ @Override
+ public Collection<Resource> getMandatoryResources() {
+ return SubsystemResource.this.mandatoryResources;
+ }
+
+ @Override
+ public Collection<Resource> getOptionalResources() {
+ return SubsystemResource.this.optionalResources;
+ }
+
+ @Override
+ public int insertHostedCapability(List<Capability> capabilities,
+ HostedCapability hostedCapability) {
+ capabilities.add(hostedCapability);
+ return capabilities.size() - 1;
+ }
+
+ @Override
+ public boolean isEffective(Requirement requirement) {
+ return true;
+ }
+
+ @Override
+ public Map<Resource, Wiring> getWirings() {
+ return Collections.emptyMap();
+ }
+ };
+ }
+
+ private Resource findContent(OsgiIdentityRequirement requirement) {
+ Map<Requirement, Collection<Capability>> map;
+ if (isUnscoped()) {
+ map = Activator.getInstance().getSystemRepository().findProviders(Collections.singleton(requirement));
+ if (map.containsKey(requirement)) {
+ Collection<Capability> capabilities = map.get(requirement);
+ for (Capability capability : capabilities) {
+ Collection<AriesSubsystem> subsystems = AriesSubsystem.getSubsystems(capability.getResource());
+ if (!subsystems.isEmpty())
+ if (subsystems.iterator().next().getRegion().equals(parent.getRegion()))
+ return capability.getResource();
+ }
+ }
+ }
+ map = resource.getLocalRepository().findProviders(Collections.singleton(requirement));
+ if (map.containsKey(requirement)) {
+ Collection<Capability> capabilities = map.get(requirement);
+ if (!capabilities.isEmpty())
+ return capabilities.iterator().next().getResource();
}
- return new DependencyCalculator(resources).calculateDependencies();
+ Collection<Capability> capabilities = new RepositoryServiceRepository().findProviders(requirement);
+ if (!capabilities.isEmpty())
+ return capabilities.iterator().next().getResource();
+ return null;
}
- protected Collection<Resource> computeResources() throws IOException, URISyntaxException, UnsupportedOperationException, ResolutionException {
- List<IFile> files = directory.listFiles();
- if (files.isEmpty())
- return Collections.emptyList();
- ArrayList<Resource> result = new ArrayList<Resource>(files.size());
- for (IFile file : directory.listFiles()) {
- String name = file.getName();
- if (name.endsWith(".jar"))
- result.add(BundleResource.newInstance(file.toURL()));
- else if (name.endsWith(".esa"))
- result.add(SubsystemResource.newInstance(convertFileToLocation(file), file.open()));
- }
- result.trimToSize();
- return result;
+ private AriesSubsystem findFirstSubsystemAcceptingDependencies() {
+ AriesSubsystem subsystem = parent;
+ while (!isAcceptDependencies(subsystem))
+ subsystem = (AriesSubsystem)subsystem.getParents().iterator().next();
+ return subsystem;
}
- protected SubsystemContentHeader computeSubsystemContentHeader(SubsystemManifest manifest) {
- Header<?> header = manifest.getSubsystemContentHeader();
- if (header == null && !resources.isEmpty())
- header = new SubsystemContentHeader(resources);
- return (SubsystemContentHeader)header;
- }
-
- protected SubsystemManifest computeSubsystemManifestAfterRequirements(SubsystemManifest manifest) {
- SubsystemManifest.Builder builder = new SubsystemManifest.Builder().manifest(manifest);
- addImportPackageHeader(builder);
- addRequireBundleHeader(builder);
- addRequireCapabilityHeader(builder);
- return builder.build();
- }
-
- protected SubsystemManifest computeSubsystemManifestBeforeRequirements(SubsystemManifest manifest) {
- SubsystemManifest.Builder builder = new SubsystemManifest.Builder().manifest(manifest);
- addSubsystemSymbolicNameHeader(builder, manifest);
- addSubsystemVersionHeader(builder, manifest);
- addSubsystemContentHeader(builder, manifest);
- return builder.build();
+ private boolean isAcceptDependencies(AriesSubsystem subsystem) {
+ return subsystem.getArchive().getSubsystemManifest().getSubsystemTypeHeader().getProvisionPolicyDirective().isAcceptDependencies();
}
- protected SubsystemSymbolicNameHeader computeSubsystemSymbolicNameHeader(SubsystemManifest manifest) {
- SubsystemSymbolicNameHeader header = manifest.getSubsystemSymbolicNameHeader();
+ private boolean isInstallable(Resource resource) {
+ return !isShared(resource);
+ }
+
+ private boolean isMandatory(Resource resource) {
+ SubsystemContentHeader header = this.resource.getSubsystemManifest().getSubsystemContentHeader();
if (header == null)
- header = new SubsystemSymbolicNameHeader(location.getSymbolicName());
- return header;
+ return false;
+ return header.isMandatory(resource);
+ }
+
+ private boolean isShared(Resource resource) {
+ return resource instanceof AriesSubsystem || resource instanceof BundleRevision;
+ }
+
+ private boolean isScoped() {
+ String type = resource.getSubsystemManifest().getSubsystemTypeHeader().getType();
+ return SubsystemConstants.SUBSYSTEM_TYPE_APPLICATION.equals(type) ||
+ SubsystemConstants.SUBSYSTEM_TYPE_COMPOSITE.equals(type);
+ }
+
+ private boolean isUnscoped() {
+ return !isScoped();
}
- protected SubsystemVersionHeader computeSubsystemVersionHeader(SubsystemManifest manifest) {
- SubsystemVersionHeader header = manifest.getSubsystemVersionHeader();
- if (header.getVersion().equals(Version.emptyVersion) && location.getVersion() != null)
- header = new SubsystemVersionHeader(location.getVersion());
- return header;
+ private boolean isValid(Capability capability) {
+ AriesSubsystem subsystem;
+ if (isInstallable(capability.getResource()))
+ subsystem = findFirstSubsystemAcceptingDependencies();
+ else
+ subsystem = AriesSubsystem.getSubsystems(capability.getResource()).iterator().next();
+ return new SharingPolicyValidator(subsystem.getRegion(), parent.getRegion()).isValid(capability);
}
}
Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SystemRepository.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SystemRepository.java?rev=1335243&r1=1335242&r2=1335243&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SystemRepository.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SystemRepository.java Mon May 7 20:37:56 2012
@@ -5,18 +5,16 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
-import org.apache.aries.subsystem.core.ResourceHelper;
import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
import org.osgi.resource.Resource;
import org.osgi.service.repository.Repository;
-import org.osgi.service.subsystem.Subsystem;
public class SystemRepository implements Repository {
- private final AriesSubsystem subsystem;
+ private final AriesSubsystem root;
- public SystemRepository(AriesSubsystem subsystem) {
- this.subsystem = subsystem;
+ public SystemRepository(AriesSubsystem root) {
+ this.root = root;
}
@Override
@@ -30,54 +28,17 @@ public class SystemRepository implements
public Collection<Capability> findProviders(Requirement requirement) {
Collection<Capability> result = new HashSet<Capability>();
- findProviders(requirement, result);
+ findProviders(requirement, result, root);
return result;
}
- private void findProviders(Requirement requirement, Collection<Capability> capabilities) {
- AriesSubsystem subsystem = this.subsystem;
- if (requirement instanceof OsgiIdentityRequirement) {
- // We only want to return providers from the same region as the subsystem.
- // Find the one and only one scoped subsystem in the region, which
- // will be either the current subsystem or one of its parents.
- do {
- subsystem = (AriesSubsystem)subsystem.getParents().iterator().next();
- } while (!(subsystem.isApplication() || subsystem.isComposite()));
- // Now search the one and only one scoped parent within the same region
- // and all children that are also in the same region for a provider.
- findProviders(subsystem, requirement, capabilities);
- return;
- }
- while (!subsystem.getParents().isEmpty())
- subsystem = (AriesSubsystem)subsystem.getParents().iterator().next();
- findProviders(subsystem, requirement, capabilities);
- }
-
- private void findProviders(AriesSubsystem subsystem, Requirement requirement, Collection<Capability> capabilities) {
- // Because constituent providers are already provisioned resources, the
- // sharing policy check must be between the requiring subsystem and the
- // offering subsystem, not the subsystem the resource would be
- // provisioned to as in the other methods.
- SharingPolicyValidator validator = new SharingPolicyValidator(subsystem.getRegion(), this.subsystem.getRegion());
- for (Resource resource : subsystem.getConstituents()) {
- for (Capability capability : resource.getCapabilities(requirement.getNamespace())) {
- // Filter out capabilities offered by dependencies that will be
- // or already are provisioned to an out of scope region. This
- // filtering does not apply to osgi.identity requirements within
- // the same region.
- if (!(requirement instanceof OsgiIdentityRequirement) && !validator.isValid(capability))
- continue;
+ private void findProviders(Requirement requirement, Collection<Capability> capabilities, AriesSubsystem subsystem) {
+ for (Resource constituent : subsystem.getConstituents()) {
+ if (constituent instanceof AriesSubsystem)
+ findProviders(requirement, capabilities, (AriesSubsystem)constituent);
+ for (Capability capability : constituent.getCapabilities(requirement.getNamespace()))
if (ResourceHelper.matches(requirement, capability))
capabilities.add(capability);
- }
- }
- for (Subsystem child : subsystem.getChildren()) {
- // If the requirement is osgi.identity and the child is not in the
- // same region as the parent, we do not want to search it.
- if (requirement instanceof OsgiIdentityRequirement
- && !subsystem.getRegion().equals(((AriesSubsystem)child).getRegion()))
- continue;
- findProviders((AriesSubsystem)child, requirement, capabilities);
}
}
}
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ApplicationTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ApplicationTest.java?rev=1335243&r1=1335242&r2=1335243&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ApplicationTest.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ApplicationTest.java Mon May 7 20:37:56 2012
@@ -219,7 +219,7 @@ public class ApplicationTest extends Sub
}
}
finally {
- b.uninstall();
+ uninstallSilently(b);
}
}
@@ -238,7 +238,7 @@ public class ApplicationTest extends Sub
}
}
finally {
- b.uninstall();
+ uninstallSilently(b);
}
}
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=1335243&r1=1335242&r2=1335243&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 Mon May 7 20:37:56 2012
@@ -25,7 +25,7 @@ import java.util.Collection;
import junit.framework.AssertionFailedError;
-import org.apache.aries.subsystem.core.ResourceHelper;
+import org.apache.aries.subsystem.core.internal.ResourceHelper;
import org.apache.aries.subsystem.itests.util.Utils;
import org.apache.aries.unittest.fixture.ArchiveFixture;
import org.apache.aries.unittest.fixture.ArchiveFixture.ZipFixture;
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=1335243&r1=1335242&r2=1335243&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 Mon May 7 20:37:56 2012
@@ -39,11 +39,11 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import org.apache.aries.subsystem.core.ResourceHelper;
import org.apache.aries.subsystem.core.archive.ProvisionPolicyDirective;
import org.apache.aries.subsystem.core.archive.SubsystemTypeHeader;
+import org.apache.aries.subsystem.core.internal.BundleResource;
+import org.apache.aries.subsystem.core.internal.ResourceHelper;
import org.apache.aries.subsystem.core.internal.SubsystemIdentifier;
-import org.apache.aries.subsystem.core.resource.BundleResource;
import org.apache.aries.subsystem.itests.obr.felix.RepositoryAdminRepository;
import org.apache.aries.subsystem.itests.util.RepositoryGenerator;
import org.apache.aries.subsystem.itests.util.TestRepository;
@@ -53,7 +53,6 @@ import org.apache.aries.unittest.fixture
import org.apache.aries.unittest.fixture.ArchiveFixture.ManifestFixture;
import org.apache.aries.unittest.fixture.ArchiveFixture.ZipFixture;
import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.felix.resolver.ResolverImpl;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.container.def.PaxRunnerOptions;
import org.osgi.framework.Bundle;
@@ -69,7 +68,6 @@ import org.osgi.framework.namespace.Iden
import org.osgi.resource.Resource;
import org.osgi.service.repository.Repository;
import org.osgi.service.repository.RepositoryContent;
-import org.osgi.service.resolver.Resolver;
import org.osgi.service.subsystem.Subsystem;
import org.osgi.service.subsystem.Subsystem.State;
import org.osgi.service.subsystem.SubsystemConstants;
@@ -701,6 +699,15 @@ public abstract class SubsystemTest exte
}
}
+ protected void uninstallSilently(Bundle bundle) {
+ if (bundle == null)
+ return;
+ try {
+ bundle.uninstall();
+ }
+ catch (Exception e) {}
+ }
+
protected void uninstallSubsystem(Subsystem subsystem) throws Exception {
assertState(EnumSet.of(State.INSTALLED, State.RESOLVED), subsystem);
subsystemEvents.clear();
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/FelixCapabilityAdapter.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/FelixCapabilityAdapter.java?rev=1335243&r1=1335242&r2=1335243&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/FelixCapabilityAdapter.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/FelixCapabilityAdapter.java Mon May 7 20:37:56 2012
@@ -16,7 +16,7 @@ package org.apache.aries.subsystem.itest
import java.util.Collections;
import java.util.Map;
-import org.apache.aries.subsystem.core.resource.AbstractCapability;
+import org.apache.aries.subsystem.core.internal.AbstractCapability;
import org.osgi.framework.wiring.BundleRevision;
import org.osgi.resource.Resource;
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/FelixRepositoryAdapter.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/FelixRepositoryAdapter.java?rev=1335243&r1=1335242&r2=1335243&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/FelixRepositoryAdapter.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/FelixRepositoryAdapter.java Mon May 7 20:37:56 2012
@@ -26,8 +26,8 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.apache.aries.subsystem.core.ResourceHelper;
import org.apache.aries.subsystem.core.internal.OsgiIdentityCapability;
+import org.apache.aries.subsystem.core.internal.ResourceHelper;
import org.osgi.framework.Constants;
import org.osgi.framework.namespace.IdentityNamespace;
import org.osgi.resource.Capability;
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/FelixResourceAdapter.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/FelixResourceAdapter.java?rev=1335243&r1=1335242&r2=1335243&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/FelixResourceAdapter.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/FelixResourceAdapter.java Mon May 7 20:37:56 2012
@@ -18,9 +18,9 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.List;
-import org.apache.aries.subsystem.core.ResourceHelper;
import org.apache.aries.subsystem.core.internal.OsgiContentCapability;
import org.apache.aries.subsystem.core.internal.OsgiIdentityCapability;
+import org.apache.aries.subsystem.core.internal.ResourceHelper;
import org.osgi.framework.namespace.IdentityNamespace;
import org.osgi.framework.wiring.BundleRevision;
import org.osgi.resource.Capability;
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/OsgiRequirementAdapter.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/OsgiRequirementAdapter.java?rev=1335243&r1=1335242&r2=1335243&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/OsgiRequirementAdapter.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/OsgiRequirementAdapter.java Mon May 7 20:37:56 2012
@@ -16,7 +16,7 @@ package org.apache.aries.subsystem.itest
import static org.apache.aries.application.utils.AppConstants.LOG_ENTRY;
import static org.apache.aries.application.utils.AppConstants.LOG_EXIT;
-import org.apache.aries.subsystem.core.ResourceHelper;
+import org.apache.aries.subsystem.core.internal.ResourceHelper;
import org.apache.felix.bundlerepository.Capability;
import org.apache.felix.bundlerepository.Requirement;
import org.osgi.framework.Constants;
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/OsgiResourceAdapter.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/OsgiResourceAdapter.java?rev=1335243&r1=1335242&r2=1335243&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/OsgiResourceAdapter.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/obr/felix/OsgiResourceAdapter.java Mon May 7 20:37:56 2012
@@ -18,7 +18,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Map;
-import org.apache.aries.subsystem.core.ResourceHelper;
+import org.apache.aries.subsystem.core.internal.ResourceHelper;
import org.apache.felix.bundlerepository.Capability;
import org.apache.felix.bundlerepository.Requirement;
import org.apache.felix.bundlerepository.Resource;
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/util/RepositoryDescriptorGenerator.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/util/RepositoryDescriptorGenerator.java?rev=1335243&r1=1335242&r2=1335243&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/util/RepositoryDescriptorGenerator.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/util/RepositoryDescriptorGenerator.java Mon May 7 20:37:56 2012
@@ -27,7 +27,7 @@ import javax.xml.parsers.ParserConfigura
import org.apache.aries.application.Content;
import org.apache.aries.application.management.BundleInfo;
-import org.apache.aries.subsystem.core.ResourceHelper;
+import org.apache.aries.subsystem.core.internal.ResourceHelper;
import org.apache.aries.util.manifest.ManifestHeaderProcessor;
import org.apache.felix.bundlerepository.Resource;
import org.osgi.framework.Constants;
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/util/RepositoryGenerator.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/util/RepositoryGenerator.java?rev=1335243&r1=1335242&r2=1335243&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/util/RepositoryGenerator.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/util/RepositoryGenerator.java Mon May 7 20:37:56 2012
@@ -30,7 +30,7 @@ import javax.xml.transform.stream.Stream
import org.apache.aries.application.Content;
import org.apache.aries.application.management.BundleInfo;
-import org.apache.aries.subsystem.core.ResourceHelper;
+import org.apache.aries.subsystem.core.internal.ResourceHelper;
import org.apache.aries.subsystem.itests.obr.felix.FelixResourceAdapter;
import org.apache.aries.subsystem.itests.obr.felix.OsgiResourceAdapter;
import org.apache.felix.bundlerepository.Capability;
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/util/TestRepository.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/util/TestRepository.java?rev=1335243&r1=1335242&r2=1335243&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/util/TestRepository.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/util/TestRepository.java Mon May 7 20:37:56 2012
@@ -6,7 +6,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import org.apache.aries.subsystem.core.ResourceHelper;
+import org.apache.aries.subsystem.core.internal.ResourceHelper;
import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
import org.osgi.resource.Resource;