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.xslt.tmap.model.xsltmap;
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:
26: /**
27: *
28: * @author Vitaly Bychkov
29: * @version 1.0
30: */
31: public class ChangeXsltMapSupport {
32:
33: private Lock writeLock = new ReentrantReadWriteLock().writeLock();
34: private List<XsltMapPropertyChangeListener> myListeners = new ArrayList<XsltMapPropertyChangeListener>();
35:
36: public ChangeXsltMapSupport() {
37: }
38:
39: void addPropertyChangeListener(
40: XsltMapPropertyChangeListener changeListener) {
41: assert changeListener != null : "Try to add null listener."; // NOI18N
42: writeLock.lock();
43: try {
44: myListeners.add(changeListener);
45: } finally {
46: writeLock.unlock();
47: }
48: }
49:
50: void removePropertyChangeListener(
51: XsltMapPropertyChangeListener changeListener) {
52: assert changeListener != null : "Try to remove null listener."; // NOI18N
53: writeLock.lock();
54: try {
55: myListeners.remove(changeListener);
56: } finally {
57: writeLock.unlock();
58: }
59: }
60:
61: public void fireTransformationDescChanged(
62: TransformationDesc oldDesc, TransformationDesc newDesc) {
63: XsltMapPropertyChangeListener[] tmp = new XsltMapPropertyChangeListener[myListeners
64: .size()];
65: synchronized (myListeners) {
66: tmp = myListeners.toArray(tmp);
67: }
68:
69: for (XsltMapPropertyChangeListener listener : tmp) {
70: listener.transformationDescChanged(oldDesc, newDesc);
71: }
72: }
73: }
|