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