Groovy Documentation

org.codehaus.groovy.grails.commons
[Java] Class DefaultGrailsApplication

java.lang.Object
  groovy.lang.GroovyObjectSupport
      org.codehaus.groovy.grails.commons.DefaultGrailsApplication
All Implemented Interfaces:
org.springframework.beans.factory.BeanClassLoaderAware, GrailsApplication

public class DefaultGrailsApplication
extends groovy.lang.GroovyObjectSupport

Default implementation of the GrailsApplication interface that manages application loading, state, and artefact instances.

Upon loading this GrailsApplication will inspect each class using its registered ArtefactHandler instances. Each ArtefactHandler provides knowledge about the conventions used to establish its artefact type. For example controllers use the ControllerArtefactHandler to establish this knowledge.

New ArtefactHandler instances can be registered with the GrailsApplication thus allowing application extensibility.

Authors:
Marc Palmer
Steven Devijver
Graeme Rocher
See Also:
GrailsPluginManager
DefaultGrailsPluginManager
ArtefactHandler
ArtefactInfo
Since:
0.1


Field Summary
protected static java.util.regex.Pattern GETCLASSESMETH_PATTERN

protected static java.util.regex.Pattern GETCLASSESPROP_PATTERN

protected static java.util.regex.Pattern GETCLASS_PATTERN

protected static java.util.regex.Pattern ISCLASS_PATTERN

protected java.util.List allArtefactClasses

protected java.lang.Class[] allArtefactClassesArray

protected java.lang.Class[] allClasses

protected Metadata applicationMeta

protected ArtefactHandler[] artefactHandlers

protected java.util.Map artefactHandlersByName

protected java.util.Map artefactInfo

protected java.lang.ClassLoader cl

protected groovy.util.ConfigObject config

protected java.util.Map flatConfig

protected boolean initialised

protected java.util.List loadedClasses

protected static org.apache.commons.logging.Log log

protected org.springframework.context.ApplicationContext mainContext

protected org.springframework.context.ApplicationContext parentContext

protected GrailsResourceLoader resourceLoader

protected org.springframework.core.io.Resource[] resources

 
Constructor Summary
DefaultGrailsApplication()

Creates a new empty Grails application.

DefaultGrailsApplication(java.lang.Class[] classes, java.lang.ClassLoader classLoader)

Creates a new GrailsApplication instance using the given classes and GroovyClassLoader.

DefaultGrailsApplication(org.springframework.core.io.Resource[] resources)

Constructs a GrailsApplication with the given set of groovy sources specified as Spring Resource instances.

DefaultGrailsApplication(GrailsResourceLoader resourceLoader)

 
Method Summary
GrailsClass addArtefact(java.lang.String artefactType, java.lang.Class artefactClass)

Adds an artefact of the given type for the given Class.

GrailsClass addArtefact(java.lang.String artefactType, GrailsClass artefactGrailsClass)

Adds an artefact of the given type for the given GrailsClass.

void addArtefact(java.lang.Class artefact)

protected GrailsClass addArtefact(java.lang.String artefactType, java.lang.Class artefactClass, boolean overrideable)

void addOverridableArtefact(java.lang.Class artefact)

GrailsClass addOverridableArtefact(java.lang.String artefactType, java.lang.Class artefactClass)

Adds an artefact of the given type for the given Class.

protected void addToLoaded(java.lang.Class clazz)

void clear()

Clears the application returning it to an empty state.

void configChanged()

protected groovy.lang.GroovyClassLoader configureClassLoader()

Configures a GroovyClassLoader for the given GrailsInjectionOperation and GrailsResourceLoader.

protected void configureLoadedClasses(java.lang.Class[] classes)

Configures the loaded classes within the GrailsApplication instance using the registered ArtefactHandler instances.

java.lang.Class[] getAllArtefacts()

Returns all the classes identified as artefacts by ArtefactHandler instances.

java.lang.Class[] getAllClasses()

Retrieves all classes loaded by the GrailsApplication.

GrailsClass getArtefact(java.lang.String artefactType, java.lang.String name)

Retrieves an artefact for the given type and name.

GrailsClass getArtefactByLogicalPropertyName(java.lang.String type, java.lang.String logicalName)

protected int getArtefactCount(java.lang.String artefactType)

Retrieves the number of artefacts registered for the given artefactType as defined by the ArtefactHandler.

GrailsClass getArtefactForFeature(java.lang.String artefactType, java.lang.Object featureID)

ArtefactHandler getArtefactHandler(java.lang.String type)

ArtefactHandler[] getArtefactHandlers()

protected DefaultArtefactInfo getArtefactInfo(java.lang.String artefactType, boolean create)

Get or create the cache of classes for the specified artefact type.

ArtefactInfo getArtefactInfo(java.lang.String artefactType)

Get the cache of classes for the specified artefact type.

ArtefactHandler getArtefactType(java.lang.Class theClass)

GrailsClass[] getArtefacts(java.lang.String artefactType)

Returns all of the GrailsClass instances for the given artefactType as defined by the ArtefactHandler

java.lang.Class getClassForName(java.lang.String className)

Retrieves a class from the GrailsApplication for the given name.

java.lang.ClassLoader getClassLoader()

groovy.util.ConfigObject getConfig()

protected GrailsClass getFirstArtefact(java.lang.String artefactType)

java.util.Map getFlatConfig()

org.springframework.context.ApplicationContext getMainContext()

Metadata getMetadata()

org.springframework.context.ApplicationContext getParentContext()

Retrieves the parent ApplicationContext for this GrailsApplication.

java.lang.Object getProperty(java.lang.String propertyName)

Override property access and hit on xxxxClasses to return class arrays of artefacts.

org.springframework.core.io.Resource getResourceForClass(java.lang.Class theClazz)

Retrieves the Spring Resource that was used to load the given Class.

GrailsResourceLoader getResourceLoader()

boolean hasArtefactHandler(java.lang.String type)

protected void initArtefactHandlers()

Initialises the default set of ArtefactHandler instances.

void initialise()

protected void initializeArtefacts(java.lang.String artefactType)

Re-initialize the artefacts of the specified type.

protected void initializeArtefacts(ArtefactHandler handler)

Re-initialize the artefacts of the specified type.

java.lang.Object invokeMethod(java.lang.String methodName, java.lang.Object args)

boolean isArtefact(java.lang.Class theClazz)

Returns true if the given class is an artefact identified by one of the registered ArtefactHandler instances.

boolean isArtefactOfType(java.lang.String artefactType, java.lang.Class theClazz)

Returns true if the specified class is of the given artefact type as defined by the ArtefactHandler.

boolean isArtefactOfType(java.lang.String artefactType, java.lang.String className)

Returns true if the specified class name is of the given artefact type as defined by the ArtefactHandler.

boolean isInitialised()

boolean isWarDeployed()

protected void loadGrailsApplicationFromResources(org.springframework.core.io.Resource[] resources)

protected java.lang.Class[] populateAllClasses()

void rebuild()

void refresh()

Refreshes this GrailsApplication, rebuilding all of the artefact definitions as defined by the registered ArtefactHandler instances.

protected void refreshArtefactGrailsClassCaches()

Tell all our artefact info objects to update their internal state after we've added a bunch of classes.

void refreshConstraints()

Refreshes constraints defined by the DomainClassArtefactHandler.

void registerArtefactHandler(ArtefactHandler handler)

Registers a new ArtefactHandler that is responsible for identifying and managing a particular artefact type that is defined by some convention.

void setApplicationContext(org.springframework.context.ApplicationContext applicationContext)

Sets the parent ApplicationContext for the GrailsApplication.

void setBeanClassLoader(java.lang.ClassLoader classLoader)

void setConfig(groovy.util.ConfigObject config)

void setMainContext(org.springframework.context.ApplicationContext context)

 
Methods inherited from class groovy.lang.GroovyObjectSupport
groovy.lang.GroovyObjectSupport#setProperty(java.lang.String, java.lang.Object), groovy.lang.GroovyObjectSupport#getProperty(java.lang.String), groovy.lang.GroovyObjectSupport#getMetaClass(), groovy.lang.GroovyObjectSupport#setMetaClass(groovy.lang.MetaClass), groovy.lang.GroovyObjectSupport#invokeMethod(java.lang.String, java.lang.Object), groovy.lang.GroovyObjectSupport#wait(), groovy.lang.GroovyObjectSupport#wait(long), groovy.lang.GroovyObjectSupport#wait(long, int), groovy.lang.GroovyObjectSupport#equals(java.lang.Object), groovy.lang.GroovyObjectSupport#toString(), groovy.lang.GroovyObjectSupport#hashCode(), groovy.lang.GroovyObjectSupport#getClass(), groovy.lang.GroovyObjectSupport#notify(), groovy.lang.GroovyObjectSupport#notifyAll()
 
Methods inherited from class java.lang.Object
java.lang.Object#wait(), java.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
 

Field Detail

GETCLASSESMETH_PATTERN

protected static final java.util.regex.Pattern GETCLASSESMETH_PATTERN


GETCLASSESPROP_PATTERN

protected static final java.util.regex.Pattern GETCLASSESPROP_PATTERN


GETCLASS_PATTERN

protected static final java.util.regex.Pattern GETCLASS_PATTERN


ISCLASS_PATTERN

protected static final java.util.regex.Pattern ISCLASS_PATTERN


allArtefactClasses

protected java.util.List allArtefactClasses


allArtefactClassesArray

protected java.lang.Class[] allArtefactClassesArray


allClasses

protected java.lang.Class[] allClasses


applicationMeta

protected Metadata applicationMeta


artefactHandlers

protected ArtefactHandler[] artefactHandlers


artefactHandlersByName

protected java.util.Map artefactHandlersByName


artefactInfo

protected java.util.Map artefactInfo


cl

protected java.lang.ClassLoader cl


config

protected groovy.util.ConfigObject config


flatConfig

@SuppressWarnings("rawtypes")
protected java.util.Map flatConfig


initialised

protected boolean initialised


loadedClasses

protected java.util.List loadedClasses


log

protected static org.apache.commons.logging.Log log


mainContext

protected org.springframework.context.ApplicationContext mainContext


parentContext

protected org.springframework.context.ApplicationContext parentContext


resourceLoader

protected GrailsResourceLoader resourceLoader


resources

protected org.springframework.core.io.Resource[] resources


 
Constructor Detail

DefaultGrailsApplication

public DefaultGrailsApplication()
Creates a new empty Grails application.


DefaultGrailsApplication

public DefaultGrailsApplication(java.lang.Class[] classes, java.lang.ClassLoader classLoader)
Creates a new GrailsApplication instance using the given classes and GroovyClassLoader.
Parameters:
classes - The classes that make up the GrailsApplication
classLoader - The GroovyClassLoader to use


DefaultGrailsApplication

public DefaultGrailsApplication(org.springframework.core.io.Resource[] resources)
Constructs a GrailsApplication with the given set of groovy sources specified as Spring Resource instances.
Parameters:
resources - An array or Groovy sources provides by Spring Resource instances


DefaultGrailsApplication

public DefaultGrailsApplication(GrailsResourceLoader resourceLoader)


 
Method Detail

addArtefact

public GrailsClass addArtefact(java.lang.String artefactType, @SuppressWarnings("rawtypes") java.lang.Class artefactClass)
Adds an artefact of the given type for the given Class.
throws:
GrailsConfigurationException If the specified Class is not the same as the type defined by the ArtefactHandler
Parameters:
artefactType - The type of the artefact as defined by a ArtefactHandler instance
artefactClass - A Class instance that matches the type defined by the ArtefactHandler
Returns:
The GrailsClass if successful or null if it couldn't be added
See Also:
ArtefactHandler


addArtefact

public GrailsClass addArtefact(java.lang.String artefactType, GrailsClass artefactGrailsClass)
Adds an artefact of the given type for the given GrailsClass.
throws:
GrailsConfigurationException If the specified GrailsClass is not the same as the type defined by the ArtefactHandler
Parameters:
artefactType - The type of the artefact as defined by a ArtefactHandler instance
artefactGrailsClass - A GrailsClass instance that matches the type defined by the ArtefactHandler
Returns:
The GrailsClass if successful or null if it couldn't be added
See Also:
ArtefactHandler


addArtefact

public void addArtefact(@SuppressWarnings("rawtypes") java.lang.Class artefact)


addArtefact

protected GrailsClass addArtefact(java.lang.String artefactType, java.lang.Class artefactClass, boolean overrideable)


addOverridableArtefact

public void addOverridableArtefact(@SuppressWarnings("rawtypes") java.lang.Class artefact)


addOverridableArtefact

public GrailsClass addOverridableArtefact(java.lang.String artefactType, @SuppressWarnings("rawtypes") java.lang.Class artefactClass)
Adds an artefact of the given type for the given Class.
throws:
GrailsConfigurationException If the specified Class is not the same as the type defined by the ArtefactHandler
Parameters:
artefactType - The type of the artefact as defined by a ArtefactHandler instance
artefactClass - A Class instance that matches the type defined by the ArtefactHandler
Returns:
The GrailsClass if successful or null if it couldn't be added
See Also:
ArtefactHandler


addToLoaded

protected void addToLoaded(java.lang.Class clazz)


clear

public void clear()
Clears the application returning it to an empty state. Very dangerous method, use with caution.


configChanged

public void configChanged()


configureClassLoader

protected groovy.lang.GroovyClassLoader configureClassLoader()
Configures a GroovyClassLoader for the given GrailsInjectionOperation and GrailsResourceLoader.
Returns:
A GroovyClassLoader


configureLoadedClasses

protected void configureLoadedClasses(java.lang.Class[] classes)
Configures the loaded classes within the GrailsApplication instance using the registered ArtefactHandler instances.
Parameters:
classes - The classes to configure


getAllArtefacts

public java.lang.Class[] getAllArtefacts()
Returns all the classes identified as artefacts by ArtefactHandler instances.
Returns:
An array of classes


getAllClasses

public java.lang.Class[] getAllClasses()
Retrieves all classes loaded by the GrailsApplication.
Returns:
All classes loaded by the GrailsApplication


getArtefact

public GrailsClass getArtefact(java.lang.String artefactType, java.lang.String name)
Retrieves an artefact for the given type and name.
Parameters:
artefactType - The artefact type as defined by a registered ArtefactHandler
name - The name of the class
Returns:
A GrailsClass instance or null if none could be found for the given artefactType and name


getArtefactByLogicalPropertyName

public GrailsClass getArtefactByLogicalPropertyName(java.lang.String type, java.lang.String logicalName)


getArtefactCount

protected int getArtefactCount(java.lang.String artefactType)
Retrieves the number of artefacts registered for the given artefactType as defined by the ArtefactHandler.
Parameters:
artefactType - The type of the artefact as defined by the ArtefactHandler
Returns:
The number of registered artefacts


getArtefactForFeature

public GrailsClass getArtefactForFeature(java.lang.String artefactType, java.lang.Object featureID)


getArtefactHandler

public ArtefactHandler getArtefactHandler(java.lang.String type)


getArtefactHandlers

public ArtefactHandler[] getArtefactHandlers()


getArtefactInfo

protected DefaultArtefactInfo getArtefactInfo(java.lang.String artefactType, boolean create)
Get or create the cache of classes for the specified artefact type.
Parameters:
artefactType - The name of an artefact type
create - Set to true if you want non-existent caches to be created
Returns:
The cache of classes for the type, or null if no cache exists and create is false


getArtefactInfo

public ArtefactInfo getArtefactInfo(java.lang.String artefactType)
Get the cache of classes for the specified artefact type.
Parameters:
artefactType - The name of an artefact type
Returns:
The cache of classes for the type, or null if no cache exists


getArtefactType

public ArtefactHandler getArtefactType(@SuppressWarnings("rawtypes") java.lang.Class theClass)


getArtefacts

public GrailsClass[] getArtefacts(java.lang.String artefactType)
Returns all of the GrailsClass instances for the given artefactType as defined by the ArtefactHandler
Parameters:
artefactType - The type of the artefact defined by the ArtefactHandler
Returns:
An array of classes for the given artefact


getClassForName

public java.lang.Class getClassForName(java.lang.String className)
Retrieves a class from the GrailsApplication for the given name.
Parameters:
className - The class name
Returns:
Either the Class instance or null if it doesn't exist


getClassLoader

public java.lang.ClassLoader getClassLoader()


getConfig

public groovy.util.ConfigObject getConfig()


getFirstArtefact

protected GrailsClass getFirstArtefact(java.lang.String artefactType)


getFlatConfig

@SuppressWarnings("unchecked")
public java.util.Map getFlatConfig()


getMainContext

public org.springframework.context.ApplicationContext getMainContext()


getMetadata

public Metadata getMetadata()


getParentContext

public org.springframework.context.ApplicationContext getParentContext()
Retrieves the parent ApplicationContext for this GrailsApplication.
Returns:
The parent ApplicationContext


getProperty

@Override
public java.lang.Object getProperty(java.lang.String propertyName)
Override property access and hit on xxxxClasses to return class arrays of artefacts.
Parameters:
propertyName - The name of the property, if it ends in *Classes then match and invoke internal ArtefactHandler
Returns:
All the artifacts or delegate to super.getProperty


getResourceForClass

public org.springframework.core.io.Resource getResourceForClass(@SuppressWarnings("rawtypes") java.lang.Class theClazz)
Retrieves the Spring Resource that was used to load the given Class.
Parameters:
theClazz - The class
Returns:
Either a Spring Resource or null if no Resource was found for the given class


getResourceLoader

public GrailsResourceLoader getResourceLoader()


hasArtefactHandler

public boolean hasArtefactHandler(java.lang.String type)


initArtefactHandlers

protected void initArtefactHandlers()
Initialises the default set of ArtefactHandler instances.
See Also:
ArtefactHandler


initialise

public void initialise()


initializeArtefacts

protected void initializeArtefacts(java.lang.String artefactType)
Re-initialize the artefacts of the specified type. This gives handlers a chance to update caches etc.
Parameters:
artefactType - The type of artefact to init


initializeArtefacts

protected void initializeArtefacts(ArtefactHandler handler)
Re-initialize the artefacts of the specified type. This gives handlers a chance to update caches etc.
Parameters:
handler - The handler to register


invokeMethod

@Override
public java.lang.Object invokeMethod(java.lang.String methodName, java.lang.Object args)

Overrides method invocation to return dynamic artefact methods.

We will support getXXXXClasses() and isXXXXClass(class)

Parameters:
methodName - The name of the method
args - The arguments to the method
Returns:
The return value of the method TODO Need to add matches for addClass(java.lang.Class) and addClass(GrailsClass)


isArtefact

public boolean isArtefact(@SuppressWarnings("rawtypes") java.lang.Class theClazz)
Returns true if the given class is an artefact identified by one of the registered ArtefactHandler instances. Uses class name equality to handle class reloading
Parameters:
theClazz - The class to check
Returns:
True if it is an artefact


isArtefactOfType

public boolean isArtefactOfType(java.lang.String artefactType, @SuppressWarnings("rawtypes") java.lang.Class theClazz)
Returns true if the specified class is of the given artefact type as defined by the ArtefactHandler.
Parameters:
artefactType - The type of the artefact
theClazz - The class
Returns:
True if it is of the specified artefactType
See Also:
ArtefactHandler


isArtefactOfType

public boolean isArtefactOfType(java.lang.String artefactType, java.lang.String className)
Returns true if the specified class name is of the given artefact type as defined by the ArtefactHandler.
Parameters:
artefactType - The type of the artefact
className - The class name
Returns:
True if it is of the specified artefactType
See Also:
ArtefactHandler


isInitialised

public boolean isInitialised()


isWarDeployed

public boolean isWarDeployed()


loadGrailsApplicationFromResources

@SuppressWarnings("rawtypes")
protected void loadGrailsApplicationFromResources(@SuppressWarnings("hiding") org.springframework.core.io.Resource[] resources)


populateAllClasses

protected java.lang.Class[] populateAllClasses()


rebuild

public void rebuild()


refresh

public void refresh()
Refreshes this GrailsApplication, rebuilding all of the artefact definitions as defined by the registered ArtefactHandler instances.


refreshArtefactGrailsClassCaches

protected void refreshArtefactGrailsClassCaches()
Tell all our artefact info objects to update their internal state after we've added a bunch of classes.


refreshConstraints

public void refreshConstraints()
Refreshes constraints defined by the DomainClassArtefactHandler. TODO: Move this out of GrailsApplication


registerArtefactHandler

public void registerArtefactHandler(ArtefactHandler handler)
Registers a new ArtefactHandler that is responsible for identifying and managing a particular artefact type that is defined by some convention.
Parameters:
handler - The ArtefactHandler to regster


setApplicationContext

public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext)
Sets the parent ApplicationContext for the GrailsApplication.
throws:
BeansException Thrown when an error occurs setting the ApplicationContext
Parameters:
applicationContext - The ApplicationContext


setBeanClassLoader

public void setBeanClassLoader(java.lang.ClassLoader classLoader)


setConfig

public void setConfig(groovy.util.ConfigObject config)


setMainContext

public void setMainContext(org.springframework.context.ApplicationContext context)


 

Groovy Documentation