ProvidedExtensions.getDeleteHandler
was added.
+ ProvidedExtensions.getDeleteHandler
was added, which
+ is the way how to impose handlers for
+ deleting into mastersfs implementation
+ which was required by module org.netbeans.modules.subversion.
+
ProvidedExtensions
was added.DeleteHandler
is used by
+ * MasterFileSystem
+ *
+ * @param f file or folder to be deleted
+ * @return instance of {@link ProvidedExtensions.DeleteHandler}
+ * that is responsible for deleting the file or null
+ */
+ public ProvidedExtensions.DeleteHandler getDeleteHandler(File f) {
+ return null;
+ }
public interface IOHandler {
@@ -80,6 +95,19 @@
*/
void handle() throws IOException;
}
+
+ public interface DeleteHandler {
+ /**
+ * Deletes the file or directory denoted by this abstract pathname. If
+ * this pathname denotes a directory, then the directory must be empty in
+ * order to be deleted.
+ *
+ * @return true
if and only if the file or directory is
+ * successfully deleted; false
otherwise
+ */
+ boolean delete(File file);
+ }
+
public void createSuccess(FileObject fo) {}
public void createFailure(FileObject parent, String name, boolean isFolder) {}
Index: test/unit/src/org/netbeans/modules/masterfs/CacheTest.java
===================================================================
RCS file: /cvs/openide/masterfs/test/unit/src/org/netbeans/modules/masterfs/CacheTest.java,v
retrieving revision 1.2.6.2.2.1
retrieving revision 1.2.6.2.2.1.4.1
diff -u -r1.2.6.2.2.1 -r1.2.6.2.2.1.4.1
--- test/unit/src/org/netbeans/modules/masterfs/CacheTest.java 28 Jun 2006 07:20:28 -0000 1.2.6.2.2.1
+++ test/unit/src/org/netbeans/modules/masterfs/CacheTest.java 27 Jul 2006 16:03:54 -0000 1.2.6.2.2.1.4.1
@@ -22,9 +22,8 @@
import java.io.File;
import java.lang.ref.Reference;
import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.List;
import org.netbeans.junit.NbTestCase;
+import org.netbeans.modules.masterfs.providers.ProvidedExtensionsTest;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
@@ -58,7 +57,9 @@
testFo.getFileSystem().findResource(testFo.getPath());
FileObject testFo2 = Cache.getDefault().getValidOrInvalid(((MasterFileObject)testFo).getResource());
- assertFalse(testFo2.isValid());
+ if (!ProvidedExtensionsTest.ProvidedExtensionsImpl.isImplsDeleteRetVal()) {
+ assertFalse(testFo2.isValid());
+ }
assertEquals(testFo, testFo2);
}
Index: test/unit/src/org/netbeans/modules/masterfs/MasterFileObjectTestHid.java
===================================================================
RCS file: /cvs/openide/masterfs/test/unit/src/org/netbeans/modules/masterfs/MasterFileObjectTestHid.java,v
retrieving revision 1.24.6.1.2.2
retrieving revision 1.24.6.1.2.2.2.1
diff -u -r1.24.6.1.2.2 -r1.24.6.1.2.2.2.1
--- test/unit/src/org/netbeans/modules/masterfs/MasterFileObjectTestHid.java 10 Jul 2006 14:18:03 -0000 1.24.6.1.2.2
+++ test/unit/src/org/netbeans/modules/masterfs/MasterFileObjectTestHid.java 21 Jul 2006 14:11:22 -0000 1.24.6.1.2.2.2.1
@@ -36,6 +36,7 @@
import javax.swing.filechooser.FileSystemView;
import org.netbeans.modules.masterfs.filebasedfs.fileobjects.WriteLockUtils;
+import org.netbeans.modules.masterfs.providers.ProvidedExtensionsTest;
public class MasterFileObjectTestHid extends TestBaseHid{
private FileObject root;
@@ -431,8 +432,10 @@
}
});
- assertNotNull(fo.getFileObject("newchild.txt"));
- assertTrue(list.size() == 1);
+ if (!ProvidedExtensionsTest.ProvidedExtensionsImpl.isImplsDeleteRetVal()) {
+ assertNotNull(fo.getFileObject("newchild.txt"));
+ assertTrue(list.size() == 1);
+ }
fo.removeFileChangeListener(fcl);
}
@@ -535,10 +538,12 @@
MountTable mt = MountTable.getDefault();
mt.mount(mountFile.getAbsolutePath(), ifs);
-
- mountDir.delete();
- assertTrue(!mountDir.isValid());
- assertNull(root.getFileObject("testdir/mountdir"));
+
+ if (!ProvidedExtensionsTest.ProvidedExtensionsImpl.isImplsDeleteRetVal()) {
+ mountDir.delete();
+ assertTrue(!mountDir.isValid());
+ assertNull(root.getFileObject("testdir/mountdir"));
+ }
}
public void testDeleteCaptureExteralChanges () throws Exception {
@@ -553,7 +558,9 @@
assertTrue(f.exists());
assertTrue (f.delete());
- assertFalse(fileObject.isValid());
+ if (!ProvidedExtensionsTest.ProvidedExtensionsImpl.isImplsDeleteRetVal()) {
+ assertFalse(fileObject.isValid());
+ }
}
public void testFindResourceCaptureExteralChanges () throws Exception {
Index: test/unit/src/org/netbeans/modules/masterfs/MasterFileSystemTest.java
===================================================================
RCS file: /cvs/openide/masterfs/test/unit/src/org/netbeans/modules/masterfs/MasterFileSystemTest.java,v
retrieving revision 1.7.72.2
retrieving revision 1.7.72.2.4.1
diff -u -r1.7.72.2 -r1.7.72.2.4.1
--- test/unit/src/org/netbeans/modules/masterfs/MasterFileSystemTest.java 28 Jun 2006 07:20:29 -0000 1.7.72.2
+++ test/unit/src/org/netbeans/modules/masterfs/MasterFileSystemTest.java 21 Jul 2006 14:11:22 -0000 1.7.72.2.4.1
@@ -58,7 +58,7 @@
super(test);
ProvidedExtensionsTest.ProvidedExtensionsImpl.setImplsMoveRetVal(false);
ProvidedExtensionsTest.ProvidedExtensionsImpl.setImplsRenameRetVal(false);
-
+ ProvidedExtensionsTest.ProvidedExtensionsImpl.setImplsDeleteRetVal(false);
}
Index: test/unit/src/org/netbeans/modules/masterfs/MasterFileSystemWithExtensionsTest.java
===================================================================
RCS file: /cvs/openide/masterfs/test/unit/src/org/netbeans/modules/masterfs/MasterFileSystemWithExtensionsTest.java,v
retrieving revision 1.2.10.2
retrieving revision 1.2.10.2.4.1
diff -u -r1.2.10.2 -r1.2.10.2.4.1
--- test/unit/src/org/netbeans/modules/masterfs/MasterFileSystemWithExtensionsTest.java 28 Jun 2006 07:20:29 -0000 1.2.10.2
+++ test/unit/src/org/netbeans/modules/masterfs/MasterFileSystemWithExtensionsTest.java 21 Jul 2006 14:11:22 -0000 1.2.10.2.4.1
@@ -31,6 +31,7 @@
super(test);
ProvidedExtensionsTest.ProvidedExtensionsImpl.setImplsMoveRetVal(true);
ProvidedExtensionsTest.ProvidedExtensionsImpl.setImplsRenameRetVal(true);
+ ProvidedExtensionsTest.ProvidedExtensionsImpl.setImplsDeleteRetVal(true);
}
public static Test suite() {
Index: test/unit/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/FolderObjTest.java
===================================================================
RCS file: /cvs/openide/masterfs/test/unit/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/FolderObjTest.java,v
retrieving revision 1.6.18.2.2.1
retrieving revision 1.6.18.2.2.1.4.1
diff -u -r1.6.18.2.2.1 -r1.6.18.2.2.1.4.1
--- test/unit/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/FolderObjTest.java 28 Jun 2006 07:20:30 -0000 1.6.18.2.2.1
+++ test/unit/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/FolderObjTest.java 27 Jul 2006 15:08:09 -0000 1.6.18.2.2.1.4.1
@@ -29,6 +29,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
+import java.util.Iterator;
import java.util.List;
import org.netbeans.junit.NbTestCase;
import org.netbeans.modules.masterfs.filebasedfs.FileBasedFileSystem;
@@ -303,6 +304,45 @@
f = f.getParentFile();
}
+ }
+
+ public void testGetChildrenStackOwerflow() throws Exception {
+ File f = testFile;
+ assertTrue(f.exists());
+ assertTrue(f.isDirectory());
+ FileSystem fs = FileBasedFileSystem.getInstance(f);
+ assertNotNull(fs);
+ final FileObject fo = fs.findResource(f.getAbsolutePath());
+ assertNotNull(f.getAbsolutePath(),fo);
+ assertTrue(fo.isFolder());
+ assertEquals(0,fo.getChildren().length);
+ assertTrue(new File(f,"child1").createNewFile());
+ assertTrue(new File(f,"child2").createNewFile());
+ final File child3 = new File(f,"child3");
+ assertTrue(child3.createNewFile());
+ final List keepThem = new ArrayList();
+ fo.addFileChangeListener(new FileChangeAdapter(){
+ public void fileDeleted(FileEvent fe) {
+ for (Iterator it = keepThem.iterator(); it.hasNext();) {
+ FileObject fodel = (FileObject) it.next();
+ FileObject[] all = fo.getChildren();
+ for (int i = 0; i < all.length; i++) {
+ all[i].refresh();
+ }
+
+ }
+ }
+
+ public void fileDataCreated(FileEvent fe) {
+ FileObject ffoo = fe.getFile();
+ keepThem.add(ffoo);
+ ((BaseFileObj)ffoo).getFileName().getFile().delete();
+ ffoo.refresh();
+ }
+ } );
+
+ fo.refresh();
+ assertEquals(0,fo.getChildren().length);
}
/**
Index: test/unit/src/org/netbeans/modules/masterfs/providers/ProvidedExtensionsTest.java
===================================================================
RCS file: /cvs/openide/masterfs/test/unit/src/org/netbeans/modules/masterfs/providers/ProvidedExtensionsTest.java,v
retrieving revision 1.2.10.2
retrieving revision 1.2.10.2.4.3
diff -u -r1.2.10.2 -r1.2.10.2.4.3
--- test/unit/src/org/netbeans/modules/masterfs/providers/ProvidedExtensionsTest.java 28 Jun 2006 07:20:31 -0000 1.2.10.2
+++ test/unit/src/org/netbeans/modules/masterfs/providers/ProvidedExtensionsTest.java 27 Jul 2006 16:03:54 -0000 1.2.10.2.4.3
@@ -20,6 +20,7 @@
package org.netbeans.modules.masterfs.providers;
import java.io.File;
+import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -27,8 +28,10 @@
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import junit.framework.AssertionFailedError;
import org.netbeans.junit.NbTestCase;
import org.netbeans.modules.masterfs.filebasedfs.FileBasedFileSystem;
@@ -368,6 +371,7 @@
private static boolean implsMoveRetVal = true;
private static boolean implsRenameRetVal = true;
+ private static boolean implsDeleteRetVal = true;
public static FileLock lock;
@@ -377,7 +381,31 @@
implsRenameCalls = 0;
renameImplCalls = 0;
}
-
+
+ public ProvidedExtensions.DeleteHandler getDeleteHandler(File f) {
+ return (!isImplsDeleteRetVal()) ? null : new ProvidedExtensions.DeleteHandler(){
+ final Set s = new HashSet();
+ public boolean delete(File file) {
+ if (file.isDirectory()) {
+ File[] childs = file.listFiles(new FileFilter() {
+ public boolean accept(File pathname) {
+ boolean accepted = pathname.isFile();
+ if (!accepted && pathname.isDirectory()) {
+ accepted = !s.contains(pathname);
+ if (!s.contains(pathname)) {
+ s.add(pathname);
+ }
+ }
+ return accepted;
+ }
+ });
+ return childs.length == 0;
+ }
+ return file.delete();
+ }
+ };
+ }
+
public ProvidedExtensions.IOHandler getRenameHandler(final File from, final String newName) {
implsRenameCalls++;
final File f = new File(from.getParentFile(),newName);
@@ -441,5 +469,13 @@
public static void setImplsRenameRetVal(boolean implsRenameRetVal) {
ProvidedExtensionsImpl.implsRenameRetVal = implsRenameRetVal;
}
+
+ public static boolean isImplsDeleteRetVal() {
+ return implsDeleteRetVal;
+ }
+
+ public static void setImplsDeleteRetVal(boolean implsDeleteRetVal) {
+ ProvidedExtensionsImpl.implsDeleteRetVal = implsDeleteRetVal;
+ }
}
}