diff -r cdd693dc844c masterfs/apichanges.xml --- a/masterfs/apichanges.xml Thu Mar 13 10:31:56 2008 +0100 +++ b/masterfs/apichanges.xml Thu Mar 13 17:45:37 2008 +0100 @@ -46,6 +46,22 @@ made subject to such option by the copyr MasterFileSystem API + + + ProvidedExtensions.canWrite was added. + + + + + +

+ ProvidedExtensions.canWrite which is called when + MasterFileSystem queries the FileObject for writability. +

+
+ +
+ Fileobject instances are not issued after external changes diff -r cdd693dc844c masterfs/manifest.mf --- a/masterfs/manifest.mf Thu Mar 13 10:31:56 2008 +0100 +++ b/masterfs/manifest.mf Thu Mar 13 17:45:37 2008 +0100 @@ -1,7 +1,7 @@ Manifest-Version: 1.0 Manifest-Version: 1.0 OpenIDE-Module: org.netbeans.modules.masterfs/2 OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/masterfs/resources/Bundle.properties -OpenIDE-Module-Specification-Version: 1.13 +OpenIDE-Module-Specification-Version: 1.14 AutoUpdate-Show-In-Client: false AutoUpdate-Essential-Module: true diff -r cdd693dc844c masterfs/src/org/netbeans/modules/masterfs/ProvidedExtensionsProxy.java --- a/masterfs/src/org/netbeans/modules/masterfs/ProvidedExtensionsProxy.java Thu Mar 13 10:31:56 2008 +0100 +++ b/masterfs/src/org/netbeans/modules/masterfs/ProvidedExtensionsProxy.java Thu Mar 13 17:45:37 2008 +0100 @@ -190,6 +190,23 @@ public class ProvidedExtensionsProxy ext } } + public boolean canWrite(final File f) { + final Boolean ret[] = new Boolean [] { null }; + 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() { + ret[0] = ((ProvidedExtensions)iListener).canWrite(f); + } + }); + } + } + return ret[0] != null ? ret[0] : super.canWrite(f); + } + + public void beforeChange(final FileObject f) { for (Iterator it = annotationProviders.iterator(); it.hasNext();) { AnnotationProvider provider = (AnnotationProvider) it.next(); diff -r cdd693dc844c masterfs/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/BaseFileObj.java --- a/masterfs/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/BaseFileObj.java Thu Mar 13 10:31:56 2008 +0100 +++ b/masterfs/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/BaseFileObj.java Thu Mar 13 17:45:37 2008 +0100 @@ -140,7 +140,8 @@ public abstract class BaseFileObj extend public boolean canWrite() { final File file = getFileName().getFile(); - return file.canWrite(); + ProvidedExtensions extension = getProvidedExtensions(); + return extension.canWrite(file); } public final boolean isData() { @@ -374,7 +375,8 @@ public abstract class BaseFileObj extend public boolean isReadOnly() { final File f = getFileName().getFile(); - return !f.canWrite() && FileChangedManager.getInstance().exists(f); + ProvidedExtensions extension = getProvidedExtensions(); + return !extension.canWrite(f) && FileChangedManager.getInstance().exists(f); } public final FileObject getParent() { diff -r cdd693dc844c masterfs/src/org/netbeans/modules/masterfs/providers/ProvidedExtensions.java --- a/masterfs/src/org/netbeans/modules/masterfs/providers/ProvidedExtensions.java Thu Mar 13 10:31:56 2008 +0100 +++ b/masterfs/src/org/netbeans/modules/masterfs/providers/ProvidedExtensions.java Thu Mar 13 17:45:37 2008 +0100 @@ -138,6 +138,17 @@ public class ProvidedExtensions implemen public void deleteFailure(FileObject fo) {} public void beforeDelete(FileObject fo) {} + /** + * Called by MasterFileSystem when FileObject is queried for writability with the + * canWrite() method. + * + * @param f a file to query + * @return true if the file can be written to, deleted or moved, false otherwise + * @since 2.14 + */ + public boolean canWrite(File f) { + return f.canWrite(); + } /* * Called by MasterFileSystem when FileObject diff -r cdd693dc844c masterfs/test/unit/src/org/netbeans/modules/masterfs/providers/ProvidedExtensionsTest.java --- a/masterfs/test/unit/src/org/netbeans/modules/masterfs/providers/ProvidedExtensionsTest.java Thu Mar 13 10:31:56 2008 +0100 +++ b/masterfs/test/unit/src/org/netbeans/modules/masterfs/providers/ProvidedExtensionsTest.java Thu Mar 13 17:45:37 2008 +0100 @@ -135,6 +135,16 @@ public class ProvidedExtensionsTest exte os.close(); } + } + + public void testImplsCanWrite() throws IOException { + FileObject fo = FileUtil.toFileObject(getWorkDir()); + assertNotNull(fo); + assertNotNull(iListener); + FileObject toChange = fo.createData("cw"); + assertNotNull(toChange); + boolean cw = toChange.canWrite(); + assertEquals(1, iListener.implsCanWriteCalls); } public void testImplsMove() throws IOException { @@ -440,6 +450,7 @@ public class ProvidedExtensionsTest exte private int implsCreateSuccessCalls; private int implsFileLockCalls; private int implsFileUnlockCalls; + private int implsCanWriteCalls; private static boolean implsMoveRetVal = true; private static boolean implsRenameRetVal = true; @@ -455,6 +466,12 @@ public class ProvidedExtensionsTest exte implsBeforeChangeCalls = 0; implsCreateSuccessCalls = 0; implsFileLockCalls = 0; + implsCanWriteCalls = 0; + } + + public boolean canWrite(File f) { + implsCanWriteCalls++; + return super.canWrite(f); } public void fileLocked(FileObject fo) {