001: /*
002: * The contents of this file are subject to the terms of the Common Development
003: * and Distribution License (the License). You may not use this file except in
004: * compliance with the License.
005: *
006: * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
007: * or http://www.netbeans.org/cddl.txt.
008: *
009: * When distributing Covered Code, include this CDDL Header Notice in each file
010: * and include the License file at http://www.netbeans.org/cddl.txt.
011: * If applicable, add the following below the CDDL Header, with the fields
012: * enclosed by brackets [] replaced by your own identifying information:
013: * "Portions Copyrighted [year] [name of copyright owner]"
014: *
015: * The Original Software is NetBeans. The Initial Developer of the Original
016: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
017: * Microsystems, Inc. All Rights Reserved.
018: */
019: package org.netbeans.modules.xslt.project.spi;
020:
021: import java.util.ArrayList;
022: import java.util.List;
023: import java.util.concurrent.locks.Lock;
024: import java.util.concurrent.locks.ReentrantReadWriteLock;
025: import org.openide.filesystems.FileObject;
026: import org.openide.filesystems.FileRenameEvent;
027:
028: /**
029: *
030: * @author Vitaly Bychkov
031: * @version 1.0
032: */
033: public class ProjectsFilesChangesSupport {
034: private Lock writeLock = new ReentrantReadWriteLock().writeLock();
035: private List<ProjectsFilesChangeListener> myListeners = new ArrayList<ProjectsFilesChangeListener>();
036:
037: public ProjectsFilesChangesSupport() {
038: }
039:
040: public void addPropertyChangeListener(
041: ProjectsFilesChangeListener changeListener) {
042: assert changeListener != null : "Try to add null listener."; // NOI18N
043: writeLock.lock();
044: try {
045: myListeners.add(changeListener);
046: } finally {
047: writeLock.unlock();
048: }
049: }
050:
051: public void removePropertyChangeListener(
052: ProjectsFilesChangeListener changeListener) {
053: assert changeListener != null : "Try to remove null listener."; // NOI18N
054: writeLock.lock();
055: try {
056: myListeners.remove(changeListener);
057: } finally {
058: writeLock.unlock();
059: }
060: }
061:
062: public void removeAllPropertyChangeListener() {
063: writeLock.lock();
064: try {
065: myListeners.clear();
066: } finally {
067: writeLock.unlock();
068: }
069: }
070:
071: public void fireFileAdded(FileObject fo) {
072: ProjectsFilesChangeListener[] tmp = new ProjectsFilesChangeListener[myListeners
073: .size()];
074: synchronized (myListeners) {
075: tmp = myListeners.toArray(tmp);
076: }
077:
078: for (ProjectsFilesChangeListener listener : tmp) {
079: listener.fileAdded(fo);
080: }
081: }
082:
083: public void fireFileRenamed(FileRenameEvent fe) {
084: ProjectsFilesChangeListener[] tmp = new ProjectsFilesChangeListener[myListeners
085: .size()];
086: synchronized (myListeners) {
087: tmp = myListeners.toArray(tmp);
088: }
089:
090: for (ProjectsFilesChangeListener listener : tmp) {
091: listener.fileRenamed(fe);
092: }
093: }
094:
095: public void fireFileDeleted(FileObject fo) {
096: ProjectsFilesChangeListener[] tmp = new ProjectsFilesChangeListener[myListeners
097: .size()];
098: synchronized (myListeners) {
099: tmp = myListeners.toArray(tmp);
100: }
101:
102: for (ProjectsFilesChangeListener listener : tmp) {
103: listener.fileDeleted(fo);
104: }
105: }
106: }
|