/* * Copyright 2008-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.codehaus.griffon.runtime.swing.controller; import griffon.core.GriffonApplication; import griffon.core.artifact.GriffonController; import griffon.core.controller.Action; import org.codehaus.griffon.runtime.core.controller.AbstractActionManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.Nonnull; import javax.inject.Inject; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import static griffon.util.GriffonApplicationUtils.isMacOSX; import static griffon.util.GriffonNameUtils.getNaturalName; import static griffon.util.GriffonNameUtils.isBlank; import static griffon.util.TypeUtils.castToBoolean; /** * @author Andres Almiray * @since 2.0.0 */ public class SwingActionManager extends AbstractActionManager { private static final Logger LOG = LoggerFactory.getLogger(SwingActionManager.class); private static final String KEY_SELECTED = "selected"; private static final String KEY_ENABLED = "enabled"; private static final String KEY_LARGE_ICON = "large_icon"; private static final String KEY_SMALL_ICON = "small_icon"; private static final String KEY_LONG_DESCRIPTION = "long_description"; private static final String KEY_SHORT_DESCRIPTION = "short_description"; private static final String KEY_COMMAND = "command"; private static final String KEY_ACCELERATOR = "accelerator"; private static final String KEY_NAME = "name"; private static final String KEY_MNEMONIC = "mnemonic"; private static final String KEY_CTRL = "ctrl"; private static final String KEY_META = "meta"; private static final String EMPTY_STRING = ""; private static final String DOT = "."; private static final String EQUALS = " = "; @Inject public SwingActionManager(@Nonnull GriffonApplication application) { super(application); } @Nonnull @Override protected Action createControllerAction(@Nonnull GriffonController controller, @Nonnull String actionName) { return new SwingGriffonControllerAction(getUiThreadManager(), this, controller, actionName); } @Override protected void doConfigureAction(@Nonnull final Action action, @Nonnull final GriffonController controller, @Nonnull final String normalizeNamed, @Nonnull final String keyPrefix) { controller.getApplication().addPropertyChangeListener(GriffonApplication.PROPERTY_LOCALE, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { configureAction((SwingGriffonControllerAction) action, controller, normalizeNamed, keyPrefix); } }); configureAction((SwingGriffonControllerAction) action, controller, normalizeNamed, keyPrefix); } protected void configureAction(@Nonnull SwingGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) { resolveName(action, controller, normalizeNamed, keyPrefix); resolveAccelerator(action, controller, normalizeNamed, keyPrefix); resolveCommand(action, controller, normalizeNamed, keyPrefix); resolveShortDescription(action, controller, normalizeNamed, keyPrefix); resolveLongDescription(action, controller, normalizeNamed, keyPrefix); resolveMnemonic(action, controller, normalizeNamed, keyPrefix); resolveSmallIcon(action, controller, normalizeNamed, keyPrefix); resolveLargeIcon(action, controller, normalizeNamed, keyPrefix); resolveEnabled(action, controller, normalizeNamed, keyPrefix); resolveSelected(action, controller, normalizeNamed, keyPrefix); } protected void resolveName(@Nonnull SwingGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) { String rsActionName = msg(keyPrefix, normalizeNamed, KEY_NAME, getNaturalName(normalizeNamed)); if (!isBlank(rsActionName)) { trace(keyPrefix + normalizeNamed, KEY_NAME, rsActionName); action.setName(rsActionName); } } protected void resolveAccelerator(@Nonnull SwingGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) { String rsAccelerator = msg(keyPrefix, normalizeNamed, KEY_ACCELERATOR, EMPTY_STRING); if (!isBlank(rsAccelerator)) { //noinspection ConstantConditions if (!isMacOSX() && rsAccelerator.contains(KEY_META) && !rsAccelerator.contains(KEY_CTRL)) { rsAccelerator = rsAccelerator.replace(KEY_META, KEY_CTRL); } trace(keyPrefix + normalizeNamed, KEY_ACCELERATOR, rsAccelerator); action.setAccelerator(rsAccelerator); } } protected void resolveCommand(@Nonnull SwingGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) { String rsCommand = msg(keyPrefix, normalizeNamed, KEY_COMMAND, EMPTY_STRING); if (!isBlank(rsCommand)) { trace(keyPrefix + normalizeNamed, KEY_COMMAND, rsCommand); action.setCommand(rsCommand); } } protected void resolveShortDescription(@Nonnull SwingGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) { String rsShortDescription = msg(keyPrefix, normalizeNamed, KEY_SHORT_DESCRIPTION, EMPTY_STRING); if (!isBlank(rsShortDescription)) { trace(keyPrefix + normalizeNamed, KEY_SHORT_DESCRIPTION, rsShortDescription); action.setShortDescription(rsShortDescription); } } protected void resolveLongDescription(@Nonnull SwingGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) { String rsLongDescription = msg(keyPrefix, normalizeNamed, KEY_LONG_DESCRIPTION, EMPTY_STRING); if (!isBlank(rsLongDescription)) { trace(keyPrefix + normalizeNamed, KEY_LONG_DESCRIPTION, rsLongDescription); action.setLongDescription(rsLongDescription); } } protected void resolveMnemonic(@Nonnull SwingGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) { String rsMnemonic = msg(keyPrefix, normalizeNamed, KEY_MNEMONIC, EMPTY_STRING); if (!isBlank(rsMnemonic)) { trace(keyPrefix + normalizeNamed, KEY_MNEMONIC, rsMnemonic); action.setMnemonic(rsMnemonic); } } protected void resolveSmallIcon(@Nonnull SwingGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) { String rsSmallIcon = msg(keyPrefix, normalizeNamed, KEY_SMALL_ICON, EMPTY_STRING); if (!isBlank(rsSmallIcon)) { trace(keyPrefix + normalizeNamed, KEY_SMALL_ICON, rsSmallIcon); action.setSmallIcon(rsSmallIcon); } } protected void resolveLargeIcon(@Nonnull SwingGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) { String rsLargeIcon = msg(keyPrefix, normalizeNamed, KEY_LARGE_ICON, EMPTY_STRING); if (!isBlank(rsLargeIcon)) { trace(keyPrefix + normalizeNamed, KEY_LARGE_ICON, rsLargeIcon); action.setLargeIcon(rsLargeIcon); } } protected void resolveEnabled(@Nonnull SwingGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) { String rsEnabled = msg(keyPrefix, normalizeNamed, KEY_ENABLED, "true"); if (!isBlank(rsEnabled)) { trace(keyPrefix + normalizeNamed, KEY_ENABLED, rsEnabled); action.setEnabled(castToBoolean(rsEnabled)); } } protected void resolveSelected(@Nonnull SwingGriffonControllerAction action, @Nonnull GriffonController controller, @Nonnull String normalizeNamed, @Nonnull String keyPrefix) { String rsSelected = msg(keyPrefix, normalizeNamed, KEY_SELECTED, "false"); if (!isBlank(rsSelected)) { trace(keyPrefix + normalizeNamed, KEY_SELECTED, rsSelected); action.setSelected(castToBoolean(rsSelected)); } } protected void trace(@Nonnull String actionKey, @Nonnull String key, @Nonnull String value) { if (LOG.isTraceEnabled()) { LOG.trace(actionKey + DOT + key + EQUALS + value); } } }