AbstractGriffonArtifact.java
001 /*
002  * Copyright 2010-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 org.codehaus.griffon.runtime.core;
018 
019 import griffon.core.*;
020 import griffon.util.ApplicationHolder;
021 import groovy.lang.Closure;
022 import groovy.lang.GroovyObjectSupport;
023 import groovy.lang.GroovySystem;
024 import groovy.lang.MetaClass;
025 import org.codehaus.griffon.runtime.util.GriffonApplicationHelper;
026 import org.slf4j.Logger;
027 import org.slf4j.LoggerFactory;
028 
029 import java.io.InputStream;
030 import java.net.URL;
031 import java.util.Collections;
032 import java.util.List;
033 import java.util.Map;
034 import java.util.concurrent.Callable;
035 import java.util.concurrent.ExecutorService;
036 import java.util.concurrent.Future;
037 
038 /**
039  * Base implementation of the GriffonArtifact interface.
040  *
041  @author Andres Almiray
042  @since 0.9.1
043  */
044 public abstract class AbstractGriffonArtifact extends GroovyObjectSupport implements GriffonArtifact {
045     private GriffonApplication app;
046     private final Logger log;
047     private final ResourceLocator resourceLocator = new ResourceLocator();
048 
049     public static MetaClass metaClassOf(GriffonArtifact artifact) {
050         if (artifact == nullreturn null;
051         return GriffonApplicationHelper.expandoMetaClassFor(artifact.getClass());
052     }
053 
054     public AbstractGriffonArtifact() {
055         log = LoggerFactory.getLogger("griffon.app." + getArtifactType() "." + getClass().getName());
056     }
057 
058     protected abstract String getArtifactType();
059 
060     public GriffonApplication getApp() {
061         return app;
062     }
063 
064     public void setApp(GriffonApplication app) {
065         this.app = app;
066     }
067 
068     public Object newInstance(Class clazz, String type) {
069         return GriffonApplicationHelper.newInstance(app, clazz, type);
070     }
071 
072     public MetaClass getMetaClass() {
073         return metaClassOf(this);
074     }
075 
076     public void setMetaClass(MetaClass metaClass) {
077         GroovySystem.getMetaClassRegistry().setMetaClass(getClass(), metaClass);
078     }
079 
080     public GriffonClass getGriffonClass() {
081         if (app == nullapp = ApplicationHolder.getApplication();
082         return app.getArtifactManager().findGriffonClass(getClass());
083     }
084 
085     public boolean isUIThread() {
086         return UIThreadManager.getInstance().isUIThread();
087     }
088 
089     // TODO @deprecated - remove before 1.0
090     public void execAsync(Runnable runnable) {
091         execInsideUIAsync(runnable);
092     }
093 
094     // TODO @deprecated - remove before 1.0
095     public void execSync(Runnable runnable) {
096         execInsideUISync(runnable);
097     }
098 
099     // TODO @deprecated - remove before 1.0
100     public void execOutside(Runnable runnable) {
101         execOutsideUI(runnable);
102     }
103 
104     public void execInsideUIAsync(Runnable runnable) {
105         UIThreadManager.getInstance().executeAsync(runnable);
106     }
107 
108     public void execInsideUISync(Runnable runnable) {
109         UIThreadManager.getInstance().executeSync(runnable);
110     }
111 
112     public void execOutsideUI(Runnable runnable) {
113         UIThreadManager.getInstance().executeOutside(runnable);
114     }
115 
116     public Future execFuture(ExecutorService executorService, Closure closure) {
117         return UIThreadManager.getInstance().executeFuture(executorService, closure);
118     }
119 
120     public Future execFuture(Closure closure) {
121         return UIThreadManager.getInstance().executeFuture(closure);
122     }
123 
124     public Future execFuture(ExecutorService executorService, Callable callable) {
125         return UIThreadManager.getInstance().executeFuture(executorService, callable);
126     }
127 
128     public Future execFuture(Callable callable) {
129         return UIThreadManager.getInstance().executeFuture(callable);
130     }
131 
132     public Logger getLog() {
133         return log;
134     }
135 
136     public MVCGroup buildMVCGroup(String mvcType) {
137         return getApp().getMvcGroupManager().buildMVCGroup(mvcType, null, Collections.<String, Object>emptyMap());
138     }
139 
140     public MVCGroup buildMVCGroup(String mvcType, String mvcName) {
141         return getApp().getMvcGroupManager().buildMVCGroup(mvcType, mvcName, Collections.<String, Object>emptyMap());
142     }
143 
144     public MVCGroup buildMVCGroup(Map<String, Object> args, String mvcType) {
145         return getApp().getMvcGroupManager().buildMVCGroup(mvcType, null, args);
146     }
147 
148     public MVCGroup buildMVCGroup(String mvcType, Map<String, Object> args) {
149         return getApp().getMvcGroupManager().buildMVCGroup(mvcType, null, args);
150     }
151 
152     public MVCGroup buildMVCGroup(Map<String, Object> args, String mvcType, String mvcName) {
153         return getApp().getMvcGroupManager().buildMVCGroup(mvcType, mvcName, args);
154     }
155 
156     public MVCGroup buildMVCGroup(String mvcType, String mvcName, Map<String, Object> args) {
157         return getApp().getMvcGroupManager().buildMVCGroup(mvcType, mvcName, args);
158     }
159 
160     public List<? extends GriffonMvcArtifact> createMVCGroup(String mvcType) {
161         return getApp().getMvcGroupManager().createMVCGroup(mvcType, null, Collections.<String, Object>emptyMap());
162     }
163 
164     public List<? extends GriffonMvcArtifact> createMVCGroup(Map<String, Object> args, String mvcType) {
165         return getApp().getMvcGroupManager().createMVCGroup(mvcType, null, args);
166     }
167 
168     public List<? extends GriffonMvcArtifact> createMVCGroup(String mvcType, Map<String, Object> args) {
169         return getApp().getMvcGroupManager().createMVCGroup(mvcType, null, args);
170     }
171 
172     public List<? extends GriffonMvcArtifact> createMVCGroup(String mvcType, String mvcName) {
173         return getApp().getMvcGroupManager().createMVCGroup(mvcType, mvcName, Collections.<String, Object>emptyMap());
174     }
175 
176     public List<? extends GriffonMvcArtifact> createMVCGroup(Map<String, Object> args, String mvcType, String mvcName) {
177         return getApp().getMvcGroupManager().createMVCGroup(mvcType, mvcName, args);
178     }
179 
180     public List<? extends GriffonMvcArtifact> createMVCGroup(String mvcType, String mvcName, Map<String, Object> args) {
181         return getApp().getMvcGroupManager().createMVCGroup(mvcType, mvcName, args);
182     }
183 
184     public void destroyMVCGroup(String mvcName) {
185         getApp().getMvcGroupManager().destroyMVCGroup(mvcName);
186     }
187 
188     public void withMVCGroup(String mvcType, Closure handler) {
189         getApp().getMvcGroupManager().withMVCGroup(mvcType, null, Collections.<String, Object>emptyMap(), handler);
190     }
191 
192     public void withMVCGroup(String mvcType, String mvcName, Closure handler) {
193         getApp().getMvcGroupManager().withMVCGroup(mvcType, mvcName, Collections.<String, Object>emptyMap(), handler);
194     }
195 
196     public void withMVCGroup(String mvcType, Map<String, Object> args, Closure handler) {
197         getApp().getMvcGroupManager().withMVCGroup(mvcType, null, args, handler);
198     }
199 
200     public void withMVCGroup(Map<String, Object> args, String mvcType, Closure handler) {
201         getApp().getMvcGroupManager().withMVCGroup(mvcType, null, args, handler);
202     }
203 
204     public void withMVCGroup(String mvcType, String mvcName, Map<String, Object> args, Closure handler) {
205         getApp().getMvcGroupManager().withMVCGroup(mvcType, mvcName, args, handler);
206     }
207 
208     public void withMVCGroup(Map<String, Object> args, String mvcType, String mvcName, Closure handler) {
209         getApp().getMvcGroupManager().withMVCGroup(mvcType, mvcName, args, handler);
210     }
211 
212     public <M extends GriffonModel, V extends GriffonView, C extends GriffonController> void withMVCGroup(String mvcType, MVCClosure<M, V, C> handler) {
213         getApp().getMvcGroupManager().withMVCGroup(mvcType, null, Collections.<String, Object>emptyMap(), handler);
214     }
215 
216     public <M extends GriffonModel, V extends GriffonView, C extends GriffonController> void withMVCGroup(String mvcType, String mvcName, MVCClosure<M, V, C> handler) {
217         getApp().getMvcGroupManager().withMVCGroup(mvcType, mvcName, Collections.<String, Object>emptyMap(), handler);
218     }
219 
220     public <M extends GriffonModel, V extends GriffonView, C extends GriffonController> void withMVCGroup(String mvcType, Map<String, Object> args, MVCClosure<M, V, C> handler) {
221         getApp().getMvcGroupManager().withMVCGroup(mvcType, null, args, handler);
222     }
223 
224     public <M extends GriffonModel, V extends GriffonView, C extends GriffonController> void withMVCGroup(Map<String, Object> args, String mvcType, MVCClosure<M, V, C> handler) {
225         getApp().getMvcGroupManager().withMVCGroup(mvcType, null, args, handler);
226     }
227 
228     public <M extends GriffonModel, V extends GriffonView, C extends GriffonController> void withMVCGroup(String mvcType, String mvcName, Map<String, Object> args, MVCClosure<M, V, C> handler) {
229         getApp().getMvcGroupManager().withMVCGroup(mvcType, mvcName, args, handler);
230     }
231 
232     public <M extends GriffonModel, V extends GriffonView, C extends GriffonController> void withMVCGroup(Map<String, Object> args, String mvcType, String mvcName, MVCClosure<M, V, C> handler) {
233         getApp().getMvcGroupManager().withMVCGroup(mvcType, mvcName, args, handler);
234     }
235 
236     public InputStream getResourceAsStream(String name) {
237         return resourceLocator.getResourceAsStream(name);
238     }
239 
240     public URL getResourceAsURL(String name) {
241         return resourceLocator.getResourceAsURL(name);
242     }
243 
244     public List<URL> getResources(String name) {
245         return resourceLocator.getResources(name);
246     }
247 }