1 /** 2 * The contents of this file are subject to the Mozilla Public License Version 1.1 3 * (the "License"); you may not use this file except in compliance with the License. 4 * You may obtain a copy of the License at http://www.mozilla.org/MPL/ 5 * Software distributed under the License is distributed on an "AS IS" basis, 6 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the 7 * specific language governing rights and limitations under the License. 8 * 9 * The Original Code is "" Description: 10 * "" 11 * 12 * The Initial Developer of the Original Code is University Health Network. Copyright (C) 13 * 2001. All Rights Reserved. 14 * 15 * Contributor(s): ______________________________________. 16 * 17 * Alternatively, the contents of this file may be used under the terms of the 18 * GNU General Public License (the "GPL"), in which case the provisions of the GPL are 19 * applicable instead of those above. If you wish to allow use of your version of this 20 * file only under the terms of the GPL and not to allow others to use your version 21 * of this file under the MPL, indicate your decision by deleting the provisions above 22 * and replace them with the notice and other provisions required by the GPL License. 23 * If you do not delete the provisions above, a recipient may use your version of 24 * this file under either the MPL or the GPL. 25 */ 26 /* 27 * To change this template, choose Tools | Templates 28 * and open the template in the editor. 29 */ 30 package ca.uhn.hl7v2.testpanel.model; 31 32 import java.beans.PropertyChangeListener; 33 import java.beans.PropertyChangeSupport; 34 import java.beans.PropertyVetoException; 35 import java.beans.VetoableChangeListener; 36 import java.beans.VetoableChangeSupport; 37 38 /** 39 * Base class for a model class 40 */ 41 public abstract class AbstractModelClass { 42 // ~ Instance fields 43 // ------------------------------------------------------------------------------------------------ 44 45 private transient PropertyChangeSupport myPropertyChangeSupport = new PropertyChangeSupport(this); 46 private transient VetoableChangeSupport myVetoableChangeSupport = new VetoableChangeSupport(this); 47 48 // ~ Methods 49 // -------------------------------------------------------------------------------------------------------- 50 51 /** 52 * Add a PropertyChangeListener for a specific property. The listener will 53 * be invoked only when a call on firePropertyChange names that specific 54 * property. The same listener object may be added more than once. For each 55 * property, the listener will be invoked the number of times it was added 56 * for that property. If <code>propertyName</code> or <code>listener</code> 57 * is null, no exception is thrown and no action is taken. 58 * 59 * @param propertyName 60 * The name of the property to listen on. 61 * @param listener 62 * The PropertyChangeListener to be added 63 */ 64 public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { 65 myPropertyChangeSupport.addPropertyChangeListener(propertyName, listener); 66 } 67 68 /** 69 * Add a PropertyChangeListener for a specific property. The listener will 70 * be invoked only when a call on firePropertyChange names that specific 71 * property. The same listener object may be added more than once. For each 72 * property, the listener will be invoked the number of times it was added 73 * for that property. If <code>propertyName</code> or <code>listener</code> 74 * is null, no exception is thrown and no action is taken. 75 * 76 * @param propertyName 77 * The name of the property to listen on. 78 * @param listener 79 * The PropertyChangeListener to be added 80 */ 81 public void addVetoableyChangeListener(String propertyName, VetoableChangeListener listener) { 82 myVetoableChangeSupport.addVetoableChangeListener(propertyName, listener); 83 } 84 85 public abstract Object exportConfigToXml(); 86 87 /** 88 * Report a bound property update to any registered listeners. No event is 89 * fired if old and new are equal and non-null. 90 * 91 * <p> 92 * This is merely a convenience wrapper around the more general 93 * firePropertyChange method that takes {@code PropertyChangeEvent} value. 94 * 95 * @param propertyName 96 * The programmatic name of the property that was changed. 97 * @param oldValue 98 * The old value of the property. 99 * @param newValue 100 * The new value of the property. 101 */ 102 public void firePropertyChange(String propertyName, Object oldValue, Object newValue) { 103 myPropertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue); 104 } 105 106 /** 107 * Report a bound property update to any registered listeners. No event is 108 * fired if old and new are equal and non-null. 109 * 110 * <p> 111 * This is merely a convenience wrapper around the more general 112 * firePropertyChange method that takes {@code PropertyChangeEvent} value. 113 * 114 * @param propertyName 115 * The programmatic name of the property that was changed. 116 * @param oldValue 117 * The old value of the property. 118 * @param newValue 119 * The new value of the property. 120 */ 121 public void fireVetoableChange(String propertyName, Object oldValue, Object newValue) throws PropertyVetoException { 122 myVetoableChangeSupport.fireVetoableChange(propertyName, oldValue, newValue); 123 } 124 125 /** 126 * Remove a PropertyChangeListener for a specific property. If 127 * <code>listener</code> was added more than once to the same event source 128 * for the specified property, it will be notified one less time after being 129 * removed. If <code>propertyName</code> is null, no exception is thrown and 130 * no action is taken. If <code>listener</code> is null, or was never added 131 * for the specified property, no exception is thrown and no action is 132 * taken. 133 * 134 * @param propertyName 135 * The name of the property that was listened on. 136 * @param listener 137 * The PropertyChangeListener to be removed 138 */ 139 public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { 140 myPropertyChangeSupport.removePropertyChangeListener(propertyName, listener); 141 } 142 143 public void removePropertyChangeListener(String propertyName, Class<? extends PropertyChangeListener> listenerClass) { 144 boolean found = false; 145 do { 146 for (PropertyChangeListener next : myPropertyChangeSupport.getPropertyChangeListeners(propertyName)) { 147 if (next.getClass().isInstance(listenerClass)) { 148 myPropertyChangeSupport.removePropertyChangeListener(propertyName, next); 149 found = true; 150 break; 151 } 152 } 153 } while (found); 154 } 155 156 /** 157 * Remove a PropertyChangeListener for a specific property. If 158 * <code>listener</code> was added more than once to the same event source 159 * for the specified property, it will be notified one less time after being 160 * removed. If <code>propertyName</code> is null, no exception is thrown and 161 * no action is taken. If <code>listener</code> is null, or was never added 162 * for the specified property, no exception is thrown and no action is 163 * taken. 164 * 165 * @param propertyName 166 * The name of the property that was listened on. 167 * @param listener 168 * The PropertyChangeListener to be removed 169 */ 170 public void removeVetoableChangeListener(String propertyName, VetoableChangeListener listener) { 171 myVetoableChangeSupport.removeVetoableChangeListener(propertyName, listener); 172 } 173 }