diff -r 49bddf05fdce masterfs/src/org/netbeans/modules/masterfs/ProvidedExtensionsProxy.java --- a/masterfs/src/org/netbeans/modules/masterfs/ProvidedExtensionsProxy.java Mon Jun 23 15:28:25 2008 -0700 +++ b/masterfs/src/org/netbeans/modules/masterfs/ProvidedExtensionsProxy.java Tue Jun 24 14:22:39 2008 +0200 @@ -60,12 +60,12 @@ public class ProvidedExtensionsProxy extends ProvidedExtensions { private Collection/*AnnotationProvider*/ annotationProviders; private static ThreadLocal reentrantCheck = new ThreadLocal(); - + /** Creates a new instance of ProvidedExtensionsProxy */ public ProvidedExtensionsProxy(Collection/*AnnotationProvider*/ annotationProviders) { this.annotationProviders = annotationProviders; } - + public ProvidedExtensions.DeleteHandler getDeleteHandler(final File f) { ProvidedExtensions.DeleteHandler retValue = null; for (Iterator it = annotationProviders.iterator(); it.hasNext() && retValue == null;) { @@ -74,11 +74,11 @@ if (iListener instanceof ProvidedExtensions) { ProvidedExtensions.DeleteHandler delegate = ((ProvidedExtensions)iListener).getDeleteHandler(f); retValue = delegate != null ? new DelegatingDeleteHandler(delegate) : null; - } + } } - return retValue; + return retValue; } - + public ProvidedExtensions.IOHandler getRenameHandler(final File from, final String newName) { final File to = new File(from.getParentFile(), newName); IOHandler retValue = null; @@ -88,11 +88,11 @@ if (iListener instanceof ProvidedExtensions) { ProvidedExtensions.IOHandler delgate = ((ProvidedExtensions)iListener).getRenameHandler(from, newName); retValue = delgate != null ? new DelegatingIOHandler(delgate) : null; - } + } } return retValue; } - + public ProvidedExtensions.IOHandler getMoveHandler(final File from, final File to) { IOHandler retValue = null; for (Iterator it = annotationProviders.iterator(); it.hasNext() && retValue == null;) { @@ -100,12 +100,12 @@ InterceptionListener iListener = (provider != null) ? provider.getInterceptionListener() : null; if (iListener instanceof ProvidedExtensions) { ProvidedExtensions.IOHandler delgate = ((ProvidedExtensions)iListener).getMoveHandler(from, to); - retValue = delgate != null ? new DelegatingIOHandler(delgate) : null; + retValue = delgate != null ? new DelegatingIOHandler(delgate) : null; } } return retValue; } - + public void createFailure(final FileObject parent, final String name, final boolean isFolder) { for (Iterator it = annotationProviders.iterator(); it.hasNext();) { AnnotationProvider provider = (AnnotationProvider) it.next(); @@ -115,11 +115,11 @@ public void run() { iListener.createFailure(parent, name, isFolder); } - }); + }); } } } - + public void beforeCreate(final FileObject parent, final String name, final boolean isFolder) { for (Iterator it = annotationProviders.iterator(); it.hasNext();) { AnnotationProvider provider = (AnnotationProvider) it.next(); @@ -129,11 +129,11 @@ public void run() { iListener.beforeCreate(parent, name, isFolder); } - }); + }); } } } - + public void deleteSuccess(final FileObject fo) { for (Iterator it = annotationProviders.iterator(); it.hasNext();) { AnnotationProvider provider = (AnnotationProvider) it.next(); @@ -143,11 +143,11 @@ public void run() { iListener.deleteSuccess(fo); } - }); + }); } } } - + public void deleteFailure(final FileObject fo) { for (Iterator it = annotationProviders.iterator(); it.hasNext();) { AnnotationProvider provider = (AnnotationProvider) it.next(); @@ -157,11 +157,11 @@ public void run() { iListener.deleteFailure(fo); } - }); + }); } } } - + public void createSuccess(final FileObject fo) { for (Iterator it = annotationProviders.iterator(); it.hasNext();) { AnnotationProvider provider = (AnnotationProvider) it.next(); @@ -171,11 +171,11 @@ public void run() { iListener.createSuccess(fo); } - }); + }); } } } - + public void beforeDelete(final FileObject fo) { for (Iterator it = annotationProviders.iterator(); it.hasNext();) { AnnotationProvider provider = (AnnotationProvider) it.next(); @@ -185,10 +185,10 @@ public void run() { iListener.beforeDelete(fo); } - }); + }); } } - } + } public boolean canWrite(final File f) { final Boolean ret[] = new Boolean [] { null }; @@ -200,14 +200,14 @@ public void run() { ret[0] = ((ProvidedExtensions)iListener).canWrite(f); } - }); + }); } } return ret[0] != null ? ret[0] : super.canWrite(f); } - - - public void beforeChange(final FileObject f) { + + + public void beforeChange(final FileObject f) { for (Iterator it = annotationProviders.iterator(); it.hasNext();) { AnnotationProvider provider = (AnnotationProvider) it.next(); final InterceptionListener iListener = (provider != null) ? provider.getInterceptionListener() : null; @@ -216,7 +216,7 @@ public void run() { ((ProvidedExtensions)iListener).beforeChange(f); } - }); + }); } } } @@ -230,7 +230,7 @@ public void run() { ((ProvidedExtensions)iListener).fileLocked(fo); } - }); + }); } } } @@ -244,18 +244,48 @@ public void run() { ((ProvidedExtensions)iListener).fileUnlocked(fo); } - }); + }); } } - } - - public static void checkReentrancy() { - if (reentrantCheck.get() != null) { - Logger.getLogger("org.netbeans.modules.masterfs.ProvidedExtensionsProxy").log(Level.INFO,"Unexpected reentrant call", new Throwable());//NOI18N - + } + + @Override + public void createdExternally(final FileObject fo) { + for (Iterator it = annotationProviders.iterator(); it.hasNext();) { + AnnotationProvider provider = (AnnotationProvider) it.next(); + final InterceptionListener iListener = (provider != null) ? provider.getInterceptionListener() : null; + if (iListener instanceof ProvidedExtensions) { + runCheckCode(new Runnable() { + public void run() { + ((ProvidedExtensions)iListener).createdExternally(fo); + } + }); + } } } - + + @Override + public void deletedExternally(final FileObject fo) { + for (Iterator it = annotationProviders.iterator(); it.hasNext();) { + AnnotationProvider provider = (AnnotationProvider) it.next(); + final InterceptionListener iListener = (provider != null) ? provider.getInterceptionListener() : null; + if (iListener instanceof ProvidedExtensions) { + runCheckCode(new Runnable() { + public void run() { + ((ProvidedExtensions)iListener).deletedExternally(fo); + } + }); + } + } + } + + public static void checkReentrancy() { + if (reentrantCheck.get() != null) { + Logger.getLogger("org.netbeans.modules.masterfs.ProvidedExtensionsProxy").log(Level.INFO,"Unexpected reentrant call", new Throwable());//NOI18N + + } + } + private static void runCheckCode(Runnable code) { try { reentrantCheck.set(Boolean.TRUE); @@ -264,7 +294,7 @@ reentrantCheck.set(null); } } - + private class DelegatingDeleteHandler implements ProvidedExtensions.DeleteHandler { private ProvidedExtensions.DeleteHandler delegate; private DelegatingDeleteHandler(final ProvidedExtensions.DeleteHandler delegate) { @@ -274,18 +304,18 @@ final boolean[] retval = new boolean[1]; runCheckCode(new Runnable() { public void run() { - retval[0] = delegate.delete(file); + retval[0] = delegate.delete(file); } }); return retval[0]; - } + } } - + private class DelegatingIOHandler implements ProvidedExtensions.IOHandler { private ProvidedExtensions.IOHandler delegate; private DelegatingIOHandler(final ProvidedExtensions.IOHandler delegate) { this.delegate = delegate; - } + } public void handle() throws IOException { final IOException[] retval = new IOException[1]; runCheckCode(new Runnable() { @@ -301,5 +331,5 @@ throw retval[0]; } } - } + } } diff -r 49bddf05fdce masterfs/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/BaseFileObj.java --- a/masterfs/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/BaseFileObj.java Mon Jun 23 15:28:25 2008 -0700 +++ b/masterfs/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/BaseFileObj.java Tue Jun 24 14:22:39 2008 +0200 @@ -80,7 +80,6 @@ private static final String PATH_SEPARATOR = File.separator;//NOI18N private static final char EXT_SEP = '.';//NOI18N private FileChangeListener versioningWeakListener; - private final FileChangeListener versioningListener = new FileChangeListenerForVersioning(); //static fields static final long serialVersionUID = -1244650210876356809L; @@ -101,9 +100,6 @@ protected BaseFileObj(final File file, final FileNaming name) { this.fileName = name; - versioningWeakListener = (FileChangeListener) WeakListeners.create(FileChangeListener.class, FileChangeListener.class, versioningListener, this); - addFileChangeListener(versioningWeakListener); - } @Override @@ -579,6 +575,7 @@ getProvidedExtensions().deleteFailure(BaseFileObj.this); throw iex; } + getProvidedExtensions().deleteSuccess(BaseFileObj.this); return true; } }; @@ -666,6 +663,7 @@ } setValid(false); if (fire) { + getProvidedExtensions().deletedExternally(this); fireFileDeletedEvent(expected); } } @@ -820,32 +818,6 @@ FolderObj getExistingParent() { return getExistingParentFor(getFileName().getFile(), getFactory()); } - - private final class FileChangeListenerForVersioning extends FileChangeAdapter { - @Override - public void fileDataCreated(FileEvent fe) { - if (fe.getFile() == BaseFileObj.this) { - getProvidedExtensions().createSuccess(fe.getFile()); - } - } - - /** - * Implements FileChangeListener.fileFolderCreated(FileEvent fe) - */ - @Override - public void fileFolderCreated(FileEvent fe) { - if (fe.getFile() == BaseFileObj.this) { - getProvidedExtensions().createSuccess(fe.getFile()); - } - } - - @Override - public void fileDeleted(FileEvent fe) { - if (fe.getFile() == BaseFileObj.this) { - getProvidedExtensions().deleteSuccess(fe.getFile()); - } - } - } private static class FileEventImpl extends FileEvent implements Enumeration { private FileEventImpl next; diff -r 49bddf05fdce masterfs/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/FolderObj.java --- a/masterfs/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/FolderObj.java Mon Jun 23 15:28:25 2008 -0700 +++ b/masterfs/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/FolderObj.java Tue Jun 24 14:22:39 2008 +0200 @@ -62,6 +62,7 @@ import org.netbeans.modules.masterfs.filebasedfs.naming.NamingFactory; import org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager; import org.netbeans.modules.masterfs.providers.ProvidedExtensions; +import org.openide.filesystems.FileUtil; /** * @author rm111737 @@ -192,6 +193,7 @@ extensions.createFailure(this, folder2Create.getName(), true); FSException.io("EXC_CannotCreateFolder", folder2Create.getName(), getPath());// NOI18N } + extensions.createSuccess(FileUtil.toFileObject(folder2Create)); LogRecord r = new LogRecord(Level.FINEST, "FolderCreated: "+ folder2Create.getAbsolutePath()); r.setParameters(new Object[] {folder2Create}); Logger.getLogger("org.netbeans.modules.masterfs.filebasedfs.fileobjects.FolderObj").log(r); @@ -276,7 +278,8 @@ } else if (!file2Create.createNewFile()) { extensions.createFailure(this, file2Create.getName(), false); FSException.io("EXC_CannotCreateData", file2Create.getName(), getPath());// NOI18N - } + } + extensions.createSuccess(FileUtil.toFileObject(file2Create)); LogRecord r = new LogRecord(Level.FINEST, "DataCreated: "+ file2Create.getAbsolutePath()); r.setParameters(new Object[] {file2Create}); Logger.getLogger("org.netbeans.modules.masterfs.filebasedfs.fileobjects.FolderObj").log(r); @@ -355,10 +358,12 @@ if (newChild.isFolder()) { if (fire) { + getProvidedExtensions().createdExternally(newChild); newChild.fireFileFolderCreatedEvent(expected); } } else { if (fire) { + getProvidedExtensions().createdExternally(newChild); newChild.fireFileDataCreatedEvent(expected); } } diff -r 49bddf05fdce masterfs/src/org/netbeans/modules/masterfs/providers/ProvidedExtensions.java --- a/masterfs/src/org/netbeans/modules/masterfs/providers/ProvidedExtensions.java Mon Jun 23 15:28:25 2008 -0700 +++ b/masterfs/src/org/netbeans/modules/masterfs/providers/ProvidedExtensions.java Tue Jun 24 14:22:39 2008 +0200 @@ -175,5 +175,11 @@ * @param fo file which FileLock was released * @since 1.11 */ - public void fileUnlocked(FileObject fo) {} + public void fileUnlocked(FileObject fo) {} + + + public void createdExternally(FileObject fo) {} + + public void deletedExternally(FileObject fo) {} + }