001 /*
002 * Copyright 2008-2017 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.javafx.controller;
017
018 import griffon.core.GriffonApplication;
019 import griffon.core.artifact.GriffonController;
020 import griffon.core.controller.Action;
021 import org.codehaus.griffon.runtime.core.controller.AbstractActionManager;
022 import org.slf4j.Logger;
023 import org.slf4j.LoggerFactory;
024
025 import javax.annotation.Nonnull;
026 import javax.inject.Inject;
027
028 import static griffon.util.GriffonApplicationUtils.isMacOSX;
029 import static griffon.util.GriffonNameUtils.getNaturalName;
030 import static griffon.util.GriffonNameUtils.isBlank;
031 import static griffon.util.TypeUtils.castToBoolean;
032
033 /**
034 * @author Andres Almiray
035 * @since 2.0.0
036 */
037 public class JavaFXActionManager extends AbstractActionManager {
038 private static final Logger LOG = LoggerFactory.getLogger(JavaFXActionManager.class);
039
040 private static final String EMPTY_STRING = "";
041 private static final String DOT = ".";
042 private static final String EQUALS = " = ";
043 private static final String KEY_NAME = "name";
044 private static final String KEY_ACCELERATOR = "accelerator";
045 private static final String KEY_DESCRIPTION = "description";
046 private static final String KEY_ICON = "icon";
047 private static final String KEY_IMAGE = "image";
048 private static final String KEY_ENABLED = "enabled";
049 private static final String KEY_SELECTED = "selected";
050 private static final String KEY_VISIBLE = "visible";
051 private static final String KEY_STYLE_CLASS = "styleclass";
052 private static final String KEY_STYLE = "style";
053 private static final String KEY_GRAPHIC_STYLE_CLASS = "graphic_styleclass";
054 private static final String KEY_GRAPHIC_STYLE = "graphic_style";
055 private static final String KEY_CTRL = "ctrl";
056 private static final String KEY_META = "meta";
057 private static final String TRUE = "true";
058 private static final String FALSE = "false";
059
060 @Inject
061 public JavaFXActionManager(@Nonnull GriffonApplication application) {
062 super(application);
063 }
064
065 @Nonnull
066 @Override
067 protected Action createControllerAction(@Nonnull GriffonController controller, @Nonnull String actionName) {
068 return new JavaFXGriffonControllerAction(getUiThreadManager(), this, controller, actionName);
069 }
070
071 @Override
072 protected void doConfigureAction(@Nonnull final Action action, @Nonnull final GriffonController controller, @Nonnull final String normalizeNamed, @Nonnull final String keyPrefix) {
073 controller.getApplication().addPropertyChangeListener(GriffonApplication.PROPERTY_LOCALE, evt -> configureAction((JavaFXGriffonControllerAction) action, controller, normalizeNamed, keyPrefix));
074 configureAction((JavaFXGriffonControllerAction) action, controller, normalizeNamed, keyPrefix);
075 }
076
077 protected void configureAction(@Nonnull JavaFXGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) {
078 resolveName(action, controller, normalizeNamed, keyPrefix);
079 resolveAccelerator(action, controller, normalizeNamed, keyPrefix);
080 resolveDescription(action, controller, normalizeNamed, keyPrefix);
081 resolveIcon(action, controller, normalizeNamed, keyPrefix);
082 resolveImage(action, controller, normalizeNamed, keyPrefix);
083 resolveEnabled(action, controller, normalizeNamed, keyPrefix);
084 resolveSelected(action, controller, normalizeNamed, keyPrefix);
085 resolveVisible(action, controller, normalizeNamed, keyPrefix);
086 resolveStyleClass(action, controller, normalizeNamed, keyPrefix);
087 resolveStyle(action, controller, normalizeNamed, keyPrefix);
088 resolveGraphicStyleClass(action, controller, normalizeNamed, keyPrefix);
089 resolveGraphicStyle(action, controller, normalizeNamed, keyPrefix);
090 }
091
092 protected void resolveName(@Nonnull JavaFXGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) {
093 String rsActionName = msg(keyPrefix, normalizeNamed, KEY_NAME, getNaturalName(normalizeNamed));
094 if (!isBlank(rsActionName)) {
095 trace(keyPrefix + normalizeNamed, KEY_NAME, rsActionName);
096 action.setName(rsActionName);
097 }
098 }
099
100 protected void resolveAccelerator(@Nonnull JavaFXGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) {
101 String rsAccelerator = msg(keyPrefix, normalizeNamed, KEY_ACCELERATOR, EMPTY_STRING);
102 if (!isBlank(rsAccelerator)) {
103 //noinspection ConstantConditions
104 if (!isMacOSX() && rsAccelerator.contains(KEY_META) && !rsAccelerator.contains(KEY_CTRL)) {
105 rsAccelerator = rsAccelerator.replace(KEY_META, KEY_CTRL);
106 }
107 trace(keyPrefix + normalizeNamed, KEY_ACCELERATOR, rsAccelerator);
108 action.setAccelerator(rsAccelerator);
109 }
110 }
111
112 protected void resolveDescription(@Nonnull JavaFXGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) {
113 String rsDescription = msg(keyPrefix, normalizeNamed, KEY_DESCRIPTION, EMPTY_STRING);
114 if (!isBlank(rsDescription)) {
115 trace(keyPrefix + normalizeNamed, KEY_DESCRIPTION, rsDescription);
116 action.setDescription(rsDescription);
117 }
118 }
119
120 protected void resolveIcon(@Nonnull JavaFXGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) {
121 String rsIcon = msg(keyPrefix, normalizeNamed, KEY_ICON, EMPTY_STRING);
122 if (!isBlank(rsIcon)) {
123 trace(keyPrefix + normalizeNamed, KEY_ICON, rsIcon);
124 action.setIcon(rsIcon);
125 }
126 }
127
128 protected void resolveImage(@Nonnull JavaFXGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) {
129 String rsImage = msg(keyPrefix, normalizeNamed, KEY_IMAGE, EMPTY_STRING);
130 if (!isBlank(rsImage)) {
131 trace(keyPrefix + normalizeNamed, KEY_IMAGE, rsImage);
132 action.setImage(rsImage);
133 }
134 }
135
136 protected void resolveEnabled(@Nonnull JavaFXGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) {
137 String rsEnabled = msg(keyPrefix, normalizeNamed, KEY_ENABLED, TRUE);
138 if (!isBlank(rsEnabled)) {
139 trace(keyPrefix + normalizeNamed, KEY_ENABLED, rsEnabled);
140 action.setEnabled(castToBoolean(rsEnabled));
141 }
142 }
143
144 protected void resolveSelected(@Nonnull JavaFXGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) {
145 String rsSelected = msg(keyPrefix, normalizeNamed, KEY_SELECTED, FALSE);
146 if (!isBlank(rsSelected)) {
147 trace(keyPrefix + normalizeNamed, KEY_SELECTED, rsSelected);
148 action.setSelected(castToBoolean(rsSelected));
149 }
150 }
151
152 protected void resolveVisible(@Nonnull JavaFXGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) {
153 String rsVisible = msg(keyPrefix, normalizeNamed, KEY_VISIBLE, TRUE);
154 if (!isBlank(rsVisible)) {
155 trace(keyPrefix + normalizeNamed, KEY_VISIBLE, rsVisible);
156 action.setVisible(castToBoolean(rsVisible));
157 }
158 }
159
160 protected void resolveStyleClass(@Nonnull JavaFXGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) {
161 String rsStyleClass = msg(keyPrefix, normalizeNamed, KEY_STYLE_CLASS, EMPTY_STRING);
162 if (!isBlank(rsStyleClass)) {
163 trace(keyPrefix + normalizeNamed, KEY_STYLE_CLASS, rsStyleClass);
164 action.setStyleClass(rsStyleClass);
165 }
166 }
167
168 protected void resolveStyle(@Nonnull JavaFXGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) {
169 String rsStyle = msg(keyPrefix, normalizeNamed, KEY_STYLE, EMPTY_STRING);
170 if (!isBlank(rsStyle)) {
171 trace(keyPrefix + normalizeNamed, KEY_STYLE, rsStyle);
172 action.setStyle(rsStyle);
173 }
174 }
175
176 protected void resolveGraphicStyleClass(@Nonnull JavaFXGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) {
177 String rsGraphicStyleClass = msg(keyPrefix, normalizeNamed, KEY_GRAPHIC_STYLE_CLASS, EMPTY_STRING);
178 if (!isBlank(rsGraphicStyleClass)) {
179 trace(keyPrefix + normalizeNamed, KEY_GRAPHIC_STYLE_CLASS, rsGraphicStyleClass);
180 action.setGraphicStyleClass(rsGraphicStyleClass);
181 }
182 }
183
184 protected void resolveGraphicStyle(@Nonnull JavaFXGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) {
185 String rsGraphicStyle = msg(keyPrefix, normalizeNamed, KEY_GRAPHIC_STYLE, EMPTY_STRING);
186 if (!isBlank(rsGraphicStyle)) {
187 trace(keyPrefix + normalizeNamed, KEY_GRAPHIC_STYLE, rsGraphicStyle);
188 action.setGraphicStyle(rsGraphicStyle);
189 }
190 }
191
192 protected void trace(@Nonnull String actionKey, @Nonnull String key, @Nonnull String value) {
193 if (LOG.isTraceEnabled()) {
194 LOG.trace(actionKey + DOT + key + EQUALS + value);
195 }
196 }
197 }
|