ArtifactManager.java
001 /*
002  * Copyright 2009-2012 the original author or authors.
003  *
004  * Licensed under the Apache License, Version 2.0 (the "License");
005  * you may not use this file except in compliance with the License.
006  * You may obtain a copy of the License at
007  *
008  *      http://www.apache.org/licenses/LICENSE-2.0
009  *
010  * Unless required by applicable law or agreed to in writing, software
011  * distributed under the License is distributed on an "AS IS" BASIS,
012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013  * See the License for the specific language governing permissions and
014  * limitations under the License.
015  */
016 
017 package griffon.core;
018 
019 import java.util.Collections;
020 import java.util.List;
021 
022 /**
023  * Helper class capable of dealing with artifacts and their handlers.
024  *
025  @author Andres Almiray
026  */
027 public interface ArtifactManager extends ApplicationHandler {
028     GriffonClass[] EMPTY_GRIFFON_CLASS_ARRAY = new GriffonClass[0];
029     List<GriffonClass> EMPTY_GRIFFON_CLASS_LIST = Collections.<GriffonClass>emptyList();
030 
031     /**
032      * Registers an ArtifactHandler by type.<p>
033      * Should call initialize() on the handler.
034      *
035      @param handler an ArtifactHandler
036      */
037     void registerArtifactHandler(ArtifactHandler handler);
038 
039     /**
040      * Removes an ArtifactHandler by type.
041      *
042      @param handler an ArtifactHandler
043      */
044     void unregisterArtifactHandler(ArtifactHandler handler);
045 
046     /**
047      * Reads the artifacts definitions file from the classpath.<p>
048      * Should call initialize() on artifact handlers if there are any
049      * registered already.
050      */
051     void loadArtifactMetadata();
052 
053     /**
054      * Finds an artifact by name and type.<p>
055      * Example: findGriffonClass("Book", "controller") will return an
056      * artifact class that describes BookController.
057      *
058      @param name the name of the artifact, e.g. 'Book'
059      @param type the type of the artifact, e.g. 'controller'
060      @return the GriffonClass associated with the artifact is there's a match, null otherwise.
061      */
062     GriffonClass findGriffonClass(String name, String type);
063 
064     /**
065      * Finds an artifact by class and type.<p>
066      * Example: findGriffonClass(BookController, "controller") will return an
067      * artifact class that describes BookController.
068      *
069      @param clazz the name of the artifact, e.g. com.acme.BookController
070      @param type  the type of the artifact, e.g. 'controller'
071      @return the GriffonClass associated with the artifact is there's a match, null otherwise.
072      */
073     GriffonClass findGriffonClass(Class clazz, String type);
074 
075     /**
076      * Finds an artifact by class.<p>
077      * Example: findGriffonClass(aBookControllerInstance) will return an
078      * artifact class that describes BookController.
079      *
080      @param obj an artifact instance
081      @return the GriffonClass associated with the artifact is there's a match, null otherwise.
082      */
083     GriffonClass findGriffonClass(Object obj);
084 
085     /**
086      * Finds an artifact by class.<p>
087      * Example: findGriffonClass(BookController) will return an
088      * artifact class that describes BookController.
089      *
090      @param clazz a Class instance
091      @return the GriffonClass associated with the artifact is there's a match, null otherwise.
092      */
093     GriffonClass findGriffonClass(Class clazz);
094 
095     /**
096      * Finds an artifact by name.<p>
097      * Example: findGriffonClass("BookController") will return an
098      * artifact class that describes BookController.
099      *
100      @param fqnClassName full qualified class name
101      @return the GriffonClass associated with the artifact is there's a match, null otherwise.
102      */
103     GriffonClass findGriffonClass(String fqnClassName);
104 
105     /**
106      * Finds all artifacts of an specific type.<p>
107      * Example: getClassesOfType("controller") will return all
108      * artifact classes that describe controllers.
109      *
110      @param type an artifact type, e.g. 'controller'
111      @return a List of matching artifacts or an empty List if no match. Never returns null.
112      */
113     List<GriffonClass> getClassesOfType(String type);
114 
115     /**
116      * Finds all artifact classes.<p>
117      *
118      @return a List of all available GriffonClass instances. Never returns null.
119      */
120     List<GriffonClass> getAllClasses();
121 }