imario 2004/06/03 10:13:24 Modified: vfs/src/java/org/apache/commons/vfs/provider AbstractFileObject.java vfs/src/java/org/apache/commons/vfs FileObject.java Added: vfs/src/test/org/apache/commons/vfs/test ProviderDeleteTests.java Log: additional informations on delete:
delete() returns true if a delete operation happens delete(FileSelector) returns the number of deleted files + Testcase Revision Changes Path 1.45 +24 -9 jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractFileObject.java Index: AbstractFileObject.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractFileObject.java,v retrieving revision 1.44 retrieving revision 1.45 diff -u -r1.44 -r1.45 --- AbstractFileObject.java 23 May 2004 18:34:33 -0000 1.44 +++ AbstractFileObject.java 3 Jun 2004 17:13:24 -0000 1.45 @@ -590,8 +590,10 @@ /** * Deletes this file, once all its children have been deleted + * + * @return true if this file has been deleted */ - private void deleteSelf() throws FileSystemException + private boolean deleteSelf() throws FileSystemException { if (!isWriteable()) { @@ -601,7 +603,7 @@ if (type == FileType.IMAGINARY) { // File does not exist - return; + return false; } try @@ -620,28 +622,36 @@ { throw new FileSystemException("vfs.provider/delete.error", new Object[]{name}, exc); } + + return true; } /** * Deletes this file. * + * @return true if this object has been deleted * @todo This will not fail if this is a non-empty folder. */ - public void delete() throws FileSystemException + public boolean delete() throws FileSystemException { - delete(Selectors.SELECT_SELF); + return delete(Selectors.SELECT_SELF) > 0; } /** * Deletes this file, and all children. + * + * @return the number of deleted files */ - public void delete(final FileSelector selector) throws FileSystemException + public int delete(final FileSelector selector) throws FileSystemException { attach(); + + int nuofDeleted = 0; + if (type == FileType.IMAGINARY) { // File does not exist - return; + return nuofDeleted; } // Locate all the files to delete @@ -658,14 +668,19 @@ // If the file is a folder, make sure all its children have been deleted if (file.type == FileType.FOLDER && file.getChildren().length != 0) { - // TODO - fail?? - // Skip + // Skip - as the selector forced us not to delete all files continue; } // Delete the file - file.deleteSelf(); + boolean deleted = file.deleteSelf(); + if (deleted) + { + nuofDeleted++; + } } + + return nuofDeleted; } /** 1.26 +7 -5 jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/FileObject.java Index: FileObject.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/FileObject.java,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- FileObject.java 10 May 2004 20:09:45 -0000 1.25 +++ FileObject.java 3 Jun 2004 17:13:24 -0000 1.26 @@ -189,14 +189,15 @@ FileObject[] findFiles(FileSelector selector) throws FileSystemException; /** - * Deletes this file. Does nothing if this file does not exist. Does - * not delete any descendents of this file, use [EMAIL PROTECTED] #delete(FileSelector)} - * for that. + * Deletes this file. Does nothing if this file does not exist of if it is a + * folder that has children. Does not delete any descendents of this file, + * use [EMAIL PROTECTED] #delete(FileSelector)} for that. * + * @return true if this object has been deleted * @throws FileSystemException If this file is a non-empty folder, or if this file is read-only, * or on error deleteing this file. */ - void delete() throws FileSystemException; + boolean delete() throws FileSystemException; /** * Deletes all descendents of this file that match a selector. Does @@ -206,10 +207,11 @@ * exception, this file will potentially only be partially deleted. * * @param selector The selector to use to select which files to delete. + * @return the number of deleted objects * @throws FileSystemException If this file or one of its descendents is read-only, or on error * deleting this file or one of its descendents. */ - void delete(FileSelector selector) throws FileSystemException; + int delete(FileSelector selector) throws FileSystemException; /** * Creates this folder, if it does not exist. Also creates any ancestor 1.1 jakarta-commons-sandbox/vfs/src/test/org/apache/commons/vfs/test/ProviderDeleteTests.java Index: ProviderDeleteTests.java =================================================================== /* * Copyright 2002, 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.commons.vfs.test; import org.apache.commons.vfs.Capability; import org.apache.commons.vfs.FileObject; import org.apache.commons.vfs.FileSelectInfo; import org.apache.commons.vfs.FileSelector; import org.apache.commons.vfs.FileType; import org.apache.commons.vfs.FileTypeSelector; import org.apache.commons.vfs.Selectors; /** * File system test that do some delete operations. * * @author <a href="mailto:[EMAIL PROTECTED]">Mario Ivankovits</a> */ public class ProviderDeleteTests extends AbstractProviderTestCase { private class FileNameSelector implements FileSelector { final String basename; private FileNameSelector(String basename) { this.basename = basename; } public boolean includeFile(FileSelectInfo fileInfo) throws Exception { return this.basename.equals(fileInfo.getFile().getName().getBaseName()); } public boolean traverseDescendents(FileSelectInfo fileInfo) throws Exception { return true; } } /** * Returns the capabilities required by the tests of this test case. */ protected Capability[] getRequiredCaps() { return new Capability[] { Capability.CREATE, Capability.DELETE, Capability.GET_TYPE, Capability.LIST_CHILDREN, }; } /** * Sets up a scratch folder for the test to use. */ protected FileObject createScratchFolder() throws Exception { FileObject scratchFolder = getWriteFolder(); // Make sure the test folder is empty scratchFolder.delete(Selectors.EXCLUDE_SELF); scratchFolder.createFolder(); final FileObject dir1 = scratchFolder.resolveFile("dir1"); dir1.createFolder(); final FileObject dir1file1 = dir1.resolveFile("a.txt"); dir1file1.createFile(); final FileObject dir2 = scratchFolder.resolveFile("dir2"); dir2.createFolder(); final FileObject dir2file1 = dir2.resolveFile("b.txt"); dir2file1.createFile(); return scratchFolder; } /** * deletes the complete structure */ public void testDeleteFiles() throws Exception { final FileObject scratchFolder = createScratchFolder(); assertEquals(scratchFolder.delete(Selectors.EXCLUDE_SELF), 4); } /** * deletes a single file */ public void testDeleteFile() throws Exception { final FileObject scratchFolder = createScratchFolder(); final FileObject file = scratchFolder.resolveFile("dir1/a.txt"); assertTrue(file.delete()); } /** * Deletes a non existent file */ public void testDeleteNonExistantFile() throws Exception { final FileObject scratchFolder = createScratchFolder(); final FileObject file = scratchFolder.resolveFile("dir1/aa.txt"); assertFalse(file.delete()); } /** * deletes files */ public void testDeleteAllFiles() throws Exception { final FileObject scratchFolder = createScratchFolder(); assertEquals(scratchFolder.delete(new FileTypeSelector(FileType.FILE)), 2); } /** * deletes a.txt */ public void testDeleteOneFiles() throws Exception { final FileObject scratchFolder = createScratchFolder(); assertEquals(scratchFolder.delete(new FileNameSelector("a.txt")), 1); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]