/****************************************************************************** | |
* Copyright (c) 2006, 2010 VMware Inc. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License v1.0 | |
* and Apache License v2.0 which accompanies this distribution. | |
* The Eclipse Public License is available at | |
* http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0 | |
* is available at http://www.opensource.org/licenses/apache2.0.php. | |
* You may elect to redistribute this code under either of these licenses. | |
* | |
* Contributors: | |
* VMware Inc. | |
*****************************************************************************/ | |
package org.eclipse.gemini.blueprint.io.internal; | |
import java.net.URL; | |
import java.util.Enumeration; | |
import java.util.LinkedHashSet; | |
import java.util.Set; | |
import org.eclipse.gemini.blueprint.io.OsgiBundleResource; | |
import org.springframework.core.io.Resource; | |
import org.springframework.core.io.ResourceLoader; | |
import org.springframework.core.io.UrlResource; | |
import org.springframework.core.io.support.ResourcePatternResolver; | |
import org.springframework.util.Assert; | |
import org.springframework.util.StringUtils; | |
/** | |
* Utility class used for IO resources. | |
* | |
* @author Costin Leau | |
* | |
*/ | |
public abstract class OsgiResourceUtils { | |
public static final String EMPTY_PREFIX = ""; | |
public static final String PREFIX_DELIMITER = ":"; | |
public static final String FOLDER_DELIMITER = "/"; | |
// PREFIXES TYPES | |
// non-osgi prefixes (file, http) | |
public static final int PREFIX_TYPE_UNKNOWN = -1; | |
// no prefix | |
public static final int PREFIX_TYPE_NOT_SPECIFIED = 0x00000000; | |
// osgibundlejar: | |
public static final int PREFIX_TYPE_BUNDLE_JAR = 0x00000001; | |
// osgibundle: | |
public static final int PREFIX_TYPE_BUNDLE_SPACE = 0x00000010; | |
// classpath: | |
public static final int PREFIX_TYPE_CLASS_SPACE = 0x00000100; | |
// classpath*: | |
public static final int PREFIX_TYPE_CLASS_ALL_SPACE = 0x00000200; | |
/** | |
* Return the path prefix if there is any or {@link #EMPTY_PREFIX} | |
* otherwise. | |
* | |
* @param path | |
* @return | |
*/ | |
public static String getPrefix(String path) { | |
if (path == null) | |
return EMPTY_PREFIX; | |
int index = path.indexOf(PREFIX_DELIMITER); | |
return ((index > 0) ? path.substring(0, index + 1) : EMPTY_PREFIX); | |
} | |
/** | |
* Return the search type to be used for the give string based on the | |
* prefix. | |
* | |
* @param path | |
* @return | |
*/ | |
public static int getSearchType(String path) { | |
Assert.notNull(path); | |
int type = PREFIX_TYPE_NOT_SPECIFIED; | |
String prefix = getPrefix(path); | |
// no prefix is treated just like osgibundle: | |
if (!StringUtils.hasText(prefix)) | |
type = PREFIX_TYPE_NOT_SPECIFIED; | |
else if (prefix.startsWith(OsgiBundleResource.BUNDLE_URL_PREFIX)) | |
type = PREFIX_TYPE_BUNDLE_SPACE; | |
else if (prefix.startsWith(OsgiBundleResource.BUNDLE_JAR_URL_PREFIX)) | |
type = PREFIX_TYPE_BUNDLE_JAR; | |
else if (prefix.startsWith(ResourceLoader.CLASSPATH_URL_PREFIX)) | |
type = PREFIX_TYPE_CLASS_SPACE; | |
else if (prefix.startsWith(ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX)) | |
type = PREFIX_TYPE_CLASS_ALL_SPACE; | |
else | |
type = PREFIX_TYPE_UNKNOWN; | |
return type; | |
} | |
public static boolean isClassPathType(int type) { | |
return (type == PREFIX_TYPE_CLASS_SPACE || type == PREFIX_TYPE_CLASS_ALL_SPACE); | |
} | |
public static String stripPrefix(String path) { | |
// strip prefix | |
int index = path.indexOf(PREFIX_DELIMITER); | |
return (index > -1 ? path.substring(index + 1) : path); | |
} | |
public static Resource[] convertURLArraytoResourceArray(URL[] urls) { | |
if (urls == null) { | |
return new Resource[0]; | |
} | |
// convert this into a resource array | |
Resource[] res = new Resource[urls.length]; | |
for (int i = 0; i < urls.length; i++) { | |
res[i] = new UrlResource(urls[i]); | |
} | |
return res; | |
} | |
public static Resource[] convertURLEnumerationToResourceArray(Enumeration<URL> enm) { | |
Set<UrlResource> resources = new LinkedHashSet<UrlResource>(4); | |
while (enm != null && enm.hasMoreElements()) { | |
resources.add(new UrlResource(enm.nextElement())); | |
} | |
return (Resource[]) resources.toArray(new Resource[resources.size()]); | |
} | |
/** | |
* Similar to /path/path1/ -> /path/, /path/file -> /path/ | |
* | |
* @return | |
*/ | |
public static String findUpperFolder(String path) { | |
if (path.length() < 2) | |
return path; | |
String newPath = path; | |
// if it's a folder | |
if (path.endsWith(FOLDER_DELIMITER)) { | |
newPath = path.substring(0, path.length() - 1); | |
} | |
int index = newPath.lastIndexOf(FOLDER_DELIMITER); | |
if (index > 0) | |
return newPath.substring(0, index + 1); | |
else | |
// fallback to defaults | |
return path; | |
} | |
} |