You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by ma...@apache.org on 2009/10/25 16:28:31 UTC
svn commit: r829607 -
/incubator/ace/trunk/server/src/org/apache/ace/deployment/provider/filebased/FileBasedProvider.java
Author: marrs
Date: Sun Oct 25 15:28:31 2009
New Revision: 829607
URL: http://svn.apache.org/viewvc?rev=829607&view=rev
Log:
Applied the ACE-60 patch.
Modified:
incubator/ace/trunk/server/src/org/apache/ace/deployment/provider/filebased/FileBasedProvider.java
Modified: incubator/ace/trunk/server/src/org/apache/ace/deployment/provider/filebased/FileBasedProvider.java
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/server/src/org/apache/ace/deployment/provider/filebased/FileBasedProvider.java?rev=829607&r1=829606&r2=829607&view=diff
==============================================================================
--- incubator/ace/trunk/server/src/org/apache/ace/deployment/provider/filebased/FileBasedProvider.java (original)
+++ incubator/ace/trunk/server/src/org/apache/ace/deployment/provider/filebased/FileBasedProvider.java Sun Oct 25 15:28:31 2009
@@ -55,15 +55,10 @@
* org.osgi.framework.Version format.
*/
public class FileBasedProvider implements DeploymentProvider, ManagedService {
-
private static final String DIRECTORY_NAME = "BaseDirectoryName";
-
- private final int OSGI_R4_MANIFEST_VERSION = 2;
-
+ private static final int OSGI_R4_MANIFEST_VERSION = 2;
private volatile File m_baseDirectory;
-
private volatile LogService m_log;
-
private final Semaphore m_disk = new Semaphore(1, true);
/**
@@ -71,13 +66,20 @@
* .jar files in that directory. If the manifest cannot be found, This method can only parse OSGi R4 bundles
*/
public List<ArtifactData> getBundleData(String gatewayId, String version) throws IllegalArgumentException {
-
List<String> versions = getVersions(gatewayId);
if (!versions.contains(version)) {
throw new IllegalArgumentException("Unknown version " + version + " requested");
}
File gatewayDirectory = new File(m_baseDirectory, gatewayId);
- File versionDirectory = new File(gatewayDirectory, version);
+ File versionDirectory;
+ if (gatewayDirectory.isDirectory()) {
+ // gateway has its own folder
+ versionDirectory = findMatchingVersionDirectory(gatewayDirectory, version);
+ }
+ else {
+ // shared folder from m_baseDirectory
+ versionDirectory = findMatchingVersionDirectory(m_baseDirectory, version);
+ }
List<ArtifactData> bundleData = new ArrayList<ArtifactData>();
JarInputStream jarInputStream = null;
@@ -131,13 +133,10 @@
@Override
protected URLConnection openConnection(final URL u) throws IOException {
return new URLConnection(u) {
-
@Override
public void connect() throws IOException {
// TODO Auto-generated method stub
-
}
-
@Override
public InputStream getInputStream() throws IOException {
final InputStream parent;
@@ -169,15 +168,14 @@
}
}
- @Override
- public void close() throws IOException {
- parent.close();
- }
+ @Override
+ public void close() throws IOException {
+ parent.close();
+ }
};
}
};
}
-
});
bundleData.add(new ArtifactDataImpl(jarFile.getName(), symbolicName, bundleVersion, bundleUrl, true));
}
@@ -198,6 +196,53 @@
return bundleData;
}
+ /**
+ * Version folder and requested version do not always match (see implementation of getVersions, which uses Versions.parseVersion to allow different styles)
+ * like 1 instead of 1.0.0 and alike.
+ * So we need to do some crawling to map them.
+ *
+ * @param gatewayDirectory store directory
+ * @param version that has been requested.
+ *
+ * @return the matching folder.
+ *
+ * @throws IllegalArgumentException if no matching folder has been found. If this happens something is weirdly wrong.
+ */
+ private File findMatchingVersionDirectory(File gatewayDirectory, String version) {
+ // first try the direct way:
+ File directTry = new File(gatewayDirectory, version);
+ if ((directTry != null) && directTry.isDirectory()) {
+ return directTry;
+ }
+ // otherwise try to find it:
+ Version requestedVersion;
+ try {
+ requestedVersion = Version.parseVersion(version);
+ }
+ catch (IllegalArgumentException iae) {
+ throw new IllegalArgumentException("Requested version " + version + " has no matching folder in store: " + gatewayDirectory.getAbsolutePath());
+ }
+
+ File[] files = gatewayDirectory.listFiles();
+ for (int i = 0; i < files.length; i++) {
+ File possibleVersionDirectory = files[i];
+ if (possibleVersionDirectory.isDirectory()) {
+ // ok, it is a directory. Now see if it is a version
+ try {
+ Version foundVersion = Version.parseVersion(possibleVersionDirectory.getName());
+ // no exception, but is could still be an empty version
+ if ((requestedVersion != null) && requestedVersion.equals(foundVersion)) {
+ return new File(gatewayDirectory, possibleVersionDirectory.getName());
+ }
+ }
+ catch (IllegalArgumentException iae) {
+ // dont' care at this point.
+ }
+ }
+ }
+ throw new IllegalArgumentException("Requested version " + version + " has no matching folder in store: " + gatewayDirectory.getAbsolutePath());
+ }
+
public List<ArtifactData> getBundleData(String gatewayId, String versionFrom, String versionTo) throws IllegalArgumentException {
List<ArtifactData> dataVersionFrom = getBundleData(gatewayId, versionFrom);
List<ArtifactData> dataVersionTo = getBundleData(gatewayId, versionTo);
@@ -216,7 +261,6 @@
* Check for the existence of bundledata in the collection for a bundle with the given symbolic name
*
* @param symbolicName
- * @return
*/
private ArtifactData getBundleData(String symbolicName, Collection<ArtifactData> data) {
Iterator<ArtifactData> it = data.iterator();
@@ -240,32 +284,13 @@
List<Version> versionList = new ArrayList<Version>();
File gatewayDirectory = new File(m_baseDirectory.getAbsolutePath(), gatewayId);
if (gatewayDirectory.isDirectory()) {
- // ok, it is a directory. Now treat all the subdirectories as seperate versions
- File[] files = gatewayDirectory.listFiles();
- for (int i = 0; i < files.length; i++) {
- File possibleVersionDirectory = files[i];
- if (possibleVersionDirectory.isDirectory()) {
- // ok, it is a directory. Now see if it is a version
- try {
- Version version = Version.parseVersion(possibleVersionDirectory.getName());
- // no exception, but is could still be an empty version
- if (!version.equals(Version.emptyVersion)) {
- versionList.add(version);
- }
- }
- catch (IllegalArgumentException iae) {
- // do nothing. This version will be ignored.
- m_log.log(LogService.LOG_WARNING, "Directory " + possibleVersionDirectory.toString() + " does not contain a valid version number", iae);
- }
- }
- }
- if (files.length == 0) {
- m_log.log(LogService.LOG_DEBUG, "No versions found for gateway " + gatewayId);
- }
+ getVersions(gatewayId, versionList, gatewayDirectory);
}
else {
- throw new IllegalArgumentException("Gateway directory " + gatewayDirectory.toString() + " is requested but not found.");
+ // try from m_baseDirectory
+ getVersions(gatewayId, versionList, m_baseDirectory);
}
+
// now sort the list of versions and convert all values to strings.
Collections.sort(versionList);
List<String> stringVersionList = new ArrayList<String>();
@@ -278,6 +303,36 @@
}
/**
+ *
+ * @param gatewayId ID that requested versions
+ * @param versionList where collected versions will be put into.
+ * @param base folder to be crawled.
+ */
+ private void getVersions(String gatewayId, List<Version> versionList, File base) {
+ // ok, it is a directory. Now treat all the subdirectories as seperate versions
+ File[] files = base.listFiles();
+ for (int i = 0; i < files.length; i++) {
+ File possibleVersionDirectory = files[i];
+ if (possibleVersionDirectory.isDirectory()) {
+ // ok, it is a directory. Now see if it is a version
+ try {
+ Version version = Version.parseVersion(possibleVersionDirectory.getName());
+ // no exception, but is could still be an empty version
+ if (!version.equals(Version.emptyVersion)) {
+ versionList.add(version);
+ }
+ }
+ catch (IllegalArgumentException iae) {
+ // do nothing. This version will be ignored.
+ }
+ }
+ }
+ if (files.length == 0) {
+ m_log.log(LogService.LOG_DEBUG, "No versions found for gateway " + gatewayId);
+ }
+ }
+
+ /**
* Update the configuration for this bundle. It checks if the basedirectory exists and is a directory.
*/
@SuppressWarnings("unchecked")