001 /*
002 * Copyright 2008-2014 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.pivot;
017
018 import griffon.core.ApplicationBootstrapper;
019 import griffon.exceptions.InstanceNotFoundException;
020 import org.apache.pivot.wtk.Application;
021 import org.apache.pivot.wtk.ApplicationContext;
022 import org.apache.pivot.wtk.Display;
023 import org.apache.pivot.wtk.Window;
024 import org.codehaus.griffon.runtime.core.AbstractGriffonApplication;
025 import org.codehaus.griffon.runtime.pivot.PivotApplicationBootstrapper;
026
027 import javax.annotation.Nonnull;
028 import java.util.List;
029 import java.util.Map;
030
031 import static griffon.util.GriffonClassUtils.setPropertiesNoException;
032 import static java.util.Arrays.asList;
033 import static org.apache.pivot.wtk.ApplicationContext.queueCallback;
034 import static org.apache.pivot.wtk.ApplicationContext.scheduleCallback;
035 import static org.apache.pivot.wtk.ApplicationContext.scheduleRecurringCallback;
036
037 /**
038 * @author Andres Almiray
039 * @since 2.0.0
040 */
041 public abstract class AbstractPivotGriffonApplication extends AbstractGriffonApplication implements Application {
042 public AbstractPivotGriffonApplication() {
043 this(EMPTY_ARGS);
044 }
045
046 public AbstractPivotGriffonApplication(@Nonnull String[] args) {
047 super(args);
048 }
049
050 @Override
051 public boolean shutdown() {
052 if (super.shutdown()) {
053 exit();
054 }
055 return false;
056 }
057
058 public void exit() {
059 System.exit(0);
060 }
061
062 @Nonnull
063 @Override
064 public Object createApplicationContainer(@Nonnull Map<String, Object> attributes) {
065 Window window = new Window();
066 setPropertiesNoException(window, attributes);
067 return window;
068 }
069
070 @Override
071 public void startup(Display display, org.apache.pivot.collections.Map<String, String> properties) throws Exception {
072 ApplicationBootstrapper bootstrapper = createApplicationBootstrapper(display);
073 bootstrapper.bootstrap();
074 afterStartup();
075 }
076
077 @Nonnull
078 protected ApplicationBootstrapper createApplicationBootstrapper(@Nonnull Display display) {
079 return new PivotApplicationBootstrapper(this, display);
080 }
081
082 protected void afterStartup() {
083 initialize();
084 startup();
085 ready();
086 }
087
088 @Override
089 public boolean shutdown(boolean optional) throws Exception {
090 shutdown();
091 return false;
092 }
093
094 public void suspend() {
095 event("AppSuspend", asList(this));
096 }
097
098 public void resume() {
099 event("AppResume", asList(this));
100 }
101
102 public void schedule(long delay, Runnable callback) {
103 scheduleCallback(callback, delay);
104 }
105
106 public void scheduleRecurring(long period, Runnable callback) {
107 scheduleRecurringCallback(callback, period);
108 }
109
110 public void scheduleRecurring(long delay, long period, Runnable callback) {
111 scheduleRecurringCallback(callback, delay, period);
112 }
113
114 public void queue(Runnable callback) {
115 queue(false, callback);
116 }
117
118 public void queue(boolean wait, Runnable callback) {
119 queueCallback(callback, wait);
120 }
121
122 public ApplicationContext.ResourceCacheDictionary getResourceCache() {
123 return ApplicationContext.getResourceCache();
124 }
125
126 private void event(@Nonnull String eventName, @Nonnull List<?> args) {
127 try {
128 getEventRouter().publishEvent(eventName, args);
129 } catch (InstanceNotFoundException infe) {
130 // ignore
131 }
132 }
133 }
|