org.codehaus.groovy.grails.io.support
Class GrailsResourceUtils

java.lang.Object
  extended by org.codehaus.groovy.grails.io.support.GrailsResourceUtils

public class GrailsResourceUtils
extends java.lang.Object

Utility methods for resource handling / figuring out class names.

Since:
2.0

Field Summary
static java.lang.String CLASSPATH_URL_PREFIX
          Pseudo URL prefix for loading from the class path: "classpath:"
static java.util.regex.Pattern[] COMPILER_ROOT_PATTERNS
           
static java.util.regex.Pattern DOMAIN_PATH_PATTERN
           
static java.lang.String FILE_URL_PREFIX
          URL prefix for loading from the file system: "file:"
static java.lang.String GRAILS_APP_DIR
          The name of the Grails application directory
static java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_EIGHTH_MATCH
           
static java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_ELEVENTH_MATCH
           
static java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_FIFTH_MATCH
           
static java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_FIRST_MATCH
           
static java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_FOURTH_MATCH
           
static java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_NINTH_MATCH
           
static java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_SECOND_MATCH
           
static java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_SEVENTH_MATCH
           
static java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_SIXTH_MATCH
           
static java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_TENTH_MATCH
           
static java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_THIRD_MATCH
           
static java.lang.String JAR_URL_SEPARATOR
           
static java.util.regex.Pattern[] patterns
           
static java.lang.String REGEX_FILE_SEPARATOR
           
static java.util.regex.Pattern RESOURCE_PATH_PATTERN
           
static java.util.regex.Pattern SPRING_SCRIPTS_PATH_PATTERN
           
static java.lang.String URL_PROTOCOL_CODE_SOURCE
          URL protocol for an entry from an OC4J jar file: "code-source"
static java.lang.String URL_PROTOCOL_FILE
          URL protocol for a file in the file system: "file"
static java.lang.String URL_PROTOCOL_JAR
          URL protocol for an entry from a jar file: "jar"
static java.lang.String URL_PROTOCOL_VFS
          URL protocol for a JBoss VFS resource: "vfs"
static java.lang.String URL_PROTOCOL_VFSZIP
          URL protocol for an entry from a JBoss jar file: "vfszip"
static java.lang.String URL_PROTOCOL_WSJAR
          URL protocol for an entry from a WebSphere jar file: "wsjar"
static java.lang.String URL_PROTOCOL_ZIP
          URL protocol for an entry from a zip file: "zip"
static java.lang.String VIEWS_DIR_PATH
          The path to the views directory
static java.lang.String WEB_APP_DIR
          The name of the Web app dir within Grails
static java.lang.String WEB_INF
          The relative path to the WEB-INF directory
 
Constructor Summary
GrailsResourceUtils()
           
 
Method Summary
static java.lang.String appendPiecesForUri(java.lang.String... pieces)
          Takes any number of Strings and appends them into a uri, making sure that a forward slash is inserted between each piece and making sure that no duplicate slashes are in the uri
static java.lang.String applyRelativePath(java.lang.String path, java.lang.String relativePath)
          Apply the given relative path to the given path, assuming standard Java folder separation (i.e.
static java.lang.String classPackageAsResourcePath(java.lang.Class<?> clazz)
          Given an input class object, return a string which consists of the class's package name as a pathname, i.e., all dots ('.') are replaced by slashes ('/').
static java.lang.String cleanPath(java.lang.String path)
          Normalize the path by suppressing sequences like "path/.." and inner simple dots.
static java.net.URL extractJarFileURL(java.net.URL jarUrl)
          Extract the URL for the actual jar file from the given URL (which may point to a resource in a jar file or to a jar file itself).
static Resource getAppDir(Resource resource)
           
static java.lang.String getArtefactDirectory(java.lang.String path)
          Takes a file path and returns the name of the folder under grails-app i.e: Input: /usr/joe/project/grails-app/domain/com/mystartup/Book.groovy Output: domain
static java.lang.String getClassName(Resource resource)
          Gets the class name of the specified Grails resource
static java.lang.String getClassName(java.lang.String path)
          Returns the class name for a Grails resource.
static java.io.File getFile(java.net.URI resourceUri)
          Resolve the given resource URI to a java.io.File, i.e.
static java.io.File getFile(java.net.URI resourceUri, java.lang.String description)
          Resolve the given resource URI to a java.io.File, i.e.
static java.io.File getFile(java.net.URL resourceUrl, java.lang.String description)
          Resolve the given resource URL to a java.io.File, i.e.
static java.lang.String getFilename(java.lang.String path)
          Extract the filename from the given path, e.g.
static java.lang.String getPathFromRoot(java.lang.String path)
          Get the path relative to an artefact folder under grails-app i.e: Input: /usr/joe/project/grails-app/conf/BootStrap.groovy Output: BootStrap.groovy Input: /usr/joe/project/grails-app/domain/com/mystartup/Book.groovy Output: com/mystartup/Book.groovy
static java.lang.String getRelativeInsideWebInf(Resource resource)
          Takes a Grails resource (one located inside the grails-app dir) and gets its relative path inside the WEB-INF directory when deployed.
static java.lang.String getStaticResourcePathForResource(Resource resource, java.lang.String contextPath)
          Retrieves the static resource path for the given Grails resource artifact (controller/taglib etc.)
static Resource getViewsDir(Resource resource)
           
static java.lang.Object instantiateFromConfig(groovy.util.ConfigObject config, java.lang.String configKey, java.lang.String defaultClassName)
           
static java.lang.Object instantiateFromFlatConfig(java.util.Map<java.lang.String,java.lang.Object> flatConfig, java.lang.String configKey, java.lang.String defaultClassName)
           
static boolean isDomainClass(java.net.URL url)
          Checks whether the file referenced by the given url is a domain class
static boolean isFileURL(java.net.URL url)
          Determine whether the given URL points to a resource in the file system, that is, has protocol "file" or "vfs".
static boolean isGrailsPath(java.lang.String path)
          Checks whether the specified path is a Grails path.
static boolean isGrailsResource(Resource r)
           
static boolean isJarURL(java.net.URL url)
          Determine whether the given URL points to a resource in a jar file, that is, has protocol "jar", "zip", "wsjar" or "code-source".
static java.net.URI toURI(java.lang.String location)
          Create a URI instance for the given location String, replacing spaces with "%20" quotes first.
static java.net.URI toURI(java.net.URL url)
          Create a URI instance for the given URL, replacing spaces with "%20" quotes first.
static void useCachesIfNecessary(java.net.URLConnection con)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

JAR_URL_SEPARATOR

public static final java.lang.String JAR_URL_SEPARATOR
See Also:
Constant Field Values

CLASSPATH_URL_PREFIX

public static final java.lang.String CLASSPATH_URL_PREFIX
Pseudo URL prefix for loading from the class path: "classpath:"

See Also:
Constant Field Values

FILE_URL_PREFIX

public static final java.lang.String FILE_URL_PREFIX
URL prefix for loading from the file system: "file:"

See Also:
Constant Field Values

URL_PROTOCOL_FILE

public static final java.lang.String URL_PROTOCOL_FILE
URL protocol for a file in the file system: "file"

See Also:
Constant Field Values

URL_PROTOCOL_JAR

public static final java.lang.String URL_PROTOCOL_JAR
URL protocol for an entry from a jar file: "jar"

See Also:
Constant Field Values

URL_PROTOCOL_ZIP

public static final java.lang.String URL_PROTOCOL_ZIP
URL protocol for an entry from a zip file: "zip"

See Also:
Constant Field Values

URL_PROTOCOL_VFSZIP

public static final java.lang.String URL_PROTOCOL_VFSZIP
URL protocol for an entry from a JBoss jar file: "vfszip"

See Also:
Constant Field Values

URL_PROTOCOL_VFS

public static final java.lang.String URL_PROTOCOL_VFS
URL protocol for a JBoss VFS resource: "vfs"

See Also:
Constant Field Values

URL_PROTOCOL_WSJAR

public static final java.lang.String URL_PROTOCOL_WSJAR
URL protocol for an entry from a WebSphere jar file: "wsjar"

See Also:
Constant Field Values

URL_PROTOCOL_CODE_SOURCE

public static final java.lang.String URL_PROTOCOL_CODE_SOURCE
URL protocol for an entry from an OC4J jar file: "code-source"

See Also:
Constant Field Values

WEB_INF

public static final java.lang.String WEB_INF
The relative path to the WEB-INF directory

See Also:
Constant Field Values

GRAILS_APP_DIR

public static final java.lang.String GRAILS_APP_DIR
The name of the Grails application directory

See Also:
Constant Field Values

WEB_APP_DIR

public static final java.lang.String WEB_APP_DIR
The name of the Web app dir within Grails

See Also:
Constant Field Values

VIEWS_DIR_PATH

public static final java.lang.String VIEWS_DIR_PATH
The path to the views directory

See Also:
Constant Field Values

REGEX_FILE_SEPARATOR

public static final java.lang.String REGEX_FILE_SEPARATOR
See Also:
Constant Field Values

DOMAIN_PATH_PATTERN

public static java.util.regex.Pattern DOMAIN_PATH_PATTERN

RESOURCE_PATH_PATTERN

public static java.util.regex.Pattern RESOURCE_PATH_PATTERN

SPRING_SCRIPTS_PATH_PATTERN

public static java.util.regex.Pattern SPRING_SCRIPTS_PATH_PATTERN

COMPILER_ROOT_PATTERNS

public static java.util.regex.Pattern[] COMPILER_ROOT_PATTERNS

GRAILS_RESOURCE_PATTERN_FIRST_MATCH

public static final java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_FIRST_MATCH

GRAILS_RESOURCE_PATTERN_SECOND_MATCH

public static final java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_SECOND_MATCH

GRAILS_RESOURCE_PATTERN_THIRD_MATCH

public static final java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_THIRD_MATCH

GRAILS_RESOURCE_PATTERN_FOURTH_MATCH

public static final java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_FOURTH_MATCH

GRAILS_RESOURCE_PATTERN_FIFTH_MATCH

public static final java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_FIFTH_MATCH

GRAILS_RESOURCE_PATTERN_SIXTH_MATCH

public static final java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_SIXTH_MATCH

GRAILS_RESOURCE_PATTERN_SEVENTH_MATCH

public static final java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_SEVENTH_MATCH

GRAILS_RESOURCE_PATTERN_EIGHTH_MATCH

public static final java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_EIGHTH_MATCH

GRAILS_RESOURCE_PATTERN_NINTH_MATCH

public static final java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_NINTH_MATCH

GRAILS_RESOURCE_PATTERN_TENTH_MATCH

public static final java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_TENTH_MATCH

GRAILS_RESOURCE_PATTERN_ELEVENTH_MATCH

public static final java.util.regex.Pattern GRAILS_RESOURCE_PATTERN_ELEVENTH_MATCH

patterns

public static final java.util.regex.Pattern[] patterns
Constructor Detail

GrailsResourceUtils

public GrailsResourceUtils()
Method Detail

isDomainClass

public static boolean isDomainClass(java.net.URL url)
Checks whether the file referenced by the given url is a domain class

Parameters:
url - The URL instance
Returns:
true if it is a domain class

getFilename

public static java.lang.String getFilename(java.lang.String path)
Extract the filename from the given path, e.g. "mypath/myfile.txt" -> "myfile.txt".

Parameters:
path - the file path (may be null)
Returns:
the extracted filename, or null if none

classPackageAsResourcePath

public static java.lang.String classPackageAsResourcePath(java.lang.Class<?> clazz)
Given an input class object, return a string which consists of the class's package name as a pathname, i.e., all dots ('.') are replaced by slashes ('/'). Neither a leading nor trailing slash is added. The result could be concatenated with a slash and the name of a resource and fed directly to ClassLoader.getResource(). For it to be fed to Class.getResource instead, a leading slash would also have to be prepended to the returned value.

Parameters:
clazz - the input class. A null value or the default (empty) package will result in an empty string ("") being returned.
Returns:
a path which represents the package name
See Also:
ClassLoader.getResource(java.lang.String), Class.getResource(java.lang.String)

useCachesIfNecessary

public static void useCachesIfNecessary(java.net.URLConnection con)

getClassName

public static java.lang.String getClassName(Resource resource)
Gets the class name of the specified Grails resource

Parameters:
resource - The Spring Resource
Returns:
The class name or null if the resource is not a Grails class

getClassName

public static java.lang.String getClassName(java.lang.String path)
Returns the class name for a Grails resource.

Parameters:
path - The path to check
Returns:
The class name or null if it doesn't exist

getFile

public static java.io.File getFile(java.net.URL resourceUrl,
                                   java.lang.String description)
                            throws java.io.FileNotFoundException
Resolve the given resource URL to a java.io.File, i.e. to a file in the file system.

Parameters:
resourceUrl - the resource URL to resolve
description - a description of the original resource that the URL was created for (for example, a class path location)
Returns:
a corresponding File object
Throws:
java.io.FileNotFoundException - if the URL cannot be resolved to a file in the file system

isJarURL

public static boolean isJarURL(java.net.URL url)
Determine whether the given URL points to a resource in a jar file, that is, has protocol "jar", "zip", "wsjar" or "code-source".

"zip" and "wsjar" are used by BEA WebLogic Server and IBM WebSphere, respectively, but can be treated like jar files. The same applies to "code-source" URLs on Oracle OC4J, provided that the path contains a jar separator.

Parameters:
url - the URL to check
Returns:
whether the URL has been identified as a JAR URL

getFile

public static java.io.File getFile(java.net.URI resourceUri,
                                   java.lang.String description)
                            throws java.io.FileNotFoundException
Resolve the given resource URI to a java.io.File, i.e. to a file in the file system.

Parameters:
resourceUri - the resource URI to resolve
description - a description of the original resource that the URI was created for (for example, a class path location)
Returns:
a corresponding File object
Throws:
java.io.FileNotFoundException - if the URL cannot be resolved to a file in the file system

getFile

public static java.io.File getFile(java.net.URI resourceUri)
                            throws java.io.FileNotFoundException
Resolve the given resource URI to a java.io.File, i.e. to a file in the file system.

Parameters:
resourceUri - the resource URI to resolve
Returns:
a corresponding File object
Throws:
java.io.FileNotFoundException - if the URL cannot be resolved to a file in the file system

toURI

public static java.net.URI toURI(java.net.URL url)
                          throws java.net.URISyntaxException
Create a URI instance for the given URL, replacing spaces with "%20" quotes first.

Furthermore, this method works on JDK 1.4 as well, in contrast to the URL.toURI() method.

Parameters:
url - the URL to convert into a URI instance
Returns:
the URI instance
Throws:
java.net.URISyntaxException - if the URL wasn't a valid URI
See Also:
URL.toURI()

isFileURL

public static boolean isFileURL(java.net.URL url)
Determine whether the given URL points to a resource in the file system, that is, has protocol "file" or "vfs".

Parameters:
url - the URL to check
Returns:
whether the URL has been identified as a file system URL

applyRelativePath

public static java.lang.String applyRelativePath(java.lang.String path,
                                                 java.lang.String relativePath)
Apply the given relative path to the given path, assuming standard Java folder separation (i.e. "/" separators).

Parameters:
path - the path to start from (usually a full file path)
relativePath - the relative path to apply (relative to the full file path above)
Returns:
the full file path that results from applying the relative path

cleanPath

public static java.lang.String cleanPath(java.lang.String path)
Normalize the path by suppressing sequences like "path/.." and inner simple dots.

The result is convenient for path comparison. For other uses, notice that Windows separators ("\") are replaced by simple slashes.

Parameters:
path - the original path
Returns:
the normalized path

extractJarFileURL

public static java.net.URL extractJarFileURL(java.net.URL jarUrl)
                                      throws java.net.MalformedURLException
Extract the URL for the actual jar file from the given URL (which may point to a resource in a jar file or to a jar file itself).

Parameters:
jarUrl - the original URL
Returns:
the URL for the actual jar file
Throws:
java.net.MalformedURLException - if no valid jar file URL could be extracted

toURI

public static java.net.URI toURI(java.lang.String location)
                          throws java.net.URISyntaxException
Create a URI instance for the given location String, replacing spaces with "%20" quotes first.

Parameters:
location - the location String to convert into a URI instance
Returns:
the URI instance
Throws:
java.net.URISyntaxException - if the location wasn't a valid URI

isGrailsPath

public static boolean isGrailsPath(java.lang.String path)
Checks whether the specified path is a Grails path.

Parameters:
path - The path to check
Returns:
true if it is a Grails path

isGrailsResource

public static boolean isGrailsResource(Resource r)

getViewsDir

public static Resource getViewsDir(Resource resource)

getAppDir

public static Resource getAppDir(Resource resource)

getRelativeInsideWebInf

public static java.lang.String getRelativeInsideWebInf(Resource resource)
Takes a Grails resource (one located inside the grails-app dir) and gets its relative path inside the WEB-INF directory when deployed.

Parameters:
resource - The Grails resource, which is a file inside the grails-app dir
Returns:
The relative URL of the file inside the WEB-INF dir at deployment time or null if it cannot be established

getStaticResourcePathForResource

public static java.lang.String getStaticResourcePathForResource(Resource resource,
                                                                java.lang.String contextPath)
Retrieves the static resource path for the given Grails resource artifact (controller/taglib etc.)

Parameters:
resource - The Resource
contextPath - The additonal context path to prefix
Returns:
The resource path

getPathFromRoot

public static java.lang.String getPathFromRoot(java.lang.String path)
Get the path relative to an artefact folder under grails-app i.e: Input: /usr/joe/project/grails-app/conf/BootStrap.groovy Output: BootStrap.groovy Input: /usr/joe/project/grails-app/domain/com/mystartup/Book.groovy Output: com/mystartup/Book.groovy

Parameters:
path - The path to evaluate
Returns:
The path relative to the root folder grails-app

getArtefactDirectory

public static java.lang.String getArtefactDirectory(java.lang.String path)
Takes a file path and returns the name of the folder under grails-app i.e: Input: /usr/joe/project/grails-app/domain/com/mystartup/Book.groovy Output: domain

Parameters:
path - The path
Returns:
The domain or null if not known

appendPiecesForUri

public static java.lang.String appendPiecesForUri(java.lang.String... pieces)
Takes any number of Strings and appends them into a uri, making sure that a forward slash is inserted between each piece and making sure that no duplicate slashes are in the uri
 Input: ""
 Output: ""

 Input: "/alpha", "/beta", "/gamma"
 Output: "/alpha/beta/gamma

 Input: "/alpha/, "/beta/", "/gamma"
 Output: "/alpha/beta/gamma

 Input: "/alpha/", "/beta/", "/gamma/"
 Output "/alpha/beta/gamma/

 Input: "alpha", "beta", "gamma"
 Output: "alpha/beta/gamma
 

Parameters:
pieces - Strings to concatenate together into a uri
Returns:
a uri

instantiateFromConfig

public static java.lang.Object instantiateFromConfig(groovy.util.ConfigObject config,
                                                     java.lang.String configKey,
                                                     java.lang.String defaultClassName)
                                              throws java.lang.InstantiationException,
                                                     java.lang.IllegalAccessException,
                                                     java.lang.ClassNotFoundException,
                                                     java.lang.LinkageError
Throws:
java.lang.InstantiationException
java.lang.IllegalAccessException
java.lang.ClassNotFoundException
java.lang.LinkageError

instantiateFromFlatConfig

public static java.lang.Object instantiateFromFlatConfig(java.util.Map<java.lang.String,java.lang.Object> flatConfig,
                                                         java.lang.String configKey,
                                                         java.lang.String defaultClassName)
                                                  throws java.lang.InstantiationException,
                                                         java.lang.IllegalAccessException,
                                                         java.lang.ClassNotFoundException,
                                                         java.lang.LinkageError
Throws:
java.lang.InstantiationException
java.lang.IllegalAccessException
java.lang.ClassNotFoundException
java.lang.LinkageError