GriffonApplication.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;
017 
018 import griffon.core.addon.AddonManager;
019 import griffon.core.artifact.ArtifactManager;
020 import griffon.core.controller.ActionManager;
021 import griffon.core.env.ApplicationPhase;
022 import griffon.core.event.EventRouter;
023 import griffon.core.i18n.MessageSource;
024 import griffon.core.injection.Injector;
025 import griffon.core.mvc.MVCGroupManager;
026 import griffon.core.resources.ResourceHandler;
027 import griffon.core.resources.ResourceInjector;
028 import griffon.core.resources.ResourceResolver;
029 import griffon.core.threading.UIThreadManager;
030 import griffon.core.view.WindowManager;
031 import org.slf4j.Logger;
032 
033 import javax.annotation.Nonnull;
034 import javax.annotation.Nullable;
035 import java.util.Locale;
036 import java.util.Map;
037 
038 /**
039  * Defines the basic contract of a Griffon application.<p>
040  *
041  @author Danno Ferrin
042  @author Andres Almiray
043  @since 0.0.0
044  */
045 public interface GriffonApplication extends Observable {
046     String PROPERTY_LOCALE = "locale";
047     String PROPERTY_PHASE = "phase";
048 
049     @Nonnull
050     Object createApplicationContainer(@Nonnull Map<String, Object> attributes);
051 
052     @Nonnull
053     ApplicationClassLoader getApplicationClassLoader();
054 
055     @Nonnull
056     Configuration getConfiguration();
057 
058     @Nonnull
059     UIThreadManager getUIThreadManager();
060 
061     @Nonnull
062     EventRouter getEventRouter();
063 
064     @Nonnull
065     ArtifactManager getArtifactManager();
066 
067     @Nonnull
068     ActionManager getActionManager();
069 
070     @Nonnull
071     AddonManager getAddonManager();
072 
073     @Nonnull
074     MVCGroupManager getMvcGroupManager();
075 
076     @Nonnull
077     MessageSource getMessageSource();
078 
079     @Nonnull
080     ResourceResolver getResourceResolver();
081 
082     @Nonnull
083     ResourceHandler getResourceHandler();
084 
085     @Nonnull
086     ResourceInjector getResourceInjector();
087 
088     @Nonnull
089     Injector<?> getInjector();
090 
091     @Nonnull
092     Context getContext();
093 
094     @Nonnull
095     <W> WindowManager<W> getWindowManager();
096 
097     // --== Lifecycle ==--
098 
099     /**
100      * Executes the 'Initialize' life cycle phase.
101      */
102     void initialize();
103 
104     /**
105      * Executes the 'Startup' life cycle phase.
106      */
107     void startup();
108 
109     /**
110      * Executes the 'Ready' life cycle phase.
111      */
112     void ready();
113 
114     /**
115      * Executes the 'Shutdown' life cycle phase.
116      *
117      @return false if the shutdown sequence was aborted
118      */
119     boolean shutdown();
120 
121     /**
122      * Queries any available ShutdownHandlers.
123      *
124      @return true if the shutdown sequence can proceed, false otherwise
125      */
126     boolean canShutdown();
127 
128     /**
129      * Registers a ShutdownHandler on this application
130      *
131      @param handler the shutdown handler to be registered; null and/or
132      *                duplicated values should be ignored
133      */
134     void addShutdownHandler(@Nonnull ShutdownHandler handler);
135 
136     /**
137      * Removes a ShutdownHandler from this application
138      *
139      @param handler the shutdown handler to be removed; null and/or
140      *                duplicated values should be ignored
141      */
142     void removeShutdownHandler(@Nonnull ShutdownHandler handler);
143 
144     // --== Properties ==--
145 
146     /**
147      * Gets the application locale.
148      *
149      @return the current Locale used by the application. Never returns null.
150      */
151     @Nonnull
152     Locale getLocale();
153 
154     /**
155      * Sets the application locale.<p>
156      * This is a bound property.
157      *
158      @param locale the Locale value to use
159      */
160     void setLocale(@Nonnull Locale locale);
161 
162     /**
163      * Sets the application locale.<p>
164      * This is a bound property.
165      *
166      @param locale a literal representation of a Locale
167      */
168     void setLocaleAsString(@Nullable String locale);
169 
170     /**
171      * Returns the current phase.
172      *
173      @return returns the current ApplicationPhase. Never returns null.
174      */
175     @Nonnull
176     ApplicationPhase getPhase();
177 
178     /**
179      * Returns the arguments set on the command line (if any).<p>
180      *
181      @return an array of command line arguments. Never returns null.
182      */
183     @Nonnull
184     String[] getStartupArgs();
185 
186     /**
187      * Returns a Logger instance suitable for this application.
188      *
189      @return a Logger instance.
190      */
191     @Nonnull
192     Logger getLog();
193 }