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/10/24 02:36:08 UTC

svn commit: r1401521 - in /aries/trunk/subsystem: subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ subsystem-itests/src/test/resources/compositeDir/ subsystem-itest...

Author: jwross
Date: Wed Oct 24 00:36:07 2012
New Revision: 1401521

URL: http://svn.apache.org/viewvc?rev=1401521&view=rev
Log:
ARIES-942: Support for installing subsystems as nested directories.

Added:
    aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/
    aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/OSGI-INF/
    aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/OSGI-INF/SUBSYSTEM.MF
    aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/
    aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/OSGI-INF/
    aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/OSGI-INF/SUBSYSTEM.MF
    aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/
    aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/OSGI-INF/
    aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/OSGI-INF/SUBSYSTEM.MF
Modified:
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/RawSubsystemResource.java
    aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/InstallTest.java

Modified: 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=1401521&r1=1401520&r2=1401521&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/RawSubsystemResource.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/RawSubsystemResource.java Wed Oct 24 00:36:07 2012
@@ -56,7 +56,7 @@ import org.osgi.service.subsystem.Subsys
 import org.osgi.service.subsystem.SubsystemConstants;
 
 public class RawSubsystemResource implements Resource {
-	private static final Pattern PATTERN = Pattern.compile("([^@]+)(?:@(.+))?.esa");
+	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");
@@ -101,24 +101,25 @@ public class RawSubsystemResource implem
 	private final SubsystemManifest subsystemManifest;
 	
 	public RawSubsystemResource(String location, InputStream content) throws URISyntaxException, IOException, ResolutionException, ModellerException {
+		this(location, content == null ? null : FileSystem.getFSRoot(content));
+	}
+	
+	public RawSubsystemResource(String location, IDirectory content) throws URISyntaxException, IOException, ResolutionException, ModellerException {
 		this.location = new Location(location);
-		IDirectory idir;
 		if (content == null)
-			idir = this.location.open();
-		else
-			idir = FileSystem.getFSRoot(content);
+			content = this.location.open();
 		try {
-			resources = computeResources(idir);
+			resources = computeResources(content);
 			localRepository = computeLocalRepository();
-			SubsystemManifest manifest = computeSubsystemManifest(idir);
+			SubsystemManifest manifest = computeSubsystemManifest(content);
 			manifest = computeSubsystemManifestBeforeRequirements(manifest);
 			requirements = computeRequirements(manifest);
 			subsystemManifest = computeSubsystemManifestAfterRequirements(manifest);
 			capabilities = computeCapabilities();
-			deploymentManifest = computeDeploymentManifest(idir);
+			deploymentManifest = computeDeploymentManifest(content);
 		}
 		finally {
-			IOUtils.close(idir.toCloseable());
+			IOUtils.close(content.toCloseable());
 		}
 	}
 	
@@ -323,10 +324,16 @@ public class RawSubsystemResource implem
 		ArrayList<Resource> result = new ArrayList<Resource>(files.size());
 		for (IFile file : directory.listFiles()) {
 			String name = file.getName();
-			if (name.endsWith(".jar"))
-				result.add(new BundleResource(file.toURL()));
-			else if (name.endsWith(".esa"))
-				result.add(new RawSubsystemResource(convertFileToLocation(file), file.open()));
+			if (file.isFile()) {
+				if (name.endsWith(".jar"))
+					result.add(new BundleResource(file.toURL()));
+				else if (name.endsWith(".esa"))
+					result.add(new RawSubsystemResource(convertFileToLocation(file), file.open()));
+			}
+			else {
+				if (name.endsWith(".esa"))
+					result.add(new RawSubsystemResource(convertFileToLocation(file), file.convert()));
+			}
 		}
 		result.trimToSize();
 		return result;

Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/InstallTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/InstallTest.java?rev=1401521&r1=1401520&r2=1401521&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/InstallTest.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/InstallTest.java Wed Oct 24 00:36:07 2012
@@ -23,7 +23,11 @@ import static org.junit.Assert.assertSam
 import static org.junit.Assert.fail;
 
 import java.io.File;
+import java.io.FileOutputStream;
 
+import org.apache.aries.subsystem.itests.util.Utils;
+import org.apache.aries.unittest.fixture.ArchiveFixture;
+import org.apache.aries.unittest.fixture.ArchiveFixture.ZipFixture;
 import org.apache.aries.util.filesystem.FileSystem;
 import org.apache.aries.util.filesystem.IDirectory;
 import org.apache.aries.util.io.IOUtils;
@@ -43,7 +47,26 @@ public class InstallTest extends Subsyst
 		if (createdApplications) {
 			return;
 		}
-		createApplication("emptySubsystem", new String[0]);
+		
+		ZipFixture feature = ArchiveFixture
+				.newZip()
+				.binary("OSGI-INF/SUBSYSTEM.MF",
+						SubsystemTest.class.getClassLoader().getResourceAsStream(
+								"compositeDir" + "/OSGI-INF/SUBSYSTEM.MF"))
+				.binary("applicationDir.esa/OSGI-INF/SUBSYSTEM.MF",
+						SubsystemTest.class.getClassLoader().getResourceAsStream(
+								"compositeDir" + "/applicationDir/OSGI-INF/SUBSYSTEM.MF"))
+				.binary("applicationDir.esa/featureDir.esa/OSGI-INF/SUBSYSTEM.MF",
+						SubsystemTest.class.getClassLoader().getResourceAsStream(
+								"compositeDir" + "/applicationDir/featureDir/OSGI-INF/SUBSYSTEM.MF"));
+		feature.end();
+		FileOutputStream fos = new FileOutputStream("compositeDir" + ".esa");
+		try {
+			feature.writeOut(fos);
+		} finally {
+			Utils.closeQuietly(fos);
+		}
+		
 		createApplication("feature3", new String[]{"tb3.jar"});
 		createApplication("feature2", new String[]{"tb3.jar", "tb2.jar"});
 		createdApplications = true;
@@ -53,9 +76,9 @@ public class InstallTest extends Subsyst
 		super.setUp();
 		File userDir = new File(System.getProperty("user.dir"));
     	IDirectory idir = FileSystem.getFSRoot(userDir);
-    	File emptySubsystem = new File(userDir, "emptySubsystem");
-    	emptySubsystem.mkdir();
-    	IOUtils.unpackZip(idir.getFile("emptySubsystem.esa"), emptySubsystem);
+    	File compositeDir = new File(userDir, "compositeDir");
+    	compositeDir.mkdir();
+    	IOUtils.unpackZip(idir.getFile("compositeDir.esa"), compositeDir);
 	}
 
 	@Test
@@ -76,11 +99,20 @@ public class InstallTest extends Subsyst
      */
     @Test
     public void testLocationAsDirectoryUrl() throws Exception {
-    	File file = new File("emptySubsystem");
+    	File file = new File("compositeDir");
     	try {
     		Subsystem subsystem = installSubsystem(getRootSubsystem(), file.toURI().toString(), null);
     		try {
-    			assertEmptySubsystem(subsystem);
+    			assertSymbolicName("org.apache.aries.subsystem.itests.composite.dir", subsystem);
+    			assertChildren(1, subsystem);
+    			Subsystem child = subsystem.getChildren().iterator().next();
+    			assertSymbolicName(
+    					"org.apache.aries.subsystem.itests.application.dir",
+    					child);
+    			assertChildren(1, child);
+    			assertSymbolicName(
+    					"org.apache.aries.subsystem.itests.feature.dir",
+    					child.getChildren().iterator().next());
     		}
     		finally {
     			uninstallSubsystemSilently(subsystem);

Added: aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/OSGI-INF/SUBSYSTEM.MF
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/OSGI-INF/SUBSYSTEM.MF?rev=1401521&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/OSGI-INF/SUBSYSTEM.MF (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/OSGI-INF/SUBSYSTEM.MF Wed Oct 24 00:36:07 2012
@@ -0,0 +1,3 @@
+Subsystem-SymbolicName: org.apache.aries.subsystem.itests.composite.dir
+Subsystem-Type: org.osgi.subsystem.composite
+Subsystem-Content: org.apache.aries.subsystem.itests.application.dir;version="[0,0]";type=osgi.subsystem.application

Added: aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/OSGI-INF/SUBSYSTEM.MF
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/OSGI-INF/SUBSYSTEM.MF?rev=1401521&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/OSGI-INF/SUBSYSTEM.MF (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/OSGI-INF/SUBSYSTEM.MF Wed Oct 24 00:36:07 2012
@@ -0,0 +1 @@
+Subsystem-SymbolicName: org.apache.aries.subsystem.itests.application.dir
\ No newline at end of file

Added: aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/OSGI-INF/SUBSYSTEM.MF
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/OSGI-INF/SUBSYSTEM.MF?rev=1401521&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/OSGI-INF/SUBSYSTEM.MF (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/OSGI-INF/SUBSYSTEM.MF Wed Oct 24 00:36:07 2012
@@ -0,0 +1,2 @@
+Subsystem-SymbolicName: org.apache.aries.subsystem.itests.feature.dir
+Subsystem-Type: osgi.subsystem.feature