|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectnet.sf.mmm.util.resource.base.AbstractDataResource
net.sf.mmm.util.resource.base.ClasspathResource
public class ClasspathResource
This is the implementation of the DataResource interface for a
resource that comes from the classpath.
A very nice feature of Java is to load resources from the classpath. This
allows that these resource are deployed within a jar-file. Adding a directory
to the beginning of the classpath still allows to override such a resource.
Anyways a typical mistake is illustrated by the following code example:
MyClass.class.getResourceAsStream("config.xml")
This will NOT allow to override resources in other classpath entries and
especially NOT work in situations where there are specific classloaders, what
is a typical situation in environments of applications servers or IoC
frameworks.context-class-loader to get resources what is done by this implementation. A
proper version of the example above is:
DataResourceresource =ClasspathResource((MyClass.class.getPackage(), "config.xml")); if (!resource.isAvailable()) { // possible fallback resource = getFallbackResource(); } InputStream inStream = resource.openStream(); ...
| Field Summary | |
|---|---|
private String |
path
|
static String |
SCHEME_PREFIX
The scheme-prefix for this type of
DataResource. |
private URL |
url
|
| Constructor Summary | |
|---|---|
ClasspathResource(Class<?> someClass,
String nameOrSuffix,
boolean append)
The constructor for a classpath-resource identified by someClass and the given nameOrSuffix. |
|
ClasspathResource(Package somePackage,
String filename)
The constructor. for a classpath-resource identified by somePackage and the given filename. |
|
ClasspathResource(String absoluteClasspath)
The constructor. |
|
| Method Summary | |
|---|---|
private static String |
getAbsolutePath(Class<?> someClass,
String nameOrSuffix,
boolean append)
|
Date |
getLastModificationDate()
This method gets the last modification date of the DataResource if
available and supported. |
String |
getPath()
This method gets the path of this resource. |
String |
getSchemePrefix()
This method gets the scheme-prefix of absolute URIs for this type of DataResource. |
String |
getUri()
This method gets a string identifying this DataResource. |
URL |
getUrl()
This method gets this resource as URL. |
boolean |
isData()
This method determines if this resource has potentially data available. |
DataResource |
navigate(String resourcePath)
This method creates a new DataResource pointing to the given
resourcePath based on this resource. |
| Methods inherited from class net.sf.mmm.util.resource.base.AbstractDataResource |
|---|
getName, getSize, isAvailable, isModifiedSince, openOutputStream, openStream, toString |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Field Detail |
|---|
public static final String SCHEME_PREFIX
scheme-prefix for this type of
DataResource.
private final String path
getUrl()private final URL url
getUrl()| Constructor Detail |
|---|
public ClasspathResource(String absoluteClasspath)
absoluteClasspath - is the absolute path to the resource. E.g.
"net/sf/mmm/util/resource/ClasspathResource.txt".
public ClasspathResource(Class<?> someClass,
String nameOrSuffix,
boolean append)
someClass and the given nameOrSuffix.newThis is the same as:ClasspathResource(ClasspathResource.class, ".xml", true)
newThis is the same as:ClasspathResource(ClasspathResource.class, "ClasspathResource.xml", false)
new ClasspathResource("net/sf/mmm/util/resource/ClasspathResource.xml")
someClass - is the class identifying the path where the resource is
located and the prefix of its filename.nameOrSuffix - is the filename of the resource or a suffix (e.g.
".properties" or "-test.xml") for it depending on
append.append - - if true the nameOrSuffix is
appended to the simple classname of
someClass or false if the simple name is
replaced by nameOrSuffix.ClasspathResource(Package, String)
public ClasspathResource(Package somePackage,
String filename)
somePackage and the given filename.newThis is the same as:ClasspathResource(ClasspathResource.class.getPackage(), "relection.properties")
newClasspathResource(ClasspathResource.class, "relection.properties", false)
somePackage - is the package identifying the path where the resource
is located.filename - is the name of the resource.ClasspathResource(Class, String, boolean)| Method Detail |
|---|
public String getSchemePrefix()
URIs for this type of DataResource. The scheme-prefix has the
following form:
<scheme>:<suffix>
where <suffix> is the empty string or something like
//.
getSchemePrefix in class AbstractDataResource
private static String getAbsolutePath(Class<?> someClass,
String nameOrSuffix,
boolean append)
someClass - is the class identifying the path where the resource is
located and the prefix of its filename.nameOrSuffix - is the filename of the resource or a suffix (e.g.
".properties" or "-test.xml") for it depending on
append.append - - if true the nameOrSuffix is
appended to the simple classname of
someClass or false if the simple name is
replaced by nameOrSuffix.
ClasspathResource(Class, String, boolean)public boolean isData()
available. Unlike DataResource.isAvailable() this method
will not invoke expensive operations like connecting to remote URLs. If
this method will return false, then DataResource.isAvailable()
would also have returned false. However in case of
true only DataResource.isAvailable() can guarantee if a resource
really exists and contains data. E.g. if the resource points to a
File then this method can check if it is a
data-file. So in case it points to a
directory or does not exist at all in the filesystem, this method will
return false. Please also note that this may invoke expensive
operations if the according directory path points to something like a
network share. You should also be aware that the state of DataResource.isData()
and DataResource.isAvailable() can change at any time so you never have a full
guarantee if some data exists or NOT. However in most cases it is very
improbable that this status changes when you read the
resource immediately after the check.
true if this resource points to potential data,
false otherwise.public String getPath()
name of the resource.created.
getPath in interface DataResourcegetPath in class AbstractDataResource
public URL getUrl()
throws ResourceNotAvailableException
URL.
ResourceNotAvailableException - if an URL can NOT be created because
the represented resource does not exist.public Date getLastModificationDate()
DataResource if
available and supported.
Date or null if not
available or supported.public String getUri()
DataResource. In most
cases this will be the same as string-representation of the URL. However this method
will not throw an exception.
getUri in interface DataResourcegetUri in class AbstractDataResourcepublic DataResource navigate(String resourcePath)
DataResource pointing to the given
resourcePath based on this resource.relativePath would be "../apt/sources.list" the resulting
resource would point to "/etc/apt/sources.list".
resourcePath - is the absolute or relative path pointing to a new
resource. If it is a relative path, it is interpreted relative to
the parent URI (directory) of this resource.
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||