You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by mn...@apache.org on 2010/01/06 16:50:25 UTC
svn commit: r896491 - in /incubator/aries/trunk/application:
application-api/src/main/java/org/apache/aries/application/
application-api/src/main/java/org/apache/aries/application/management/
application-management/src/main/java/org/apache/aries/applic...
Author: mnuttall
Date: Wed Jan 6 15:50:22 2010
New Revision: 896491
URL: http://svn.apache.org/viewvc?rev=896491&view=rev
Log:
ARIES-89: Implement application support: AriesApplicationManager.createApplication now functional enough for some initial unit tests.
Added:
incubator/aries/trunk/application/application-management/src/test/
incubator/aries/trunk/application/application-management/src/test/java/
incubator/aries/trunk/application/application-management/src/test/java/org/
incubator/aries/trunk/application/application-management/src/test/java/org/apache/
incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/
incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/
incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/
incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/
incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/AriesApplicationManagerImplTest.java
incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/unittest/
incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/unittest/utils/
incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/unittest/utils/EbaUnitTestUtils.java
incubator/aries/trunk/application/application-management/src/test/resources/
incubator/aries/trunk/application/application-management/src/test/resources/bundles/
incubator/aries/trunk/application/application-management/src/test/resources/bundles/repository/
incubator/aries/trunk/application/application-management/src/test/resources/bundles/repository/a.handy.persistence.library.jar/
incubator/aries/trunk/application/application-management/src/test/resources/bundles/repository/a.handy.persistence.library.jar/META-INF/
incubator/aries/trunk/application/application-management/src/test/resources/bundles/repository/a.handy.persistence.library.jar/META-INF/MANIFEST.MF
incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/
incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/META-INF/
incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/META-INF/APPLICATION.MF
incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/foo.bar.widgets.jar/
incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/foo.bar.widgets.jar/META-INF/
incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/foo.bar.widgets.jar/META-INF/MANIFEST.MF
incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/my.business.logic.jar/
incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/my.business.logic.jar/META-INF/
incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/my.business.logic.jar/META-INF/MANIFEST.MF
incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/impl/
incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/impl/ApplicationMetadataImplTest.java
- copied, changed from r894900, incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/ApplicationMetadataImplTest.java
incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/impl/DeploymentContentImplTest.java
incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/impl/VersionRangeTest.java
- copied, changed from r894900, incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/VersionRangeTest.java
Removed:
incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/ApplicationMetadataImplTest.java
incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/VersionRangeTest.java
Modified:
incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/Content.java
incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/AriesApplicationManager.java
incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java
incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/BundleInfoImpl.java
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ContentImpl.java
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentContentImpl.java
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataImpl.java
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/AppConstants.java
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java
Modified: incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/Content.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/Content.java?rev=896491&r1=896490&r2=896491&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/Content.java (original)
+++ incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/Content.java Wed Jan 6 15:50:22 2010
@@ -65,4 +65,10 @@
* ASK ALASDAIR: should we return default version 0.0.0 instead of null?
*/
public VersionRange getVersion();
+
+ /**
+ * get the attribute and directive info in NameValueMap
+ * @return namevalueMap that contains attribute and directive info
+ */
+ public Map<String, String> getNameValueMap();
}
Modified: incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/AriesApplicationManager.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/AriesApplicationManager.java?rev=896491&r1=896490&r2=896491&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/AriesApplicationManager.java (original)
+++ incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/AriesApplicationManager.java Wed Jan 6 15:50:22 2010
@@ -20,16 +20,17 @@
package org.apache.aries.application.management;
-import java.io.File;
import java.net.URL;
import java.util.Set;
+import org.apache.aries.application.filesystem.IDirectory;
+
/**
* Create, install and uninstall applications via this service.
*/
public interface AriesApplicationManager
{
- public AriesApplication createApplication(File f) throws ManagementException;
+ public AriesApplication createApplication(IDirectory source) throws ManagementException;
public AriesApplication createApplication(URL url) throws ManagementException;
public Set<ApplicationContext> getApplicationContexts();
public ApplicationContext getApplicationContext(AriesApplication app);
Modified: incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java?rev=896491&r1=896490&r2=896491&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java (original)
+++ incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java Wed Jan 6 15:50:22 2010
@@ -78,14 +78,10 @@
/**
- * Create an AriesApplication from a .eba file
+ * Create an AriesApplication from a .eba file: a zip file with a '.eba' extension
+ * as per http://incubator.apache.org/aries/applications.html
*/
- public AriesApplication createApplication(File ebaFile) throws ManagementException {
- /*
- * ebaFile should be a zip file with a '.eba' extension
- * as per http://incubator.apache.org/aries/applications.html
- */
-
+ public AriesApplication createApplication(IDirectory ebaFile) throws ManagementException {
ApplicationMetadata applicationMetadata;
DeploymentMetadata deploymentMetadata;
Map<String, InputStream> modifiedBundles = new HashMap<String, InputStream>();
@@ -93,11 +89,6 @@
boolean manifestChanged = false;
try {
- if (!ebaFile.isFile()) {
- // TODO: NLS this, and implement create-from-directory
- throw new ManagementException ("Cannot create .eba from directory yet");
- }
-
// Locate META-INF/APPLICATION.MF and ensure that the
// manifest has the necessary fields set
Manifest applicationManifest = parseManifest (ebaFile, AppConstants.APPLICATION_MF);
@@ -109,14 +100,18 @@
// If there's a deployment.mf present, check it matches applicationManifest, and if so, use it
} else {
// -- Process any other files in the .eba, i.e. migrate wars to wabs, plain jars to bundles
- IDirectory eba = FileSystem.getFSRoot(ebaFile);
- Set<BundleInfo> bundleInfo = new HashSet<BundleInfo>();
- for (IFile f : eba) {
+ Set<BundleInfo> extraBundlesInfo = new HashSet<BundleInfo>();
+ for (IFile f : ebaFile) {
+ if (f.isDirectory()) {
+ continue;
+ }
+ System.out.println ("Call getBundleManifest on " + f.getName());
+
BundleManifest bm = getBundleManifest (f);
if (bm != null) {
if (bm.isValid()) {
- bundleInfo.add(new BundleInfoImpl(bm, null));
+ extraBundlesInfo.add(new BundleInfoImpl(bm, null));
} else {
// We have a jar that needs converting to a bundle, or a war to migrate to a WAB
InputStream is = null;
@@ -128,7 +123,7 @@
try {
// WarToWabConverter can extract application.xml via
// eba.getFile(AppConstants.APPLICATION_XML);
- convertedBinary = converters.next().convert(is, eba);
+ convertedBinary = converters.next().convert(is, ebaFile);
} catch (ServiceException sx) {
// We'll get this if our optional BundleConverter has not been injected.
}
@@ -136,7 +131,7 @@
if (convertedBinary != null) {
modifiedBundles.put (f.getName(), convertedBinary);
bm = BundleManifest.fromBundle(is);
- bundleInfo.add(new BundleInfoImpl(bm, null));
+ extraBundlesInfo.add(new BundleInfoImpl(bm, null));
}
} finally {
try {
@@ -146,7 +141,8 @@
}
}
}
- application = new AriesApplicationImpl (applicationMetadata, bundleInfo);
+
+ application = new AriesApplicationImpl (applicationMetadata, extraBundlesInfo);
Set<BundleInfo> additionalBundlesRequired = _resolver.resolve(application);
deploymentMetadata = _deploymentMetadataFactory.createDeploymentMetadata(application, additionalBundlesRequired);
application.setDeploymentMetadata(deploymentMetadata);
@@ -167,6 +163,8 @@
}
public AriesApplication createApplication(URL url) throws ManagementException {
+ // If URL isn't file://, we need to download the asset from that url and
+ // then call createApplication(File)
return null;
}
@@ -208,26 +206,22 @@
* @return parsed manifest, or null
* @throws IOException
*/
- private Manifest parseManifest (File ebaFile, String fileName) throws IOException {
+ private Manifest parseManifest (IDirectory source, String fileName) throws IOException {
Manifest result = null;
- IDirectory eba = FileSystem.getFSRoot(ebaFile);
- List<IFile> files = eba.listFiles();
- for (IFile f : files) {
- if (f.getName().equalsIgnoreCase(fileName)) {
- InputStream is = null;
+ IFile f = source.getFile(fileName);
+ if (f != null) {
+ InputStream is = null;
+ try {
+ is = f.open();
+ result = ManifestProcessor.parseManifest(is);
+ is.close();
+ } catch (IOException iox) {
+ // TODO: log error
+ throw iox;
+ } finally {
try {
- is = f.open();
- result = ManifestProcessor.parseManifest(is);
- is.close();
- } catch (IOException iox) {
- // TODO: log error
- throw iox;
- } finally {
- try {
- if (is != null) is.close();
- } catch (IOException iox) {}
- }
- break;
+ if (is != null) is.close();
+ } catch (IOException iox) {}
}
}
return result;
Modified: incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/BundleInfoImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/BundleInfoImpl.java?rev=896491&r1=896490&r2=896491&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/BundleInfoImpl.java (original)
+++ incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/BundleInfoImpl.java Wed Jan 6 15:50:22 2010
@@ -36,16 +36,17 @@
import org.osgi.framework.Version;
public class BundleInfoImpl implements BundleInfo {
-
- private BundleManifest _bundleManifest;
+ private String _symbolicName;
+ private Version _version;
private Attributes _attributes;
private Set<Content> _exportPackages = null;
private Set<Content> _importPackages = null;
private String _location;
public BundleInfoImpl (BundleManifest bm, String location) {
- _bundleManifest = bm;
- _attributes = _bundleManifest.getRawAttributes();
+ _symbolicName = bm.getSymbolicName();
+ _version = bm.getVersion();
+ _attributes = bm.getRawAttributes();
_location = location;
}
@@ -79,11 +80,11 @@
}
public String getSymbolicName() {
- return _bundleManifest.getSymbolicName();
+ return _symbolicName;
}
public Version getVersion() {
- return _bundleManifest.getVersion();
+ return _version;
}
private Set<Content> getContentSetFromHeader (Attributes attributes, String key) {
Added: incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/AriesApplicationManagerImplTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/AriesApplicationManagerImplTest.java?rev=896491&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/AriesApplicationManagerImplTest.java (added)
+++ incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/application/management/impl/AriesApplicationManagerImplTest.java Wed Jan 6 15:50:22 2010
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 WARRANTIESOR 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.application.management.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.aries.application.ApplicationMetadata;
+import org.apache.aries.application.ApplicationMetadataManager;
+import org.apache.aries.application.Content;
+import org.apache.aries.application.DeploymentContent;
+import org.apache.aries.application.DeploymentMetadata;
+import org.apache.aries.application.DeploymentMetadataFactory;
+import org.apache.aries.application.filesystem.IDirectory;
+import org.apache.aries.application.impl.ApplicationMetadataManagerImpl;
+import org.apache.aries.application.impl.ContentImpl;
+import org.apache.aries.application.impl.DeploymentContentImpl;
+import org.apache.aries.application.impl.DeploymentMetadataFactoryImpl;
+import org.apache.aries.application.management.AriesApplication;
+import org.apache.aries.application.management.AriesApplicationResolver;
+import org.apache.aries.application.management.BundleConverter;
+import org.apache.aries.application.management.BundleInfo;
+import org.apache.aries.application.utils.filesystem.FileSystem;
+import org.apache.aries.application.utils.filesystem.IOUtils;
+import org.apache.aries.application.utils.manifest.BundleManifest;
+import org.apache.aries.unittest.utils.EbaUnitTestUtils;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.osgi.framework.Version;
+
+public class AriesApplicationManagerImplTest {
+
+ class DummyResolver implements AriesApplicationResolver {
+
+ Set<BundleInfo> nextResult;
+ public Set<BundleInfo> resolve(AriesApplication app) {
+ return nextResult;
+ }
+
+ void setNextResult (Set<BundleInfo> r) {
+ nextResult = r;
+ }
+
+ }
+
+ static String _testEba = "./ariesApplicationManagerImplTest/test.eba";
+
+ @BeforeClass
+ public static void setup() throws Exception {
+ EbaUnitTestUtils.createEba("../src/test/resources/bundles/test.eba", _testEba);
+ File src = new File ("../src/test/resources/bundles/repository/a.handy.persistence.library.jar");
+ File dest = new File ("ariesApplicationManagerImplTest/a.handy.persistence.library.jar");
+ IOUtils.zipUp(src, dest);
+ }
+
+ @Test
+ public void testCreate() throws Exception {
+ AriesApplicationManagerImpl appMgr = new AriesApplicationManagerImpl ();
+ ApplicationMetadataManager appMetaMgr = new ApplicationMetadataManagerImpl ();
+ DeploymentMetadataFactory dmf = new DeploymentMetadataFactoryImpl();
+ List<BundleConverter> bundleConverters = new ArrayList<BundleConverter>();
+ DummyResolver resolver = new DummyResolver();
+
+ appMgr.setApplicationMetadataManager(appMetaMgr);
+ appMgr.setDeploymentMetadataFactory(dmf);
+ appMgr.setBundleConverters(bundleConverters);
+ appMgr.setResolver(resolver);
+
+ // This next block is a very long winded way of constructing a BundleInfoImpl
+ // against the existing (BundleManifest bm, String location) constructor. If we
+ // find we need a String-based BundleInfoImpl constructor for other reasons,
+ // we could change to using it here.
+ Set<BundleInfo> nextResolverResult = new HashSet<BundleInfo>();
+ String persistenceLibraryLocation = "../src/test/resources/bundles/repository/a.handy.persistence.library.jar";
+ File persistenceLibrary = new File (persistenceLibraryLocation);
+ BundleManifest mf = BundleManifest.fromBundle(persistenceLibrary);
+ BundleInfo resolvedPersistenceLibrary = new BundleInfoImpl(mf, persistenceLibraryLocation);
+ Field v = BundleInfoImpl.class.getDeclaredField("_version");
+ v.setAccessible(true);
+ v.set(resolvedPersistenceLibrary, new Version("1.1.0"));
+ nextResolverResult.add(resolvedPersistenceLibrary);
+ resolver.setNextResult(nextResolverResult);
+
+ IDirectory testEba = FileSystem.getFSRoot(new File(_testEba));
+ AriesApplication app = appMgr.createApplication(testEba);
+
+ ApplicationMetadata appMeta = app.getApplicationMetadata();
+ assertEquals (appMeta.getApplicationName(), "Test application");
+ assertEquals (appMeta.getApplicationSymbolicName(), "org.apache.aries.application.management.test");
+ assertEquals (appMeta.getApplicationVersion(), new Version("1.0"));
+ List<Content> appContent = appMeta.getApplicationContents();
+ assertEquals (appContent.size(), 2);
+ Content fbw = new ContentImpl("foo.bar.widgets;version=1.0.0");
+ Content mbl = new ContentImpl("my.business.logic;version=1.0.0");
+ assertTrue (appContent.contains(fbw));
+ assertTrue (appContent.contains(mbl));
+
+ DeploymentMetadata dm = app.getDeploymentMetadata();
+ List<DeploymentContent> dcList = dm.getApplicationDeploymentContents();
+
+ assertEquals (dcList.size(), 3);
+ DeploymentContent dc1 = new DeploymentContentImpl ("foo.bar.widgets;deployed-version=1.0.0");
+ DeploymentContent dc2 = new DeploymentContentImpl ("my.business.logic;deployed-version=1.0.0");
+ DeploymentContent dc3 = new DeploymentContentImpl ("a.handy.persistence.library;deployed-version=1.1.0");
+ assertTrue (dcList.contains(dc1));
+ assertTrue (dcList.contains(dc2));
+ assertTrue (dcList.contains(dc3));
+
+ }
+}
Added: incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/unittest/utils/EbaUnitTestUtils.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/unittest/utils/EbaUnitTestUtils.java?rev=896491&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/unittest/utils/EbaUnitTestUtils.java (added)
+++ incubator/aries/trunk/application/application-management/src/test/java/org/apache/aries/unittest/utils/EbaUnitTestUtils.java Wed Jan 6 15:50:22 2010
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 WARRANTIESOR 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.unittest.utils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.jar.Attributes;
+import java.util.jar.Manifest;
+
+import org.apache.aries.application.utils.filesystem.IOUtils;
+
+public class EbaUnitTestUtils {
+
+private static final String TEMP_DIR = "unittest/tmpEbaContent";
+
+ public static void createEba(String rootFolder, String outputFile) throws IOException
+ {
+ File tempDir = new File(TEMP_DIR);
+ tempDir.mkdirs();
+
+ createEbaRecursive(new File(rootFolder), tempDir, "");
+ IOUtils.zipUp(tempDir, new File(outputFile));
+ IOUtils.deleteRecursive(tempDir);
+ }
+
+ private static void createEbaRecursive(File folder, File tempDir, String prefix) throws IOException
+ {
+ for (File f : folder.listFiles())
+ {
+ if ((f.getName().endsWith(".jar") || f.getName().endsWith(".war")) && f.isDirectory())
+ {
+ File manifestFile = new File(f, "META-INF/MANIFEST.MF");
+ Manifest m;
+
+ if (manifestFile.isFile())
+ m = new Manifest(new FileInputStream(manifestFile));
+ else
+ {
+ m = new Manifest();
+ m.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
+ }
+
+ File jarFile = new File(tempDir, prefix + f.getName());
+ jarFile.getParentFile().mkdirs();
+
+ IOUtils.jarUp(f, jarFile, m);
+ }
+ else if (f.isFile())
+ {
+ IOUtils.writeOut(tempDir, prefix + f.getName(), new FileInputStream(f));
+ }
+ else if (f.isDirectory())
+ {
+ createEbaRecursive(f, tempDir, prefix + f.getName() + File.separator);
+ }
+ }
+ }
+
+ public static void cleanupEba(String outputFile)
+ {
+ new File(outputFile).delete();
+ }
+}
Added: incubator/aries/trunk/application/application-management/src/test/resources/bundles/repository/a.handy.persistence.library.jar/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/test/resources/bundles/repository/a.handy.persistence.library.jar/META-INF/MANIFEST.MF?rev=896491&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-management/src/test/resources/bundles/repository/a.handy.persistence.library.jar/META-INF/MANIFEST.MF (added)
+++ incubator/aries/trunk/application/application-management/src/test/resources/bundles/repository/a.handy.persistence.library.jar/META-INF/MANIFEST.MF Wed Jan 6 15:50:22 2010
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: HandyPersistenceLibrary
+Bundle-SymbolicName: a.handy.persistence.library
+Bundle-Version: 1.1
+Bundle-Vendor: Apache.org
+Export-Package: org.apache.handy.persistence
+
Added: incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/META-INF/APPLICATION.MF
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/META-INF/APPLICATION.MF?rev=896491&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/META-INF/APPLICATION.MF (added)
+++ incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/META-INF/APPLICATION.MF Wed Jan 6 15:50:22 2010
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Application-ManifestVersion: 1.0
+Application-Name: Test application
+Application-SymbolicName: org.apache.aries.application.management.test
+Application-Version: 1.0
+Application-Content: foo.bar.widgets;version=1.0.0,
+ my.business.logic;version=1.0.0
+
Added: incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/foo.bar.widgets.jar/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/foo.bar.widgets.jar/META-INF/MANIFEST.MF?rev=896491&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/foo.bar.widgets.jar/META-INF/MANIFEST.MF (added)
+++ incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/foo.bar.widgets.jar/META-INF/MANIFEST.MF Wed Jan 6 15:50:22 2010
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: FooBarWidgets
+Bundle-SymbolicName: foo.bar.widgets
+Bundle-Version: 1.1
+Bundle-Vendor: Apache.org
+Export-Package: foo.bar.widgets
+
+
Added: incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/my.business.logic.jar/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/my.business.logic.jar/META-INF/MANIFEST.MF?rev=896491&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/my.business.logic.jar/META-INF/MANIFEST.MF (added)
+++ incubator/aries/trunk/application/application-management/src/test/resources/bundles/test.eba/my.business.logic.jar/META-INF/MANIFEST.MF Wed Jan 6 15:50:22 2010
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: MyBusinessLogic
+Bundle-SymbolicName: my.business.logic
+Bundle-Version: 1.1
+Bundle-Vendor: Apache.org
+Export-Package: my.business.logic
Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ContentImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ContentImpl.java?rev=896491&r1=896490&r2=896491&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ContentImpl.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ContentImpl.java Wed Jan 6 15:50:22 2010
@@ -108,6 +108,14 @@
return toReturn;
}
+ public NameValueMap<String, String> getNameValueMap() {
+ NameValueMap<String, String> nvm = new NameValueMap<String, String>();
+ for (String key : this.nameValueMap.keySet()) {
+ nvm.addToCollection(key, this.nameValueMap.get(key));
+ }
+ return nvm;
+ }
+
/**
* add key value to the directives map
* @param key
Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentContentImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentContentImpl.java?rev=896491&r1=896490&r2=896491&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentContentImpl.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentContentImpl.java Wed Jan 6 15:50:22 2010
@@ -23,20 +23,37 @@
import org.apache.aries.application.DeploymentContent;
import org.apache.aries.application.VersionRange;
+import org.apache.aries.application.utils.AppConstants;
+import org.apache.aries.application.utils.manifest.ManifestHeaderProcessor;
+import org.apache.aries.application.utils.manifest.ManifestHeaderProcessor.NameValueMap;
import org.osgi.framework.Version;
-public class DeploymentContentImpl implements DeploymentContent {
+public final class DeploymentContentImpl implements DeploymentContent {
private ContentImpl _content;
- public DeploymentContentImpl (String content) {
- _content = new ContentImpl (content);
+ /**
+ * DeploymentContent relates to a bundle at a particular version.
+ * We can therefore assume that the Version passed into this
+ * constructor is the exact version in question.
+ * @param bundleSymbolicName
+ * @param version
+ */
+ public DeploymentContentImpl (String bundleSymbolicName, Version version) {
+ NameValueMap<String, String> nvMap = new NameValueMap<String, String>();
+ nvMap.put(AppConstants.DEPLOYMENT_BUNDLE_VERSION, version.toString());
+ _content = new ContentImpl (bundleSymbolicName, nvMap);
}
- public DeploymentContentImpl (String bundleSymbolicName, Version version) {
- _content = new ContentImpl (bundleSymbolicName, version);
+ /**
+ * Construct a DeploymentContent from a string of the form,
+ * bundle.symbolic.name;deployedContent="1.2.3"
+ * @param deployedContent
+ */
+ public DeploymentContentImpl (String deployedContent) {
+ _content = new ContentImpl (deployedContent);
}
-
+
public Version getExactVersion() {
return getVersion().getExactVersion();
}
@@ -62,7 +79,28 @@
}
public VersionRange getVersion() {
- return _content.getVersion();
+ String deployedVersion = _content.getAttribute(AppConstants.DEPLOYMENT_BUNDLE_VERSION);
+ VersionRange vr = null;
+ if (deployedVersion != null && deployedVersion.length() > 0) {
+ vr = ManifestHeaderProcessor.parseVersionRange(deployedVersion, true);
+ }
+ return vr;
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other == null)
+ return false;
+ if (this == other)
+ return true;
+ if (other instanceof DeploymentContentImpl) {
+ return _content.equals(((DeploymentContentImpl) other)._content);
+ } else {
+ return false;
+ }
}
+ public Map<String, String> getNameValueMap() {
+ return _content.getNameValueMap();
+ }
}
Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataImpl.java?rev=896491&r1=896490&r2=896491&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataImpl.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataImpl.java Wed Jan 6 15:50:22 2010
@@ -24,11 +24,14 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.apache.aries.application.ApplicationMetadata;
+import org.apache.aries.application.Content;
import org.apache.aries.application.DeploymentContent;
import org.apache.aries.application.DeploymentMetadata;
+import org.apache.aries.application.VersionRange;
import org.apache.aries.application.management.AriesApplication;
import org.apache.aries.application.management.BundleInfo;
import org.osgi.framework.Version;
@@ -41,6 +44,12 @@
public DeploymentMetadataImpl (AriesApplication app, Set<BundleInfo> additionalBundlesRequired) {
_applicationMetadata = app.getApplicationMetadata();
_deploymentContent = new ArrayList<DeploymentContent>();
+
+ // DeploymentContent needs to list everything in the application content
+ // plus all the bundles in additonalBundlesRequired
+ for (Content c: _applicationMetadata.getApplicationContents()) {
+ _deploymentContent.add(new DeploymentContentImpl(c.getContentName(), c.getVersion().getMinimumVersion()));
+ }
for (BundleInfo bundleInfo : additionalBundlesRequired) {
DeploymentContentImpl dci = new DeploymentContentImpl(bundleInfo.getSymbolicName(),
bundleInfo.getVersion());
Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/AppConstants.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/AppConstants.java?rev=896491&r1=896490&r2=896491&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/AppConstants.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/AppConstants.java Wed Jan 6 15:50:22 2010
@@ -51,6 +51,10 @@
public static final String LOWER_CASE_JAR_SUFFIX = ".jar";
/** The expected lower case suffix of a war file */
public static final String LOWER_CASE_WAR_SUFFIX = ".war";
+ /** The attribute used to record the deployed version of a bundle */
+ public static final String DEPLOYMENT_BUNDLE_VERSION = "deployed-version";
+ /** The name of the bundle manifest */
+ public static final String MANIFEST_MF = "META-INF/MANIFEST.MF";
public static final String MANIFEST_VERSION="1.0";
}
Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java?rev=896491&r1=896490&r2=896491&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java Wed Jan 6 15:50:22 2010
@@ -31,6 +31,9 @@
import java.util.jar.Attributes;
import java.util.jar.Manifest;
+import org.apache.aries.application.filesystem.IDirectory;
+import org.apache.aries.application.filesystem.IFile;
+
/**
* This class contains utilities for parsing manifests. It provides methods to
* parse the manifest, read a manifest into a map and to split an manifest
@@ -124,6 +127,24 @@
}
/**
+ * Obtain a manifest from an IDirectory.
+ *
+ * @param appDir
+ * @param manifestName the name of manifest
+ * @return Manifest, or null if none found.
+ * @throws IOException
+ */
+ public static Manifest obtainManifestFromAppDir(IDirectory appDir, String manifestName) throws IOException{
+ IFile manifestFile = appDir.getFile(manifestName);
+ Manifest man = null;
+ if (manifestFile != null) {
+ man = parseManifest(manifestFile.open());
+ }
+ return man;
+ }
+
+
+ /**
*
* Splits a delimiter separated string, tolerating presence of non separator commas
* within double quoted segments.
Copied: incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/impl/ApplicationMetadataImplTest.java (from r894900, incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/ApplicationMetadataImplTest.java)
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/impl/ApplicationMetadataImplTest.java?p2=incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/impl/ApplicationMetadataImplTest.java&p1=incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/ApplicationMetadataImplTest.java&r1=894900&r2=896491&rev=896491&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/ApplicationMetadataImplTest.java (original)
+++ incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/impl/ApplicationMetadataImplTest.java Wed Jan 6 15:50:22 2010
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.aries.application.utils;
+package org.apache.aries.application.impl;
import java.io.IOException;
Added: incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/impl/DeploymentContentImplTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/impl/DeploymentContentImplTest.java?rev=896491&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/impl/DeploymentContentImplTest.java (added)
+++ incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/impl/DeploymentContentImplTest.java Wed Jan 6 15:50:22 2010
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 WARRANTIESOR 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.application.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.aries.application.VersionRange;
+import org.junit.Test;
+import org.osgi.framework.Version;
+
+public class DeploymentContentImplTest {
+
+ @Test
+ public void testDeploymentContent001() throws Exception {
+ DeploymentContentImpl dc = new DeploymentContentImpl("com.travel.reservation.web;deployed-version=\"1.1.0\"");
+ assertEquals("1.1.0", dc.getAttribute("deployed-version"));
+ VersionRange vi = dc.getVersion();
+ assertTrue(vi.isExactVersion());
+ assertEquals(new Version("1.1.0"), dc.getExactVersion());
+ assertEquals("com.travel.reservation.web", dc.getContentName());
+ assertEquals("{deployed-version->1.1.0}", dc.getNameValueMap().toString());
+ }
+
+ @Test
+ public void testDeploymentContent002() throws Exception {
+ DeploymentContentImpl dc = new DeploymentContentImpl("com.travel.reservation.business;deployed-version=2.0");
+ assertEquals("2.0", dc.getAttribute("deployed-version"));
+ VersionRange vi = dc.getVersion();
+ assertTrue(vi.isExactVersion());
+ assertEquals(new Version("2.0"), dc.getExactVersion());
+ assertEquals("com.travel.reservation.business", dc.getContentName());
+ assertEquals("{deployed-version->2.0}", dc.getNameValueMap().toString());
+ }
+
+
+ @Test
+ public void testDeploymentContent003() throws Exception {
+ DeploymentContentImpl dc = new DeploymentContentImpl("com.travel.reservation.data;deployed-version=2.1.1");
+ assertEquals("2.1.1", dc.getAttribute("deployed-version"));
+ VersionRange vi = dc.getVersion();
+ assertTrue(vi.isExactVersion());
+ assertEquals(new Version("2.1.1"), dc.getExactVersion());
+ assertEquals("com.travel.reservation.data", dc.getContentName());
+ assertEquals("{deployed-version->2.1.1}", dc.getNameValueMap().toString());
+ }
+}
+
Copied: incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/impl/VersionRangeTest.java (from r894900, incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/VersionRangeTest.java)
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/impl/VersionRangeTest.java?p2=incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/impl/VersionRangeTest.java&p1=incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/VersionRangeTest.java&r1=894900&r2=896491&rev=896491&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/VersionRangeTest.java (original)
+++ incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/impl/VersionRangeTest.java Wed Jan 6 15:50:22 2010
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.aries.application.utils;
+package org.apache.aries.application.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;