1 19 20 package org.netbeans.modules.j2ee.sun.share.config; 21 22 import java.io.File ; 23 import java.util.HashMap ; 24 import java.util.Iterator ; 25 26 import org.openide.filesystems.FileAttributeEvent; 27 import org.openide.filesystems.FileChangeListener; 28 import org.openide.filesystems.FileEvent; 29 import org.openide.filesystems.FileObject; 30 import org.openide.filesystems.FileRenameEvent; 31 import org.openide.filesystems.FileUtil; 32 33 import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider; 34 35 36 42 public abstract class AbstractFilesListener { 43 protected J2eeModuleProvider provider; 44 private HashMap fileListeners = new HashMap (); 45 46 private FileChangeListener listener = new FileListener(); 47 48 49 public AbstractFilesListener(J2eeModuleProvider provider) { 50 this.provider = provider; 51 startListening(); 52 } 53 54 protected abstract File [] getTargetFiles(); 55 protected abstract boolean isTarget(FileObject fo); 56 protected abstract boolean isTarget(String fileName); 57 protected abstract void targetCreated(FileObject fo); 58 protected abstract void targetDeleted(FileObject fo); 59 protected abstract void targetChanged(FileObject fo); 60 61 private synchronized void startListening() { 62 File [] targets = getTargetFiles(); 63 for (int i=0; i<targets.length; i++) { 64 startListening(targets[i]); 65 } 66 } 67 public synchronized void stopListening() { 68 for (Iterator i = fileListeners.keySet().iterator(); i.hasNext();) { 69 FileObject fo = (FileObject) i.next(); 70 removeFileListenerFrom(fo); 71 } 72 } 73 private void startListening(File target) { 74 FileObject targetFO = FileUtil.toFileObject(target); 75 while (targetFO == null) { 76 target = target.getParentFile(); 77 if (target == null) 78 return; 79 targetFO = FileUtil.toFileObject(target); 80 } 81 if (!fileListeners.containsKey(targetFO)) { 82 addFileListenerTo(targetFO); 83 } 84 } 85 86 private void addFileListenerTo(FileObject fo) { 87 FileChangeListener l = FileUtil.weakFileChangeListener(listener, fo); 88 fileListeners.put(fo, l); 89 fo.addFileChangeListener(l); 90 91 } 92 93 private void removeFileListenerFrom(FileObject fo) { 94 FileChangeListener l = (FileChangeListener)fileListeners.remove(fo); 95 if (l != null) { 96 fo.removeFileChangeListener(l); 97 } 98 } 99 100 private final class FileListener implements FileChangeListener { 101 102 public void fileFolderCreated(FileEvent e) { 103 startListening(); 104 } 105 public void fileDeleted(FileEvent e) { 106 FileObject fo = e.getFile(); 107 if (isTarget(fo)) { 108 synchronized(fileListeners) { 109 removeFileListenerFrom(fo); 110 } 111 targetDeleted(fo); 112 } 113 startListening(); 114 } 115 116 public void fileDataCreated(FileEvent e) { 117 FileObject fo = e.getFile(); 118 119 if (isTarget(fo)) { 120 synchronized(fileListeners) { 121 addFileListenerTo(fo); 122 } 123 targetCreated(fo); 124 } 125 } 126 public void fileRenamed(FileRenameEvent e) { 127 FileObject fo = e.getFile(); 128 if (isTarget(fo)) { 129 synchronized(fileListeners) { 130 if (!fileListeners.containsKey(fo)) { 131 addFileListenerTo(fo); 132 } 133 } 134 targetCreated(fo); 135 } else { 136 if (isTarget(e.getName() + "." + e.getExt())) { 137 synchronized(fileListeners) { 138 removeFileListenerFrom(fo); 139 } 140 targetDeleted(fo); 141 } 142 } 143 startListening(); 144 } 145 146 public void fileAttributeChanged(FileAttributeEvent e) { 147 } 148 149 public void fileChanged(FileEvent e) { 150 FileObject fo = e.getFile(); 151 if (isTarget(fo)) { 152 fo.refresh(true); 153 targetChanged(fo); 154 } 155 } 156 } 157 } 158 | Popular Tags |