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