| 
001 /*002  * Copyright 2008-2015 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 org.codehaus.griffon.runtime.groovy.artifact;
 017
 018 import griffon.core.GriffonApplication;
 019 import griffon.core.artifact.GriffonArtifact;
 020 import griffon.core.artifact.GriffonClass;
 021 import griffon.core.artifact.GriffonController;
 022 import griffon.core.artifact.GriffonModel;
 023 import griffon.core.artifact.GriffonMvcArtifact;
 024 import griffon.core.artifact.GriffonView;
 025 import griffon.core.mvc.MVCFunction;
 026 import griffon.core.mvc.MVCGroup;
 027 import groovy.lang.Script;
 028 import org.slf4j.Logger;
 029 import org.slf4j.LoggerFactory;
 030
 031 import javax.annotation.Nonnull;
 032 import javax.annotation.Nullable;
 033 import javax.annotation.concurrent.GuardedBy;
 034 import javax.inject.Inject;
 035 import java.io.InputStream;
 036 import java.net.URL;
 037 import java.util.List;
 038 import java.util.Map;
 039 import java.util.concurrent.Callable;
 040 import java.util.concurrent.ExecutorService;
 041 import java.util.concurrent.Future;
 042
 043 /**
 044  * @author Andres Almiray
 045  */
 046 public abstract class AbstractGriffonArtifactScript extends Script implements GriffonArtifact {
 047     private final Logger log;
 048     private final Object lock = new Object[0];
 049     @Inject
 050     protected GriffonApplication application;
 051     @GuardedBy("lock")
 052     private GriffonClass griffonClass;
 053
 054     public AbstractGriffonArtifactScript() {
 055         log = LoggerFactory.getLogger("griffon.app." + getArtifactType() + "." + getClass().getName());
 056     }
 057
 058     @Nonnull
 059     public GriffonApplication getApplication() {
 060         return application;
 061     }
 062
 063     @Nonnull
 064     @Override
 065     public GriffonClass getGriffonClass() {
 066         synchronized (lock) {
 067             if (griffonClass == null) {
 068                 griffonClass = application.getArtifactManager().findGriffonClass(getClass());
 069             }
 070             //noinspection ConstantConditions
 071             return griffonClass;
 072         }
 073     }
 074
 075     @Nonnull
 076     @Override
 077     public Logger getLog() {
 078         return log;
 079     }
 080
 081     @Nonnull
 082     protected abstract String getArtifactType();
 083
 084     public boolean isUIThread() {
 085         return application.getUIThreadManager().isUIThread();
 086     }
 087
 088     @Nonnull
 089     public <R> Future<R> runFuture(@Nonnull ExecutorService executorService, @Nonnull Callable<R> callable) {
 090         return application.getUIThreadManager().runFuture(executorService, callable);
 091     }
 092
 093     @Nonnull
 094     public <R> Future<R> runFuture(@Nonnull Callable<R> callable) {
 095         return application.getUIThreadManager().runFuture(callable);
 096     }
 097
 098     public void runInsideUISync(@Nonnull Runnable runnable) {
 099         application.getUIThreadManager().runInsideUISync(runnable);
 100     }
 101
 102     public void runOutsideUI(@Nonnull Runnable runnable) {
 103         application.getUIThreadManager().runOutsideUI(runnable);
 104     }
 105
 106     public void runInsideUIAsync(@Nonnull Runnable runnable) {
 107         application.getUIThreadManager().runInsideUIAsync(runnable);
 108     }
 109
 110     @Nullable
 111     @Override
 112     public <R> R runInsideUISync(@Nonnull Callable<R> callable) {
 113         return application.getUIThreadManager().runInsideUISync(callable);
 114     }
 115
 116     @Nonnull
 117     public ClassLoader classloader() {
 118         return application.getResourceHandler().classloader();
 119     }
 120
 121     @Nullable
 122     public URL getResourceAsURL(@Nonnull String name) {
 123         return application.getResourceHandler().getResourceAsURL(name);
 124     }
 125
 126     @Nullable
 127     public List<URL> getResources(@Nonnull String name) {
 128         return application.getResourceHandler().getResources(name);
 129     }
 130
 131     @Nullable
 132     public InputStream getResourceAsStream(@Nonnull String name) {
 133         return application.getResourceHandler().getResourceAsStream(name);
 134     }
 135
 136     @Nonnull
 137     public MVCGroup createMVCGroup(@Nonnull Map<String, Object> args, @Nonnull String mvcType) {
 138         return application.getMvcGroupManager().createMVCGroup(args, mvcType);
 139     }
 140
 141     @Nonnull
 142     public List<? extends GriffonMvcArtifact> createMVC(@Nonnull String mvcType) {
 143         return application.getMvcGroupManager().createMVC(mvcType);
 144     }
 145
 146     public <M extends GriffonModel, V extends GriffonView, C extends GriffonController> void withMVC(@Nonnull String mvcType, @Nonnull String mvcId, @Nonnull MVCFunction<M, V, C> handler) {
 147         application.getMvcGroupManager().withMVC(mvcType, mvcId, handler);
 148     }
 149
 150     @Nonnull
 151     public List<? extends GriffonMvcArtifact> createMVC(@Nonnull String mvcType, @Nonnull String mvcId) {
 152         return application.getMvcGroupManager().createMVC(mvcType, mvcId);
 153     }
 154
 155     @Nonnull
 156     public List<? extends GriffonMvcArtifact> createMVC(@Nonnull Map<String, Object> args, @Nonnull String mvcType, @Nonnull String mvcId) {
 157         return application.getMvcGroupManager().createMVC(args, mvcType, mvcId);
 158     }
 159
 160     public <M extends GriffonModel, V extends GriffonView, C extends GriffonController> void withMVC(@Nonnull Map<String, Object> args, @Nonnull String mvcType, @Nonnull String mvcId, @Nonnull MVCFunction<M, V, C> handler) {
 161         application.getMvcGroupManager().withMVC(args, mvcType, mvcId, handler);
 162     }
 163
 164     @Nonnull
 165     public MVCGroup createMVCGroup(@Nonnull Map<String, Object> args, @Nonnull String mvcType, @Nonnull String mvcId) {
 166         return application.getMvcGroupManager().createMVCGroup(args, mvcType, mvcId);
 167     }
 168
 169     @Nonnull
 170     public MVCGroup createMVCGroup(@Nonnull String mvcType, @Nonnull String mvcId, @Nonnull Map<String, Object> args) {
 171         return application.getMvcGroupManager().createMVCGroup(mvcType, mvcId, args);
 172     }
 173
 174     @Nonnull
 175     public List<? extends GriffonMvcArtifact> createMVC(@Nonnull Map<String, Object> args, @Nonnull String mvcType) {
 176         return application.getMvcGroupManager().createMVC(args, mvcType);
 177     }
 178
 179     public <M extends GriffonModel, V extends GriffonView, C extends GriffonController> void withMVC(@Nonnull String mvcType, @Nonnull MVCFunction<M, V, C> handler) {
 180         application.getMvcGroupManager().withMVC(mvcType, handler);
 181     }
 182
 183     @Nonnull
 184     public MVCGroup createMVCGroup(@Nonnull String mvcType) {
 185         return application.getMvcGroupManager().createMVCGroup(mvcType);
 186     }
 187
 188     @Nonnull
 189     public MVCGroup createMVCGroup(@Nonnull String mvcType, @Nonnull String mvcId) {
 190         return application.getMvcGroupManager().createMVCGroup(mvcType, mvcId);
 191     }
 192
 193     @Nonnull
 194     public List<? extends GriffonMvcArtifact> createMVC(@Nonnull String mvcType, @Nonnull Map<String, Object> args) {
 195         return application.getMvcGroupManager().createMVC(mvcType, args);
 196     }
 197
 198     public <M extends GriffonModel, V extends GriffonView, C extends GriffonController> void withMVC(@Nonnull Map<String, Object> args, @Nonnull String mvcType, @Nonnull MVCFunction<M, V, C> handler) {
 199         application.getMvcGroupManager().withMVC(args, mvcType, handler);
 200     }
 201
 202     public <M extends GriffonModel, V extends GriffonView, C extends GriffonController> void withMVC(@Nonnull String mvcType, @Nonnull Map<String, Object> args, @Nonnull MVCFunction<M, V, C> handler) {
 203         application.getMvcGroupManager().withMVC(mvcType, args, handler);
 204     }
 205
 206     @Nonnull
 207     public MVCGroup createMVCGroup(@Nonnull String mvcType, @Nonnull Map<String, Object> args) {
 208         return application.getMvcGroupManager().createMVCGroup(mvcType, args);
 209     }
 210
 211     @Nonnull
 212     public List<? extends GriffonMvcArtifact> createMVC(@Nonnull String mvcType, @Nonnull String mvcId, @Nonnull Map<String, Object> args) {
 213         return application.getMvcGroupManager().createMVC(mvcType, mvcId, args);
 214     }
 215
 216     public <M extends GriffonModel, V extends GriffonView, C extends GriffonController> void withMVC(@Nonnull String mvcType, @Nonnull String mvcId, @Nonnull Map<String, Object> args, @Nonnull MVCFunction<M, V, C> handler) {
 217         application.getMvcGroupManager().withMVC(mvcType, mvcId, args, handler);
 218     }
 219
 220     public void destroyMVCGroup(@Nonnull String mvcId) {
 221         application.getMvcGroupManager().destroyMVCGroup(mvcId);
 222     }
 223 }
 |