MVCGroupManager.java
001 /*
002  * Copyright 2008-2016 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 package griffon.core.mvc;
017 
018 import griffon.core.Context;
019 import griffon.core.GriffonApplication;
020 import griffon.core.artifact.GriffonController;
021 import griffon.core.artifact.GriffonModel;
022 import griffon.core.artifact.GriffonView;
023 import griffon.exceptions.ArtifactNotFoundException;
024 
025 import javax.annotation.Nonnull;
026 import javax.annotation.Nullable;
027 import java.util.Map;
028 
029 /**
030  * Manages the configuration and instantiation of MVC groups.
031  *
032  @author Andres Almiray
033  @since 2.0.0
034  */
035 public interface MVCGroupManager extends MVCHandler {
036     /**
037      * Creates an MVCConfiguration instance with the given arguments.
038      *
039      @param mvcType the name of the MVC group
040      @param members members of the group
041      @param config  additional configuration required by the group
042      @return a ready-to-use MVCGroupConfiguration instance
043      */
044     @Nonnull
045     MVCGroupConfiguration newMVCGroupConfiguration(@Nonnull String mvcType, @Nonnull Map<String, String> members, @Nonnull Map<String, Object> config);
046 
047     /**
048      * Clones an existing MVCGroupConfiguration, optionally overriding additional config values.
049      *
050      @param mvcType the name of the configuration to clone
051      @param config  additional config parameters to be set on the configuration
052      @return a ready-to-use MVCGroupConfiguration instance
053      */
054     @Nonnull
055     MVCGroupConfiguration cloneMVCGroupConfiguration(@Nonnull String mvcType, @Nonnull Map<String, Object> config);
056 
057     /**
058      * Creates a new MVCGroup instance.
059      *
060      @param configuration the configuration of the group
061      @param mvcId         the id to use for the group
062      @param members       the instance members of the group
063      @param parentGroup   the parent group (if any)
064      @return a ready-to-use MVCGroup instance
065      */
066     @Nonnull
067     MVCGroup newMVCGroup(@Nonnull MVCGroupConfiguration configuration, @Nullable String mvcId, @Nonnull Map<String, Object> members, @Nullable MVCGroup parentGroup);
068 
069     @Nonnull
070     Context newContext(@Nullable MVCGroup parentGroup);
071 
072     /**
073      * Initializes this manager with the group configurations provided by the application and addons.
074      *
075      @param configurations available group configurations
076      */
077     void initialize(@Nonnull Map<String, MVCGroupConfiguration> configurations);
078 
079     void addConfiguration(@Nonnull MVCGroupConfiguration configuration);
080 
081     void removeConfiguration(@Nonnull MVCGroupConfiguration configuration);
082 
083     void removeConfiguration(@Nonnull String name);
084 
085     @Nonnull
086     Map<String, MVCGroupConfiguration> getConfigurations();
087 
088     @Nonnull
089     Map<String, MVCGroup> getGroups();
090 
091     @Nonnull
092     MVCGroupConfiguration findConfiguration(@Nonnull String mvcType);
093 
094     @Nullable
095     MVCGroup findGroup(@Nonnull String mvcId);
096 
097     @Nullable
098     MVCGroup getAt(@Nonnull String mvcId);
099 
100     /**
101      * Returns all currently available model instances, keyed by group name.<p>
102      *
103      @return a Map of all currently instantiated models.
104      */
105     @Nonnull
106     Map<String, ? extends GriffonModel> getModels();
107 
108     /**
109      * Returns all currently available view instances, keyed by group name.<p>
110      *
111      @return a Map of all currently instantiated views.
112      */
113     @Nonnull
114     Map<String, ? extends GriffonView> getViews();
115 
116     /**
117      * Returns all currently available controller instances, keyed by group name.<p>
118      *
119      @return a Map of all currently instantiated controllers.
120      */
121     @Nonnull
122     Map<String, ? extends GriffonController> getControllers();
123 
124     GriffonApplication getApplication();
125 
126     /**
127      * Finds a named controller.
128      *
129      @param name the name of the group that holds the controller
130      @param type the type of the controller
131      @return the controller instance if found
132      @throws ArtifactNotFoundException if the named controller could not be found
133      @since 2.1.0
134      */
135     @Nonnull
136     <C extends GriffonController> C getController(@Nonnull String name, @Nonnull Class<C> typethrows ArtifactNotFoundException;
137 
138     /**
139      * Finds a named model.
140      *
141      @param name the name of the group that holds the model
142      @param type the type of the model
143      @return the model instance if found
144      @throws ArtifactNotFoundException if the named model could not be found
145      @since 2.1.0
146      */
147     @Nonnull
148     <M extends GriffonModel> M getModel(@Nonnull String name, @Nonnull Class<M> typethrows ArtifactNotFoundException;
149 
150     /**
151      * Finds a named view.
152      *
153      @param name the name of the group that holds the view
154      @param type the type of the view
155      @return the view instance if found
156      @throws ArtifactNotFoundException if the named view could not be found
157      @since 2.1.0
158      */
159     @Nonnull
160     <V extends GriffonView> V getView(@Nonnull String name, @Nonnull Class<V> typethrows ArtifactNotFoundException;
161 
162     /**
163      * Finds a named controller.
164      *
165      @param name the name of the group that holds the controller
166      @param type the type of the controller
167      @return the controller instance if found
168      @since 2.1.0
169      */
170     @Nullable
171     <C extends GriffonController> C findController(@Nonnull String name, @Nonnull Class<C> type);
172 
173     /**
174      * Finds a named model.
175      *
176      @param name the name of the group that holds the model
177      @param type the type of the model
178      @return the model instance if found
179      @since 2.1.0
180      */
181     @Nullable
182     <M extends GriffonModel> M findModel(@Nonnull String name, @Nonnull Class<M> type);
183 
184     /**
185      * Finds a named view.
186      *
187      @param name the name of the group that holds the view
188      @param type the type of the view
189      @return the view instance if found
190      @since 2.1.0
191      */
192     @Nullable
193     <V extends GriffonView> V findView(@Nonnull String name, @Nonnull Class<V> type);
194 }