01: /*
02: * The contents of this file are subject to the terms of the Common Development
03: * and Distribution License (the License). You may not use this file except in
04: * compliance with the License.
05: *
06: * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
07: * or http://www.netbeans.org/cddl.txt.
08: *
09: * When distributing Covered Code, include this CDDL Header Notice in each file
10: * and include the License file at http://www.netbeans.org/cddl.txt.
11: * If applicable, add the following below the CDDL Header, with the fields
12: * enclosed by brackets [] replaced by your own identifying information:
13: * "Portions Copyrighted [year] [name of copyright owner]"
14: *
15: * The Original Software is NetBeans. The Initial Developer of the Original
16: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
17: * Microsystems, Inc. All Rights Reserved.
18: */
19: package org.netbeans.modules.sql.project.ui.wizards;
20:
21: import java.util.ArrayList;
22: import java.util.List;
23: import java.util.concurrent.locks.Lock;
24: import java.util.concurrent.locks.ReentrantReadWriteLock;
25: import javax.swing.event.ChangeEvent;
26: import javax.swing.event.ChangeListener;
27:
28: /**
29: *
30: * @author Vitaly Bychkov
31: * @version 1.0
32: */
33: public class ChangeListenerSupport {
34:
35: public ChangeListenerSupport() {
36: }
37:
38: private Lock writeLock = new ReentrantReadWriteLock().writeLock();
39: private List<ChangeListener> myListeners = new ArrayList<ChangeListener>();
40:
41: public void addChangeListener(ChangeListener listener) {
42: assert listener != null : "Try to add null listener."; // NOI18N
43: writeLock.lock();
44: try {
45: myListeners.add(listener);
46: } finally {
47: writeLock.unlock();
48: }
49: }
50:
51: public void removeChangeListener(ChangeListener listener) {
52: assert listener != null : "Try to remove null listener."; // NOI18N
53: writeLock.lock();
54: try {
55: myListeners.remove(listener);
56: } finally {
57: writeLock.unlock();
58: }
59: }
60:
61: public void fireChangeEvent(ChangeEvent e) {
62: ChangeListener[] tmp = new ChangeListener[myListeners.size()];
63: synchronized (myListeners) {
64: tmp = myListeners.toArray(tmp);
65: }
66:
67: for (ChangeListener listener : tmp) {
68: listener.stateChanged(e);
69: }
70: }
71:
72: // public void fireChangeEvent2(ChangeEvent e) {
73: // writeLock.lock();
74: // try {
75: // for (ChangeListener listener : myListeners) {
76: // listener.stateChanged(e);
77: // }
78: // } finally {
79: // writeLock.unlock();
80: // }
81: // }
82: }
|