Package: grails.core

## [Java] Interface GrailsApplication

-     public interface GrailsApplication
      extends org.springframework.context.ApplicationContextAware

  The main interface representing a running Grails application. This interface's main purpose is to provide a mechanism for analysing the conventions within a Grails application as well as providing metadata and information about the execution environment.

  The GrailsApplication interface interfacts with ArtefactHandler instances which are capable of analysing different artefact types (controllers, domain classes etc.) and introspecting the artefact conventions

  Implementors of this inteface should be aware that a GrailsApplication is only initialised when the initialise() method is called. In other words GrailsApplication instances are lazily initialised by the Grails runtime.

  See Also:
    initialise()
    ArtefactHandler
  Authors:
    Graeme Rocher
    Steven Devijver
  Since:
    0.1

- - ### Field Summary

    Fields
    Modifiers | Name | Description
    --- | --- | ---
    `java.lang.String` | `APPLICATION_ID` | The id of the grails application within a bean context
    `java.lang.String` | `CLASS_LOADER_BEAN` |
    `java.lang.String` | `CONFIG_CLASS` | The name of the class that provides configuration
    `java.lang.String` | `DATA_SOURCE_BEAN` |
    `java.lang.String` | `DATA_SOURCE_CLASS` | The name of the DataSource class
    `java.lang.String` | `DIALECT_DETECTOR_BEAN` |
    `java.lang.String` | `EXCEPTION_HANDLER_BEAN` |
    `java.lang.String` | `MESSAGE_SOURCE_BEAN` |
    `java.lang.String` | `MULTIPART_RESOLVER_BEAN` |
    `java.lang.String` | `OPEN_SESSION_IN_VIEW_INTERCEPTOR_BEAN` |
    `java.lang.String` | `PROJECT_META_FILE` | The name of the project metadata file
    `java.lang.String` | `SESSION_FACTORY_BEAN` |
    `java.lang.String` | `TRANSACTION_MANAGER_BEAN` | The name of the transaction manager bean

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public GrailsClass` | `addArtefact(java.lang.String artefactType, java.lang.Class artefactClass)`
    `` | `public GrailsClass` | `addArtefact(java.lang.String artefactType, GrailsClass artefactGrailsClass)`
    `` | `public void` | `addArtefact(java.lang.Class artefact)` Adds the given artefact, attempting to determine type from
    `` | `public void` | `addOverridableArtefact(java.lang.Class artefact)` Adds an artefact that can be overriden by user defined classes
    `` | `public void` | `configChanged()` Fired to inform the application when the Config.groovy file changes.
    `` | `public java.lang.Class[]` | `getAllArtefacts()` Retrieves all java.lang.Class instances considered Artefacts loaded by the Grails class loader
    `` | `public java.lang.Class[]` | `getAllClasses()` Retrieves all java.lang.Class instances loaded by the Grails class loader
    `` | `public GrailsClass` | `getArtefact(java.lang.String artefactType, java.lang.String name)`
    `` | `public GrailsClass` | `getArtefactByLogicalPropertyName(java.lang.String type, java.lang.String logicalName)` Retrieves an artefact by its logical property name.
    `` | `public GrailsClass` | `getArtefactForFeature(java.lang.String artefactType, java.lang.Object featureID)`
    `` | `public ArtefactHandler` | `getArtefactHandler(java.lang.String type)` Returns the ArtefactHandler for the given type
    `` | `public ArtefactHandler[]` | `getArtefactHandlers()`
    `` | `public ArtefactInfo` | `getArtefactInfo(java.lang.String artefactType)`
    `` | `public ArtefactHandler` | `getArtefactType(java.lang.Class theClass)` Returns the ArtefactHandler for the given class or null
    `` | `public GrailsClass[]` | `getArtefacts(java.lang.String artefactType)`
    `` | `public java.lang.Class` | `getClassForName(java.lang.String className)` Retrieves a class for the given name within the GrailsApplication or returns null
    `` | `public java.lang.ClassLoader` | `getClassLoader()` Returns the class loader instance for the Grails application.
    `` | `public Config` | `getConfig()` Returns the ConfigObject instance.
    `` | `public org.springframework.context.ApplicationContext` | `getMainContext()` Returns the Spring context for this application.
    `` | `public org.grails.datastore.mapping.model.MappingContext` | `getMappingContext()` Returns: The GORM org.grails.datastore.mapping.model.MappingContext.
    `` | `public Metadata` | `getMetadata()`
    `` | `public org.springframework.context.ApplicationContext` | `getParentContext()` Returns the Spring application context that contains this application instance.
    `` | `public org.springframework.core.io.Resource` | `getResourceForClass(java.lang.Class theClazz)` Retrieves a Resource instance for the given Grails class or null it doesn't exist.
    `` | `public boolean` | `hasArtefactHandler(java.lang.String type)`
    `` | `public void` | `initialise()` Initialise this GrailsApplication.
    `` | `public boolean` | `isArtefact(java.lang.Class theClazz)`
    `` | `public boolean` | `isArtefactOfType(java.lang.String artefactType, java.lang.Class theClazz)`
    `` | `public boolean` | `isArtefactOfType(java.lang.String artefactType, java.lang.String className)`
    `` | `public boolean` | `isInitialised()` Returns whether this GrailsApplication has been initialised or not.
    `` | `public boolean` | `isWarDeployed()` Returns true if this application has been deployed as a WAR file
    `` | `public void` | `rebuild()` Rebuilds this Application throwing away the class loader and re-constructing it from the loaded resources again.
    `` | `public void` | `refresh()` This method will refresh the entire application
    `` | `public void` | `registerArtefactHandler(ArtefactHandler handler)`
    `` | `public void` | `setMainContext(org.springframework.context.ApplicationContext context)` Sets the main Spring context for this application.
    `` | `public void` | `setMappingContext(org.grails.datastore.mapping.model.MappingContext mappingContext)` Configures the org.grails.datastore.mapping.model.MappingContext for this application

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `interface org.springframework.context.ApplicationContextAware` | `org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)`

- - ### Field Detail

    - #### java.lang.String APPLICATION_ID

      The id of the grails application within a bean context

    - #### java.lang.String CLASS_LOADER_BEAN

    - #### @java.lang.Deprecated java.lang.String CONFIG_CLASS

      The name of the class that provides configuration

    - #### java.lang.String DATA_SOURCE_BEAN

    - #### @java.lang.Deprecated java.lang.String DATA_SOURCE_CLASS

      The name of the DataSource class

    - #### java.lang.String DIALECT_DETECTOR_BEAN

    - #### java.lang.String EXCEPTION_HANDLER_BEAN

    - #### java.lang.String MESSAGE_SOURCE_BEAN

    - #### java.lang.String MULTIPART_RESOLVER_BEAN

    - #### java.lang.String OPEN_SESSION_IN_VIEW_INTERCEPTOR_BEAN

    - #### @java.lang.Deprecated java.lang.String PROJECT_META_FILE

      The name of the project metadata file

    - #### java.lang.String SESSION_FACTORY_BEAN

    - #### java.lang.String TRANSACTION_MANAGER_BEAN

      The name of the transaction manager bean

  - ### Method Detail

    - #### @java.lang.SuppressWarnings("rawtypes") public GrailsClass addArtefact(java.lang.String artefactType, java.lang.Class artefactClass)

      Registers a new artefact

      Parameters:
        `artefactType` - The type ID of the artefact, i.e. "TagLib"
        `artefactClass` - The class of the artefact. A new GrailsClass will be created automatically and added to internal structures, using the appropriate ArtefactHandler
      Returns:
        The new grails class for the artefact class
      Since:
        0.5

    - #### public GrailsClass addArtefact(java.lang.String artefactType, GrailsClass artefactGrailsClass)

      Registers a new artefact

      Parameters:
        `artefactType` - The type ID of the artefact, i.e. "TagLib"
        `artefactGrailsClass` - The GrailsClass of the artefact.
      Returns:
        The supplied grails class for the artefact class
      Since:
        0.5

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

      Adds the given artefact, attempting to determine type from

      Parameters:
        `artefact` - The artefact to add

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

      Adds an artefact that can be overriden by user defined classes

      Parameters:
        `artefact` - An overridable artefact

    - #### public void configChanged()

      Fired to inform the application when the Config.groovy file changes.

    - #### @java.lang.SuppressWarnings("rawtypes") public java.lang.Class[] getAllArtefacts()

      Retrieves all java.lang.Class instances considered Artefacts loaded by the Grails class loader

      Returns:
        An array of classes

    - #### @java.lang.SuppressWarnings("rawtypes") public java.lang.Class[] getAllClasses()

      Retrieves all java.lang.Class instances loaded by the Grails class loader

      Returns:
        An array of classes

    - #### public GrailsClass getArtefact(java.lang.String artefactType, java.lang.String name)

      Gets the GrailsClass associated with the named artefact class

      i.e. to get the GrailsClass for controller called "BookController" you pass the name "BookController"

      Parameters:
        `artefactType` - The type of artefact to retrieve, i.e. "Controller"
        `name` - The name of an artefact such as "BookController"
      Returns:
        The associated GrailsClass or null
      Since:
        0.5

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

      Retrieves an artefact by its logical property name. For example the logical property name of BookController would be book.

      Parameters:
        `type` - The artefact type
        `logicalName` - The logical name
      Returns:
        The GrailsClass or null if it doesn't exist

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

      Get an artefact GrailsClass by a "feature" which depending on the artefact may be a URI or tag name for example

      Parameters:
        `artefactType` - The type ID of the artefact, i.e. "TagLib"
        `featureID` - The "feature" ID, say a URL or tag name
      Returns:
        The grails class or null if none is found
      Since:
        0.5

    - #### public ArtefactHandler getArtefactHandler(java.lang.String type)

      Returns the ArtefactHandler for the given type

      Parameters:
        `type` - The artefact handler type
      Returns:
        The artefact handler

    - #### public ArtefactHandler[] getArtefactHandlers()

      Obtain a list of all the artefact handlers

      Returns:
        The list, possible empty but not null, of all currently registered handlers

    - #### public ArtefactInfo getArtefactInfo(java.lang.String artefactType)

      Obtain all the class information about the artefactType specified

      Parameters:
        `artefactType` - An artefact type identifier i.e. "Domain"
      Returns:
        The artefact info or null if the artefactType is not recognized
      Since:
        0.5

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

      Returns the ArtefactHandler for the given class or null

      Parameters:
        `theClass` - The class
      Returns:
        The ArtefactHandler

    - #### public GrailsClass[] getArtefacts(java.lang.String artefactType)

      Get an array of all the GrailsClass instances relating to artefacts of the specified type.

      Parameters:
        `artefactType` - The type of artefact to retrieve, i.e. "Controller"
      Returns:
        An array of GrailsClasses which may empty by not null
      Since:
        0.5

    - #### @java.lang.SuppressWarnings("rawtypes") public java.lang.Class getClassForName(java.lang.String className)

      Retrieves a class for the given name within the GrailsApplication or returns null

      Parameters:
        `className` - The name of the class
      Returns:
        The class or null

    - #### public java.lang.ClassLoader getClassLoader()

      Returns the class loader instance for the Grails application.

      Returns:
        The ClassLoader instance

    - #### public Config getConfig()

      Returns the ConfigObject instance.

      Returns:
        The ConfigObject instance

    - #### public org.springframework.context.ApplicationContext getMainContext()

      Returns the Spring context for this application. Note that this will return `null` until the application is fully initialised. This context contains all the application artifacts, plugin beans, the works.

    - #### public org.grails.datastore.mapping.model.MappingContext getMappingContext()

      Returns:
        The GORM org.grails.datastore.mapping.model.MappingContext. Returns null if none present

    - #### public Metadata getMetadata()

      Get access to the project's metadata, specified in application.yml and grails.build.info if it is present

      This provides access to information like required grails version, application name, version etc but NOT general application settings.

      Returns:
        A read-only Map of data about the application, not environment specific

    - #### public org.springframework.context.ApplicationContext getParentContext()

      Returns the Spring application context that contains this application instance. It is the parent of the context returned by getMainContext().

    - #### @java.lang.SuppressWarnings("rawtypes") public org.springframework.core.io.Resource getResourceForClass(java.lang.Class theClazz)

      Retrieves a Resource instance for the given Grails class or null it doesn't exist.

      Parameters:
        `theClazz` - The Grails class
      Returns:
        A Resource or null

    - #### public boolean hasArtefactHandler(java.lang.String type)

      Test whether an artefact handler exists for a given type

      Parameters:
        `type` - The type of the handler
      Returns:
        true if it does

    - #### public void initialise()

      Initialise this GrailsApplication.

    - #### @java.lang.SuppressWarnings("rawtypes") public boolean isArtefact(java.lang.Class theClazz)

      Call this to find out if the class you have is an artefact loaded by grails.

      Parameters:
        `theClazz` - A class to test
      Returns:
        true if and only if the class was loaded from grails-app/
      Since:
        0.5

    - #### @java.lang.SuppressWarnings("rawtypes") public boolean isArtefactOfType(java.lang.String artefactType, java.lang.Class theClazz)

      Check if the specified artefact Class has been loaded by Grails already AND is of the type expected

      Parameters:
        `artefactType` - A string identifying the artefact type to check for
        `theClazz` - The class to check
      Returns:
        true if Grails considers the class to be managed as an artefact of the type specified.
      Since:
        0.5

    - #### public boolean isArtefactOfType(java.lang.String artefactType, java.lang.String className)

      Check if the artefact Class with the name specified is of the type expected

      Parameters:
        `artefactType` - A string identifying the artefact type to check for
        `className` - The name of a class to check
      Returns:
        true if Grails considers the class to be managed as an artefact of the type specified.
      Since:
        0.5

    - #### public boolean isInitialised()

      Returns whether this GrailsApplication has been initialised or not.

      Returns:
        true if it has been initialised

    - #### public boolean isWarDeployed()

      Returns true if this application has been deployed as a WAR file

      Returns:
        true if the application is WAR deployed

    - #### public void rebuild()

      Rebuilds this Application throwing away the class loader and re-constructing it from the loaded resources again. Can only be called in development mode and an error will be thrown if called in a different enivronment

    - #### public void refresh()

      This method will refresh the entire application

    - #### public void registerArtefactHandler(ArtefactHandler handler)

      Register a new artefact handler

      Parameters:
        `handler` - The new handler to add

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

      Sets the main Spring context for this application.

    - #### public void setMappingContext(org.grails.datastore.mapping.model.MappingContext mappingContext)

      Configures the org.grails.datastore.mapping.model.MappingContext for this application

      Parameters:
        `mappingContext` - The mapping context