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


Reply via email to