| 
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.core.controller;
 017
 018 import griffon.core.artifact.GriffonController;
 019 import griffon.core.controller.Action;
 020 import griffon.core.controller.ActionManager;
 021 import org.codehaus.griffon.runtime.core.AbstractObservable;
 022
 023 import javax.annotation.Nonnull;
 024 import javax.annotation.Nullable;
 025
 026 import static griffon.util.GriffonNameUtils.requireNonBlank;
 027 import static java.util.Objects.requireNonNull;
 028
 029 /**
 030  * @author Andres Almiray
 031  * @since 2.0.0
 032  */
 033 public abstract class AbstractAction extends AbstractObservable implements Action {
 034     private String name;
 035     private boolean enabled = true;
 036     private final ActionManager actionManager;
 037     private final GriffonController controller;
 038     private final String actionName;
 039     private boolean initialized;
 040     private final Object lock = new Object[0];
 041
 042     public AbstractAction(@Nonnull ActionManager actionManager, @Nonnull GriffonController controller, @Nonnull String actionName) {
 043         this.actionManager = requireNonNull(actionManager, "Argument 'actionManager' must not be null");
 044         this.controller = requireNonNull(controller, "Argument 'controller' must not be null");
 045         this.actionName = requireNonBlank(actionName, "Argument 'actionName' must not be blank");
 046     }
 047
 048     @Nonnull
 049     public ActionManager getActionManager() {
 050         return actionManager;
 051     }
 052
 053     @Nonnull
 054     public GriffonController getController() {
 055         return controller;
 056     }
 057
 058     @Nonnull
 059     public String getActionName() {
 060         return actionName;
 061     }
 062
 063     @Nonnull
 064     @Override
 065     public String getFullyQualifiedName() {
 066         return getController().getClass().getName() + "." + getActionName();
 067     }
 068
 069     @Override
 070     public boolean isEnabled() {
 071         return enabled;
 072     }
 073
 074     @Override
 075     public void setEnabled(boolean enabled) {
 076         firePropertyChange(KEY_ENABLED, this.enabled, this.enabled = enabled);
 077     }
 078
 079     @Nullable
 080     public String getName() {
 081         return name;
 082     }
 083
 084     @Override
 085     public void setName(@Nullable String name) {
 086         firePropertyChange(KEY_NAME, this.name, this.name = name);
 087     }
 088
 089     @Override
 090     public final void execute(Object... args) {
 091         if (isEnabled()) {
 092             doExecute(args);
 093         }
 094     }
 095
 096     protected abstract void doExecute(Object... args);
 097
 098     public final void initialize() {
 099         synchronized (lock) {
 100             if (initialized) return;
 101             doInitialize();
 102             initialized = true;
 103         }
 104     }
 105
 106     protected abstract void doInitialize();
 107 }
 |