static void addFileChangeListenerImpl(Logger logger, FileChangeListener listener, File path) { assert FileUtil.assertNormalized(path); logger.log(Level.FINE, "addFileChangeListener {0} @ {1}", new Object[]{listener, path}); synchronized (holders) { Map<File, FileChangeImpl> f2H = holders.get(listener); if (f2H == null) { f2H = new HashMap<File, FileChangeImpl>(); holders.put(listener, f2H); } final FileChangeImpl prev = f2H.get(path); if (prev != null) { StringBuilder sb = new StringBuilder(); sb.append("Already listening to ").append(path); sb.append("\nnew listener : ").append(listener); sb.append("\nholder listener: ").append(prev.get()); throw new IllegalArgumentException(sb.toString()); } final FileChangeImpl holder = new FileChangeImpl(listener, path); f2H.put(path, holder); holder.locateCurrent(); } }
static FileChangeListener removeFileChangeListenerImpl(Logger logger, FileChangeListener listener, File path) { assert path.equals(FileUtil.normalizeFile(path)) : "Need to normalize " + FileUtil.toDebugString(path) + "!"; logger.log(Level.FINE, "removeFileChangeListener {0} @ {1}", new Object[]{listener, path}); synchronized (holders) { Map<File, FileChangeImpl> f2H = holders.get(listener); if (f2H == null) { throw new IllegalArgumentException("Was not listening to " + path); } if (!f2H.containsKey(path)) { throw new IllegalArgumentException(listener + " was not listening to " + path + "; only to " + f2H.keySet()); } FileChangeImpl h = f2H.remove(path); if (f2H.isEmpty()) { holders.remove(listener); } h.run(); return h.get(); } }
public void fileAttributeChanged(FileAttributeEvent fe) { if (fe.getSource() == current) { if (isOnTarget) { FileChangeListener listener = get(); if (listener != null) { listener.fileAttributeChanged(fe); } } } }
public void fileDataCreated(FileEvent fe) { if (fe.getSource() == current) { if (isOnTarget) { FileChangeListener listener = get(); if (listener instanceof DeepListener) { ((DeepListener) listener).fileDataCreated(fe, true); } else if (listener != null) { listener.fileDataCreated(fe); } } else { someChange(); } } }
public void fileDeleted(FileEvent fe) { if (fe.getSource() == current) { if (isOnTarget) { FileChangeListener listener = get(); if (listener instanceof DeepListener) { ((DeepListener) listener).fileDeleted(fe, true); } else if (listener != null) { listener.fileDeleted(fe); } } someChange(); } }
public void fileRenamed(FileRenameEvent fe) { if (fe.getSource() == current) { if (isOnTarget) { FileChangeListener listener = get(); if (listener instanceof DeepListener) { ((DeepListener) listener).fileRenamed(fe, true); } else if (listener != null) { listener.fileRenamed(fe); } } someChange(); } }
public void fileChanged(FileEvent fe) { if (fe.getSource() == current) { if (isOnTarget) { FileChangeListener listener = get(); if (listener instanceof DeepListener) { ((DeepListener) listener).fileChanged(fe, true); } else if (listener != null) { listener.fileChanged(fe); } } else { someChange(); } } }
public void fileFolderCreated(FileEvent fe) { if (fe.getSource() == current) { if (isOnTarget) { FileChangeListener listener = get(); if (listener instanceof DeepListener) { ((DeepListener) listener).fileFolderCreated(fe, true); } else if (listener != null) { listener.fileFolderCreated(fe); } } else { someChange(); } } }
private void someChange() { FileChangeListener listener; boolean wasOnTarget; FileObject currentNew; synchronized (this) { if (current == null) { return; } listener = get(); if (listener == null) { return; } wasOnTarget = isOnTarget; locateCurrent(); currentNew = current; } if (isOnTarget && !wasOnTarget) { // fire events about itself creation (it is difference from FCL // on FileOject - it cannot be fired because we attach FCL on already existing FileOject if (currentNew.isFolder()) { listener.fileFolderCreated(new FileEvent(currentNew)); } else { listener.fileDataCreated(new FileEvent(currentNew)); } } }