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/08/26 13:58:36 UTC
svn commit: r989620 - in
/incubator/aries/trunk/application/application-utils/src/main:
java/org/apache/aries/application/impl/
java/org/apache/aries/application/utils/
java/org/apache/aries/application/utils/filesystem/impl/
java/org/apache/aries/appl...
Author: mnuttall
Date: Thu Aug 26 11:58:36 2010
New Revision: 989620
URL: http://svn.apache.org/viewvc?rev=989620&view=rev
Log:
ARIES-361: Provisioning changes required to support application isolation. From a patch submitted by Emily Jiang.
Added:
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/FilterUtils.java
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/runtime/DefaultPlatformRepository.java
Modified:
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataImpl.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/DeploymentMetadataFactoryImpl.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/impl/ServiceDeclarationImpl.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/filesystem/impl/DirectoryImpl.java
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/filesystem/impl/ZipDirectory.java
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/management/SimpleBundleInfo.java
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestHeaderProcessor.java
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/runtime/NoOpResolver.java
incubator/aries/trunk/application/application-utils/src/main/resources/OSGI-INF/blueprint/app-utils.xml
Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataImpl.java?rev=989620&r1=989619&r2=989620&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataImpl.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataImpl.java Thu Aug 26 11:58:36 2010
@@ -23,6 +23,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -36,8 +37,12 @@ import org.apache.aries.application.Appl
import org.apache.aries.application.Content;
import org.apache.aries.application.ServiceDeclaration;
import org.apache.aries.application.utils.AppConstants;
-import org.apache.aries.application.utils.manifest.ManifestProcessor;
+import org.apache.aries.application.utils.manifest.ManifestHeaderProcessor;
+import org.apache.aries.application.utils.manifest.ManifestHeaderProcessor.NameValueMap;
+import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.Version;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Implementation of ApplicationMetadata and DeploymentMetadata
@@ -45,6 +50,7 @@ import org.osgi.framework.Version;
*/
public final class ApplicationMetadataImpl implements ApplicationMetadata
{
+ private static final Logger _logger = LoggerFactory.getLogger("org.apache.aries.application.management.impl");
private String appSymbolicName;
private Version appVersion;
private String appName;
@@ -53,7 +59,7 @@ public final class ApplicationMetadataIm
private List<ServiceDeclaration> importServices;
private List<ServiceDeclaration> exportServices;
private Manifest manifest;
-
+ private List<Content> useBundle;
/**
* create the applicationMetadata from appManifest
* @param appManifest the Application.mf manifest
@@ -61,8 +67,9 @@ public final class ApplicationMetadataIm
public ApplicationMetadataImpl(Manifest appManifest) {
this.appContents = new ArrayList<Content>();
+ this.useBundle = new ArrayList<Content>();
this.importServices = new ArrayList<ServiceDeclaration>();
- this.exportServices = new ArrayList<ServiceDeclaration>();
+ this.exportServices = new ArrayList<ServiceDeclaration>();
setup(appManifest);
// As of 7 Jan 2010 we have no setter methods. Hence it's currently
@@ -90,13 +97,42 @@ public final class ApplicationMetadataIm
}
// configure appContents
+ // use parseImportString as we don't allow appContents to be duplicate
String applicationContents = appMap.get(AppConstants.APPLICATION_CONTENT);
- List<String> appContentsArray = ManifestProcessor.split(applicationContents, ",");
- for (String content : appContentsArray) {
- this.appContents.add(new ContentImpl(content));
+ Map<String, NameValueMap<String, String>> appContentsMap = ManifestHeaderProcessor.parseImportString(applicationContents);
+ for (Map.Entry<String, NameValueMap<String, String>> e : appContentsMap.entrySet()) {
+ this.appContents.add(new ContentImpl(e.getKey(), e.getValue()));
+ }
+
+ String useBundleStr = appMap.get(AppConstants.APPLICATION_USE_BUNDLE);
+ if (useBundleStr != null) {
+ Map<String, NameValueMap<String, String>> useBundleMap = ManifestHeaderProcessor.parseImportString(useBundleStr);
+ for (Map.Entry<String, NameValueMap<String, String>> e : useBundleMap.entrySet()) {
+ this.useBundle.add(new ContentImpl(e.getKey(), e.getValue()));
+ }
}
- // TODO: configure importServices + exportServices
+ String allServiceImports = appMap.get(AppConstants.APPLICATION_IMPORT_SERVICE);
+ List<String> serviceImports = ManifestHeaderProcessor.split(allServiceImports, ",");
+ for (String s: serviceImports) {
+ try {
+ ServiceDeclaration dec = new ServiceDeclarationImpl(s);
+ importServices.add(dec);
+ } catch (InvalidSyntaxException ise) {
+ _logger.warn("APPUTILS0013E", new Object[] {s, appSymbolicName});
+ }
+ }
+
+ String allServiceExports = appMap.get(AppConstants.APPLICATION_EXPORT_SERVICE);
+ List<String> serviceExports = ManifestHeaderProcessor.split(allServiceExports, ",");
+ for (String s: serviceExports) {
+ try {
+ ServiceDeclaration dec = new ServiceDeclarationImpl(s);
+ exportServices.add(dec);
+ } catch (InvalidSyntaxException ise) {
+ _logger.warn("APPUTILS0014E", new Object[] {s, appSymbolicName});
+ }
+ }
}
@@ -193,4 +229,9 @@ public final class ApplicationMetadataIm
manifest.write(out);
}
}
+
+ public Collection<Content> getUseBundles()
+ {
+ return this.useBundle;
+ }
}
\ No newline at end of file
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=989620&r1=989619&r2=989620&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 Thu Aug 26 11:58:36 2010
@@ -66,6 +66,12 @@ public final class ContentImpl implement
setup();
}
+ public ContentImpl (String bundleSymbolicName, VersionRange version) {
+ this.contentName = bundleSymbolicName;
+ this.nameValueMap = new NameValueMap<String, String>();
+ nameValueMap.put("version", version.toString());
+ setup();
+ }
/**
*
* @param contentName
Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataFactoryImpl.java?rev=989620&r1=989619&r2=989620&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataFactoryImpl.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/DeploymentMetadataFactoryImpl.java Thu Aug 26 11:58:36 2010
@@ -29,6 +29,7 @@ import org.apache.aries.application.Depl
import org.apache.aries.application.filesystem.IFile;
import org.apache.aries.application.management.AriesApplication;
import org.apache.aries.application.management.BundleInfo;
+import org.apache.aries.application.management.InvalidAttributeException;
import org.apache.aries.application.management.ResolverException;
import org.apache.aries.application.utils.manifest.ManifestProcessor;
@@ -58,7 +59,11 @@ public class DeploymentMetadataFactoryIm
public DeploymentMetadata createDeploymentMetadata(Manifest manifest) throws IOException
{
- return new DeploymentMetadataImpl(manifest);
+ try {
+ return new DeploymentMetadataImpl(manifest);
+ } catch (InvalidAttributeException iae) {
+ throw new IOException(iae);
+ }
}
public DeploymentMetadata createDeploymentMetadata(IFile src) throws IOException
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=989620&r1=989619&r2=989620&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 Thu Aug 26 11:58:36 2010
@@ -25,8 +25,10 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -40,21 +42,33 @@ import org.apache.aries.application.Depl
import org.apache.aries.application.VersionRange;
import org.apache.aries.application.management.AriesApplication;
import org.apache.aries.application.management.BundleInfo;
+import org.apache.aries.application.management.InvalidAttributeException;
import org.apache.aries.application.management.ResolverException;
import org.apache.aries.application.utils.AppConstants;
+import org.apache.aries.application.utils.FilterUtils;
import org.apache.aries.application.utils.manifest.ManifestProcessor;
+import org.osgi.framework.Filter;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.Version;
public class DeploymentMetadataImpl implements DeploymentMetadata {
private ApplicationMetadata _applicationMetadata;
private List<DeploymentContent> _deploymentContent = new ArrayList<DeploymentContent>();
private List<DeploymentContent> _provisionSharedContent = new ArrayList<DeploymentContent>();
+ private List<DeploymentContent> _deployedUseBundleContent = new ArrayList<DeploymentContent>();
+
+ private Set<Content> _deploymentImportPackage = new HashSet<Content>();
+ private Map<String, String> _deploymentCustomEntries = new HashMap<String, String>();
+ private Map<String, String> _deploymentEntries = new HashMap<String, String>();
+ private Collection<Filter> _deployedImportService = new ArrayList<Filter>();
public DeploymentMetadataImpl (AriesApplication app, Set<BundleInfo> bundlesRequired) throws ResolverException
{
_applicationMetadata = app.getApplicationMetadata();
_deploymentContent = new ArrayList<DeploymentContent>();
_provisionSharedContent = new ArrayList<DeploymentContent>();
+ _deployedUseBundleContent = new ArrayList<DeploymentContent>();
Map<String, VersionRange> appContent = new HashMap<String, VersionRange>();
@@ -62,18 +76,26 @@ public class DeploymentMetadataImpl impl
appContent.put(c.getContentName(), c.getVersion());
}
+ Map<String, VersionRange> useBundles = new HashMap<String, VersionRange>();
+ for (Content c : app.getApplicationMetadata().getUseBundles()) {
+ useBundles.put(c.getContentName(), c.getVersion());
+ }
+
for (BundleInfo info : bundlesRequired) {
- VersionRange range = appContent.get(info.getSymbolicName());
-
+ VersionRange appContentRange = appContent.get(info.getSymbolicName());
+ VersionRange useBundleRange = useBundles.get(info.getSymbolicName());
DeploymentContent dp = new DeploymentContentImpl(info.getSymbolicName(), info.getVersion());
- if (range == null) {
+ if ((appContentRange == null) && (useBundleRange == null)){
_provisionSharedContent.add(dp);
- } else if (range.matches(info.getVersion())) {
+ } else if (appContentRange.matches(info.getVersion())) {
_deploymentContent.add(dp);
- } else {
- throw new ResolverException("Bundle " + info.getSymbolicName() + " at version " + info.getVersion() + " is not in the range " + range);
+ } else if (useBundleRange.matches(info.getVersion())) {
+ _deployedUseBundleContent.add(dp);
+ }
+ else {
+ throw new ResolverException("Bundle " + info.getSymbolicName() + " at version " + info.getVersion() + " is not in the range " + appContentRange + " or " + useBundleRange);
}
}
}
@@ -83,15 +105,86 @@ public class DeploymentMetadataImpl impl
* @param src
* @throws IOException
*/
- public DeploymentMetadataImpl(Manifest mf) {
+ public DeploymentMetadataImpl(Manifest mf) throws InvalidAttributeException{
_applicationMetadata = new ApplicationMetadataImpl (mf);
Attributes attributes = mf.getMainAttributes();
- parseContent(attributes.getValue(AppConstants.DEPLOYMENT_CONTENT), _deploymentContent);
- parseContent(attributes.getValue(AppConstants.PROVISION_CONTENT), _provisionSharedContent);
+ parseDeploymentContent(attributes.getValue(AppConstants.DEPLOYMENT_CONTENT), _deploymentContent);
+ parseDeploymentContent(attributes.getValue(AppConstants.DEPLOYMENT_PROVISION_BUNDLE), _provisionSharedContent);
+ parseDeploymentContent(attributes.getValue(AppConstants.DEPLOYMENT_USE_BUNDLE), _deployedUseBundleContent);
+ parseContent(attributes.getValue(AppConstants.DEPLOYMENT_IMPORT_PACKAGES), _deploymentImportPackage);
+
+ _deployedImportService = getFilters(attributes.getValue(AppConstants.DEPLOYMENTSERVICE_IMPORT));
+ _deploymentCustomEntries = getCustomEntries(attributes);
+ _deploymentEntries = getEntries(attributes);
+ }
+
+ public DeploymentMetadataImpl(Map<String, String> map) throws InvalidAttributeException{
+
+ Attributes attributes = new Attributes();
+ if (map != null) {
+ for (Map.Entry<String, String> entry : map.entrySet()) {
+ attributes.putValue(entry.getKey(), entry.getValue());
+ }
+ }
+ parseDeploymentContent(map.get(AppConstants.DEPLOYMENT_CONTENT), _deploymentContent);
+ parseDeploymentContent(map.get(AppConstants.DEPLOYMENT_PROVISION_BUNDLE), _provisionSharedContent);
+ parseDeploymentContent(map.get(AppConstants.DEPLOYMENT_USE_BUNDLE), _deployedUseBundleContent);
+ parseContent(attributes.getValue(AppConstants.DEPLOYMENT_IMPORT_PACKAGES), _deploymentImportPackage);
+ _deployedImportService = getFilters(attributes.getValue(AppConstants.DEPLOYMENTSERVICE_IMPORT));
+ _deploymentCustomEntries = getCustomEntries(attributes);
+ _deploymentEntries = getEntries(attributes);
+
+ }
+
+ private Collection<Attributes.Name> getDeploymentStandardHeaders() {
+ Collection<Attributes.Name> standardKeys = new HashSet<Attributes.Name> ();
+ standardKeys.add(new Attributes.Name(AppConstants.APPLICATION_MANIFEST_VERSION));
+ standardKeys.add(new Attributes.Name(AppConstants.DEPLOYMENT_CONTENT));
+ standardKeys.add(new Attributes.Name(AppConstants.DEPLOYMENT_PROVISION_BUNDLE));
+ standardKeys.add(new Attributes.Name(AppConstants.DEPLOYMENT_USE_BUNDLE));
+ standardKeys.add(new Attributes.Name(AppConstants.DEPLOYMENT_IMPORT_PACKAGES));
+ standardKeys.add(new Attributes.Name(AppConstants.DEPLOYMENTSERVICE_IMPORT));
+ standardKeys.add(new Attributes.Name(AppConstants.APPLICATION_SYMBOLIC_NAME));
+ standardKeys.add(new Attributes.Name(AppConstants.APPLICATION_VERSION));
+ return standardKeys;
}
+ private Collection<String> getCustomHeaders(Attributes attrs) {
+
+ Collection<String> customKeys = new HashSet<String>();
+ Collection<Attributes.Name> standardKeys = getDeploymentStandardHeaders();
+ if ((attrs != null) && (!!!attrs.isEmpty())) {
+ Set<Object> keys = attrs.keySet();
+
+ if ((keys != null) && (!!!keys.isEmpty())) {
+ for (Object eachKey : keys) {
+ String key = eachKey.toString();
+ customKeys.add(key);
+ }
+
+ customKeys.removeAll(standardKeys);
+
+ }
+ }
+ return customKeys;
+ }
+
+ private String getContentsAsString (Collection<Content> contents) {
+ StringBuilder builder = new StringBuilder();
+ boolean beginning = true;
+ for (Content c : contents) {
+ if (!!!beginning) {
+ builder.append(",");
+ }
+ builder.append(c);
+ beginning = false;
+
+ }
+ return builder.toString();
+ }
+
public List<DeploymentContent> getApplicationDeploymentContents() {
return Collections.unmodifiableList(_deploymentContent);
}
@@ -126,11 +219,26 @@ public class DeploymentMetadataImpl impl
attributes.putValue(Attributes.Name.MANIFEST_VERSION.toString(), AppConstants.MANIFEST_VERSION);
attributes.putValue(AppConstants.APPLICATION_VERSION, getApplicationVersion().toString());
attributes.putValue(AppConstants.APPLICATION_SYMBOLIC_NAME, getApplicationSymbolicName());
- if (!_deploymentContent.isEmpty()) {
+ if ((_deploymentContent != null) && (!_deploymentContent.isEmpty())) {
attributes.putValue(AppConstants.DEPLOYMENT_CONTENT, getDeploymentContentsAsString(_deploymentContent));
}
- if (!_provisionSharedContent.isEmpty()) {
- attributes.putValue(AppConstants.PROVISION_CONTENT, getDeploymentContentsAsString(_provisionSharedContent));
+ if ((_provisionSharedContent != null) && (!_provisionSharedContent.isEmpty())) {
+ attributes.putValue(AppConstants.DEPLOYMENT_PROVISION_BUNDLE, getDeploymentContentsAsString(_provisionSharedContent));
+ }
+ if ((_deployedUseBundleContent != null) && (!_deployedUseBundleContent.isEmpty())) {
+ attributes.putValue(AppConstants.DEPLOYMENT_USE_BUNDLE, getDeploymentContentsAsString(_deployedUseBundleContent));
+ }
+ if ((_deploymentImportPackage != null) && (!_deploymentImportPackage.isEmpty())) {
+ attributes.putValue(AppConstants.DEPLOYMENT_IMPORT_PACKAGES, getContentsAsString(_deploymentImportPackage));
+ }
+ if ((_deployedImportService != null) && (!!!_deployedImportService.isEmpty())) {
+ attributes.putValue(AppConstants.DEPLOYMENTSERVICE_IMPORT, convertFiltersToString(_deployedImportService, ",") );
+ }
+ // let's write out the custom headers
+ if ((_deploymentCustomEntries != null) && (_deploymentCustomEntries.isEmpty())) {
+ for (Map.Entry<String, String> customEntry : _deploymentCustomEntries.entrySet()) {
+ attributes.putValue(customEntry.getKey(), customEntry.getValue());
+ }
}
mf.write(out);
}
@@ -151,7 +259,7 @@ public class DeploymentMetadataImpl impl
return builder.toString();
}
- private void parseContent(String content, List<DeploymentContent> contents)
+ private void parseDeploymentContent(String content, List<DeploymentContent> contents)
{
List<String> pcList = ManifestProcessor.split(content, ",");
for (String s : pcList) {
@@ -159,13 +267,88 @@ public class DeploymentMetadataImpl impl
}
}
+ private void parseContent(String content, Collection<Content> contents)
+ {
+ List<String> pcList = ManifestProcessor.split(content, ",");
+ for (String s : pcList) {
+ contents.add(new ContentImpl(s));
+ }
+ }
+
+
public List<DeploymentContent> getDeployedUseBundle()
{
- return new ArrayList<DeploymentContent>();
+ return Collections.unmodifiableList(_deployedUseBundleContent);
}
public Set<Content> getImportPackage()
{
- return null;
+ return Collections.unmodifiableSet(_deploymentImportPackage);
}
+
+ public Collection<Filter> getDeployedServiceImport() throws InvalidAttributeException
+ {
+ return Collections.unmodifiableCollection(_deployedImportService);
+ }
+
+ public Map<String, String> getHeaders()
+ {
+ return Collections.unmodifiableMap(_deploymentEntries);
+ }
+
+ private Map<String, String> getEntries(Attributes attrs) {
+ Map<String, String> entries = new HashMap<String, String>();
+ if ((attrs != null) && (!attrs.isEmpty())) {
+ Set<Object> keys = attrs.keySet();
+ for (Object key : keys) {
+ entries.put(key.toString(), attrs.getValue((Attributes.Name)key));
+ }
+ }
+ return entries;
+ }
+
+
+ private Map<String, String> getCustomEntries(Attributes attrs) {
+ Map<String, String> customEntry = new HashMap<String, String> ();
+ Collection<String> customHeaders = getCustomHeaders(attrs);
+ if ((customHeaders != null) && (customHeaders.isEmpty())) {
+ for (String customHeader : customHeaders)
+ customEntry.put(customHeader, attrs.getValue(customHeader));
+
+ }
+ return customEntry;
+
+ }
+
+ private Collection<Filter> getFilters(String filterString) throws InvalidAttributeException{
+ Collection<Filter> filters = new ArrayList<Filter>();
+ List<String> fs = ManifestProcessor.split(filterString, ",");
+ if ((fs != null) && (!!!fs.isEmpty())) {
+ for (String filter : fs) {
+ try {
+ filters.add(FrameworkUtil.createFilter(FilterUtils.removeMandatoryFilterToken(filter)));
+ } catch (InvalidSyntaxException ise) {
+ InvalidAttributeException iae = new InvalidAttributeException(ise);
+ throw iae;
+ }
+ }
+ }
+ return filters;
+ }
+
+ private String convertFiltersToString(Collection<Filter> contents, String separator) {
+ StringBuilder newContent = new StringBuilder();
+ if ((contents != null) && (!!!contents.isEmpty())) {
+ boolean beginning = true;
+ for (Filter content: contents) {
+ if (beginning)
+ newContent.append(separator);
+ newContent.append(content.toString());
+ beginning = false;
+ }
+ }
+ return newContent.toString();
+ }
+
+
}
\ No newline at end of file
Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ServiceDeclarationImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ServiceDeclarationImpl.java?rev=989620&r1=989619&r2=989620&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ServiceDeclarationImpl.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ServiceDeclarationImpl.java Thu Aug 26 11:58:36 2010
@@ -18,13 +18,12 @@
*/
package org.apache.aries.application.impl;
+import org.apache.aries.application.Content;
+import org.apache.aries.application.ServiceDeclaration;
import org.osgi.framework.Filter;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.InvalidSyntaxException;
-import org.apache.aries.application.Content;
-import org.apache.aries.application.ServiceDeclaration;
-
/**
* this class represents the Import-Services and Export-Services
* in the Application.mf file
@@ -70,4 +69,29 @@ public class ServiceDeclarationImpl impl
{
return this.filter;
}
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((filter == null) ? 0 : filter.hashCode());
+ result = prime * result + ((interfaceName == null) ? 0 : interfaceName.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj) return true;
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+ ServiceDeclarationImpl other = (ServiceDeclarationImpl) obj;
+ if (filter == null) {
+ if (other.filter != null) return false;
+ } else if (!filter.equals(other.filter)) return false;
+ if (interfaceName == null) {
+ if (other.interfaceName != null) return false;
+ } else if (!interfaceName.equals(other.interfaceName)) return false;
+ return true;
+ }
}
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=989620&r1=989619&r2=989620&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 Thu Aug 26 11:58:36 2010
@@ -27,8 +27,9 @@ public interface AppConstants
/** Trace group for this bundle */
public String TRACE_GROUP = "Aries.app.utils";
- /** The Provision-Content header for the deployment.mf */
- public static final String PROVISION_CONTENT = "Provision-Bundle";
+
+ /** The Manifest version */
+ public static final String APPLICATION_MANIFEST_VERSION="Manifest-Version";
/** The application scope (used to find the applications bundle repository */
public static final String APPLICATION_SCOPE = "Application-Scope";
@@ -60,12 +61,24 @@ public interface AppConstants
public static final String MANIFEST_MF = "META-INF/MANIFEST.MF";
public static final String MANIFEST_VERSION="1.0";
-
+ /** The application import service directive for the application manifest */
+ public static final String APPLICATION_IMPORT_SERVICE = "Application-ImportService";
+ /** The application export service directive for the application manifest */
+ public static final String APPLICATION_EXPORT_SERVICE = "Application-ExportService";
+ /** The use-bundle entry for the application manifest. */
+ public static final String APPLICATION_USE_BUNDLE = "Use-Bundle";
/* The Deployed-Content header in DEPLOYMENT.MF records all the bundles
* to be deployed for a particular application.
*/
public static final String DEPLOYMENT_CONTENT = "Deployed-Content";
-
+ /** deployment.mf entry corresponding to application.mf Use-Bundle. */
+ public static final String DEPLOYMENT_USE_BUNDLE = "Deployed-Use-Bundle";
+ /** deployment.mf entry 'Import-Package' */
+ public static final String DEPLOYMENT_IMPORT_PACKAGES="Import-Package";
+ /** Bundle dependencies required by bundles listed in Deployed-Content or Deployed-Use-Bundle. */
+ public static final String DEPLOYMENT_PROVISION_BUNDLE = "Provision-Bundle";
+ /** Blueprint managed services imported by the isolated bundles */
+ public static final String DEPLOYMENTSERVICE_IMPORT = "DeployedService-Import";
/**
* Logging insert strings
*/
Added: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/FilterUtils.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/FilterUtils.java?rev=989620&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/FilterUtils.java (added)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/FilterUtils.java Thu Aug 26 11:58:36 2010
@@ -0,0 +1,63 @@
+/*
+ * @start_prolog@
+ * ============================================================================
+ * IBM Confidential OCO Source Materials
+ *
+ * 5724-J08, 5724-I63, 5724-H88, 5724-H89, 5655-N02, 5733-W70 Copyright IBM Corp. 2010
+ *
+ * The source code for this program is not published or otherwise divested
+ * of its trade secrets, irrespective of what has been deposited with the
+ * U.S. Copyright Office.
+ * ============================================================================
+ * @end_prolog@
+ *
+ * Change activity:
+ *
+ * Issue Date Name Description
+ * ----------- ----------- -------- ------------------------------------
+ */
+package org.apache.aries.application.utils;
+
+import static org.apache.aries.application.utils.AppConstants.LOG_ENTRY;
+import static org.apache.aries.application.utils.AppConstants.LOG_EXIT;
+
+import java.util.regex.Pattern;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+public class FilterUtils
+{
+ private static final Pattern regexp = Pattern.compile("\\(mandatory:.*?\\)");
+
+ private static final Logger logger = LoggerFactory.getLogger(FilterUtils.class);
+ /**
+ * Filters we generate may contain stanzas like (mandatory:<*symbolicname)
+ * These are for OBR, and are not OSGi friendly!!! This method removes them.
+ *
+ * @param filter
+ * @return A filter with the mandatory stanzas removed or null if a null filter is supplied
+ */
+ public static String removeMandatoryFilterToken(String filter) {
+ logger.debug(LOG_ENTRY, "areMandatoryAttributesPresent", new Object[]{filter});
+ if(filter != null) {
+ filter = regexp.matcher(filter).replaceAll("");
+
+ int openBraces = 0;
+ for (int i=0; openBraces < 3; i++) {
+ i = filter.indexOf('(', i);
+ if (i == -1) {
+ break;
+ } else {
+ openBraces++;
+ }
+ }
+ // Need to prune (& or (| off front and ) off end
+ if (openBraces < 3 &&
+ (filter.startsWith("(&") || filter.startsWith("(|"))) {
+ filter = filter.substring(2, filter.length() - 1);
+ }
+ }
+ logger.debug(LOG_EXIT, "removeMandatoryFilterToken", filter);
+ return filter;
+ }
+}
Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/filesystem/impl/DirectoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/filesystem/impl/DirectoryImpl.java?rev=989620&r1=989619&r2=989620&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/filesystem/impl/DirectoryImpl.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/filesystem/impl/DirectoryImpl.java Thu Aug 26 11:58:36 2010
@@ -28,7 +28,6 @@ import java.util.List;
import org.apache.aries.application.filesystem.IDirectory;
import org.apache.aries.application.filesystem.IFile;
-import org.apache.aries.application.utils.AppConstants;
/**
* An IDirectory representing a java.io.File whose isDirectory method returns true.
@@ -81,6 +80,37 @@ public class DirectoryImpl extends FileI
}
return files;
}
+ public List<IFile> listAllFiles()
+ {
+ List<IFile> files = new ArrayList<IFile>();
+ File[] filesInDir = file.listFiles();
+ if (filesInDir != null) {
+ for (File f : filesInDir) {
+ if (f.isFile()) {
+ files.add(new FileImpl(f, rootDirFile));
+ } else if (f.isDirectory()) {
+ files.add(new DirectoryImpl(f, rootDirFile));
+ listSubDirectoryFiles(files, f);
+ }
+ }
+ }
+ return files;
+ }
+
+ private void listSubDirectoryFiles(List<IFile> lists, File file) {
+ File[] filesInDir = file.listFiles();
+ if (filesInDir != null) {
+ for (File f : filesInDir) {
+ if (f.isFile()) {
+ lists.add(new FileImpl(f, rootDirFile));
+ } else if (f.isDirectory()) {
+ lists.add(new DirectoryImpl(f, rootDirFile));
+ listSubDirectoryFiles(lists, f);
+ }
+ }
+ }
+
+ }
public Iterator<IFile> iterator()
{
Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/filesystem/impl/ZipDirectory.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/filesystem/impl/ZipDirectory.java?rev=989620&r1=989619&r2=989620&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/filesystem/impl/ZipDirectory.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/filesystem/impl/ZipDirectory.java Thu Aug 26 11:58:36 2010
@@ -141,6 +141,25 @@ public class ZipDirectory extends ZipFil
return files;
}
+ public List<IFile> listAllFiles()
+ {
+ List<IFile> files = new ArrayList<IFile>();
+
+ ZipFile z = openZipFile();
+ Enumeration<? extends ZipEntry> entries = z.entries();
+
+ while (entries.hasMoreElements()) {
+ ZipEntry possibleEntry = entries.nextElement();
+ if (possibleEntry.isDirectory()) {
+ files.add(new ZipDirectory(zip, possibleEntry, this));
+ } else {
+ files.add(new ZipFileImpl(zip, possibleEntry, this));
+ }
+
+ }
+ closeZipFile(z);
+ return files;
+ }
/**
* This method works out if the provided entry is inside this directory. It
* returns false if it is not, or if it is in a sub-directory.
Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/management/SimpleBundleInfo.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/management/SimpleBundleInfo.java?rev=989620&r1=989619&r2=989620&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/management/SimpleBundleInfo.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/management/SimpleBundleInfo.java Thu Aug 26 11:58:36 2010
@@ -161,4 +161,9 @@ public final class SimpleBundleInfo impl
{
return _contentName.getContentName() + "_" + getVersion();
}
+ public Attributes getRawAttributes()
+ {
+
+ return _attributes;
+ }
}
\ No newline at end of file
Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestHeaderProcessor.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestHeaderProcessor.java?rev=989620&r1=989619&r2=989620&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestHeaderProcessor.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestHeaderProcessor.java Thu Aug 26 11:58:36 2010
@@ -28,7 +28,9 @@ import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.apache.aries.application.Content;
import org.apache.aries.application.VersionRange;
+import org.apache.aries.application.impl.ContentImpl;
import org.apache.aries.application.impl.VersionRangeImpl;
import org.apache.aries.application.utils.internal.MessageUtil;
import org.osgi.framework.Constants;
@@ -690,5 +692,26 @@ public class ManifestHeaderProcessor
}
return result;
}
+
+ /**
+ * Parse a content object
+ * @param bundleSymbolicName bundle symbolic name
+ * @param versionRange version range in the String format
+ * @return Content object
+ */
+ public static Content parseContent(String bundleSymbolicName, String versionRange) {
+ return new ContentImpl(bundleSymbolicName, parseVersionRange(versionRange));
+ }
+
+ /**
+ * Parse a content
+ * @param contentName The content name
+ * @param nameValueMap The map containing the content attributes/directives
+ * @return a content object
+ */
+ public static Content parseContent(String contentName, NameValueMap<String, String> nameValueMap) {
+ return new ContentImpl(contentName, nameValueMap);
+ }
+
}
Added: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/runtime/DefaultPlatformRepository.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/runtime/DefaultPlatformRepository.java?rev=989620&view=auto
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/runtime/DefaultPlatformRepository.java (added)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/runtime/DefaultPlatformRepository.java Thu Aug 26 11:58:36 2010
@@ -0,0 +1,35 @@
+
+
+/*
+ * 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.utils.runtime;
+import java.net.URI;
+import java.util.Collection;
+
+import org.apache.aries.application.management.PlatformRepository;
+
+public class DefaultPlatformRepository implements PlatformRepository
+{
+ public Collection<URI> getPlatformRepositoryURLs()
+ {
+ return null;
+ }
+
+}
Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/runtime/NoOpResolver.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/runtime/NoOpResolver.java?rev=989620&r1=989619&r2=989620&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/runtime/NoOpResolver.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/runtime/NoOpResolver.java Thu Aug 26 11:58:36 2010
@@ -18,17 +18,17 @@
*/
package org.apache.aries.application.utils.runtime;
-import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.Collection;
import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
import java.util.Set;
+import org.apache.aries.application.Content;
import org.apache.aries.application.management.AriesApplication;
import org.apache.aries.application.management.AriesApplicationResolver;
import org.apache.aries.application.management.BundleInfo;
import org.apache.aries.application.management.ResolveConstraint;
+import org.apache.aries.application.management.ResolverException;
+import org.apache.aries.application.modelling.ModelledResource;
import org.osgi.framework.Version;
/** AriesApplicationManager requires that there be at least one
@@ -59,4 +59,12 @@ public class NoOpResolver implements Ari
}
return result;
}
+
+ public Collection<ModelledResource> resolve(String appName, String appVersion,
+ Collection<ModelledResource> byValueBundles, Collection<Content> inputs)
+ throws ResolverException
+ {
+
+ return byValueBundles;
+ }
}
\ No newline at end of file
Modified: incubator/aries/trunk/application/application-utils/src/main/resources/OSGI-INF/blueprint/app-utils.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/resources/OSGI-INF/blueprint/app-utils.xml?rev=989620&r1=989619&r2=989620&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/resources/OSGI-INF/blueprint/app-utils.xml (original)
+++ incubator/aries/trunk/application/application-utils/src/main/resources/OSGI-INF/blueprint/app-utils.xml Thu Aug 26 11:58:36 2010
@@ -37,5 +37,7 @@
<service interface="org.apache.aries.application.management.AriesApplicationResolver"
ref="no-op-resolver"
ranking="-1" />
+ <bean id="default-platform-repository" class="org.apache.aries.application.utils.runtime.DefaultPlatformRepository"/>
+ <service interface="org.apache.aries.application.management.PlatformRepository" ref="default-platform-repository" ranking="-1"/>
</blueprint>