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.core.artifact; 
017  
018  
019 import griffon.core.GriffonApplication; 
020 import griffon.core.artifact.GriffonModel; 
021 import griffon.core.artifact.GriffonModelClass; 
022  
023 import javax.annotation.Nonnull; 
024 import javax.annotation.Nullable; 
025 import javax.inject.Inject; 
026 import java.beans.PropertyChangeEvent; 
027 import java.beans.PropertyChangeListener; 
028 import java.beans.PropertyChangeSupport; 
029 import java.beans.PropertyVetoException; 
030 import java.beans.VetoableChangeListener; 
031 import java.beans.VetoableChangeSupport; 
032  
033 import static griffon.util.GriffonNameUtils.requireNonBlank; 
034 import static java.util.Objects.requireNonNull; 
035  
036 /** 
037  * Base implementation of the GriffonModel interface. 
038  * 
039  * @author Andres Almiray 
040  * @since 2.0.0 
041  */ 
042 public abstract class AbstractGriffonModel extends AbstractGriffonMvcArtifact implements GriffonModel { 
043     private static final String ERROR_EVENT_NULL = "Argument 'event' must not be null"; 
044     private static final String ERROR_PROPERTY_NAME_BLANK = "Argument 'propertyName' must not be blank"; 
045     protected final PropertyChangeSupport pcs; 
046     protected final VetoableChangeSupport vcs; 
047  
048     public AbstractGriffonModel() { 
049         pcs = new PropertyChangeSupport(this); 
050         vcs = new VetoableChangeSupport(this); 
051     } 
052  
053     /** 
054      * Creates a new instance of this class. 
055      * 
056      * @param application the GriffonApplication that holds this artifact. 
057      * @deprecated Griffon prefers field injection over constructor injector for artifacts as of 2.1.0 
058      */ 
059     @Inject 
060     @Deprecated 
061     public AbstractGriffonModel(@Nonnull GriffonApplication application) { 
062         super(application); 
063         pcs = new PropertyChangeSupport(this); 
064         vcs = new VetoableChangeSupport(this); 
065     } 
066  
067     @Nonnull 
068     @Override 
069     protected String getArtifactType() { 
070         return GriffonModelClass.TYPE; 
071     } 
072  
073     @Override 
074     public void addVetoableChangeListener(@Nullable VetoableChangeListener listener) { 
075         vcs.addVetoableChangeListener(listener); 
076     } 
077  
078     @Override 
079     public void addVetoableChangeListener(@Nullable String propertyName, @Nullable VetoableChangeListener listener) { 
080         vcs.addVetoableChangeListener(propertyName, listener); 
081     } 
082  
083     @Override 
084     public void removeVetoableChangeListener(@Nullable VetoableChangeListener listener) { 
085         vcs.removeVetoableChangeListener(listener); 
086     } 
087  
088     @Override 
089     public void removeVetoableChangeListener(@Nullable String propertyName, @Nullable VetoableChangeListener listener) { 
090         vcs.removeVetoableChangeListener(propertyName, listener); 
091     } 
092  
093     @Nonnull 
094     @Override 
095     public VetoableChangeListener[] getVetoableChangeListeners() { 
096         return vcs.getVetoableChangeListeners(); 
097     } 
098  
099     @Nonnull 
100     @Override 
101     public VetoableChangeListener[] getVetoableChangeListeners(@Nullable String propertyName) { 
102         return vcs.getVetoableChangeListeners(propertyName); 
103     } 
104  
105     @Override 
106     public void addPropertyChangeListener(@Nullable PropertyChangeListener listener) { 
107         pcs.addPropertyChangeListener(listener); 
108     } 
109  
110     @Override 
111     public void addPropertyChangeListener(@Nullable String propertyName, @Nullable PropertyChangeListener listener) { 
112         pcs.addPropertyChangeListener(propertyName, listener); 
113     } 
114  
115     @Override 
116     public void removePropertyChangeListener(@Nullable PropertyChangeListener listener) { 
117         pcs.removePropertyChangeListener(listener); 
118     } 
119  
120     @Override 
121     public void removePropertyChangeListener(@Nullable String propertyName, @Nullable PropertyChangeListener listener) { 
122         pcs.removePropertyChangeListener(propertyName, listener); 
123     } 
124  
125     @Nonnull 
126     @Override 
127     public PropertyChangeListener[] getPropertyChangeListeners() { 
128         return pcs.getPropertyChangeListeners(); 
129     } 
130  
131     @Nonnull 
132     @Override 
133     public PropertyChangeListener[] getPropertyChangeListeners(@Nullable String propertyName) { 
134         return pcs.getPropertyChangeListeners(propertyName); 
135     } 
136  
137     protected void firePropertyChange(@Nonnull PropertyChangeEvent event) { 
138         pcs.firePropertyChange(requireNonNull(event, ERROR_EVENT_NULL)); 
139     } 
140  
141     protected void firePropertyChange(@Nonnull String propertyName, @Nullable Object oldValue, @Nullable Object newValue) { 
142         pcs.firePropertyChange(requireNonBlank(propertyName, ERROR_PROPERTY_NAME_BLANK), oldValue, newValue); 
143     } 
144  
145     protected void fireVetoableChange(@Nonnull PropertyChangeEvent event) throws PropertyVetoException { 
146         vcs.fireVetoableChange(requireNonNull(event, ERROR_EVENT_NULL)); 
147     } 
148  
149     protected void fireVetoableChange(@Nonnull String propertyName, @Nullable Object oldValue, @Nullable Object newValue) throws PropertyVetoException { 
150         vcs.fireVetoableChange(requireNonBlank(propertyName, ERROR_PROPERTY_NAME_BLANK), oldValue, newValue); 
151     } 
152 }
    
    |