? a.diff ? a2.diff ? build ? src/.nbintdb Index: src/org/openide/loaders/DataFolder.java =================================================================== RCS file: /cvs/openide/loaders/src/org/openide/loaders/DataFolder.java,v retrieving revision 1.20 diff -u -r1.20 DataFolder.java --- src/org/openide/loaders/DataFolder.java 25 Mar 2004 16:05:03 -0000 1.20 +++ src/org/openide/loaders/DataFolder.java 31 Mar 2004 13:20:50 -0000 @@ -524,7 +524,7 @@ * @return the new object */ protected DataObject handleCopy (DataFolder f) throws IOException { - testNesting(f); + testNesting(this, f); Enumeration en = children (); @@ -550,20 +550,25 @@ return newFolder; } - // test whether the "f" is not parent of "this" -> not allowed - private void testNesting(DataFolder f) throws IOException { - if (f.equals(this)) { + /** + * Ensure that given folder is not parent of targetFolder. Also + * ensure that they are not equal. + */ + static void testNesting(DataFolder folder, DataFolder targetFolder) throws IOException { + if (targetFolder.equals(folder)) { throw (IOException) ErrorManager.getDefault().annotate( new IOException("Error Copying File or Folder"), //NOI18N - ErrorManager.WARNING, null, NbBundle.getMessage(DataFolder.class, "EXC_CannotCopyTheSame", getName()) //NOI18N + ErrorManager.WARNING, null, NbBundle.getMessage(DataFolder.class, "EXC_CannotCopyTheSame", folder.getName()) //NOI18N , null, null); } else { - DataFolder testFolder = f.getFolder(); + DataFolder testFolder = targetFolder.getFolder(); while (testFolder != null) { - if (testFolder.equals(this)) { + if (testFolder.equals(folder)) { throw (IOException) ErrorManager.getDefault().annotate( - new IOException("Error copying file or folder: " + testFolder.getPrimaryFile() + " in " + getPrimaryFile()), //NOI18N - ErrorManager.WARNING, null, NbBundle.getMessage(DataFolder.class, "EXC_CannotCopySubfolder", getName()) //NOI18N + new IOException("Error copying file or folder: " + + folder.getPrimaryFile() + " cannot be copied to its subfolder " + + targetFolder.getPrimaryFile()), //NOI18N + ErrorManager.WARNING, null, NbBundle.getMessage(DataFolder.class, "EXC_CannotCopySubfolder", folder.getName()) //NOI18N , null, null); } testFolder = testFolder.getFolder(); @@ -791,7 +796,7 @@ */ protected DataShadow handleCreateShadow (DataFolder f) throws IOException { // #33871 - prevent creation of recursive folder structure - testNesting(f); + testNesting(this, f); String name; if (getPrimaryFile ().isRoot ()) { Index: src/org/openide/loaders/DataShadow.java =================================================================== RCS file: /cvs/openide/loaders/src/org/openide/loaders/DataShadow.java,v retrieving revision 1.8 diff -u -r1.8 DataShadow.java --- src/org/openide/loaders/DataShadow.java 13 Feb 2004 08:30:05 -0000 1.8 +++ src/org/openide/loaders/DataShadow.java 31 Mar 2004 13:20:51 -0000 @@ -552,6 +552,9 @@ * @return the shadow */ protected DataShadow handleCreateShadow (DataFolder f) throws IOException { + if (getOriginal() instanceof DataFolder) { + DataFolder.testNesting(((DataFolder)getOriginal()), f); + } return original.handleCreateShadow (f); } @@ -655,6 +658,20 @@ }, 100); } + protected DataObject handleCopy (DataFolder f) throws IOException { + if (getOriginal() instanceof DataFolder) { + DataFolder.testNesting(((DataFolder)getOriginal()), f); + } + return super.handleCopy(f); + } + + protected FileObject handleMove (DataFolder f) throws IOException { + if (getOriginal() instanceof DataFolder) { + DataFolder.testNesting(((DataFolder)getOriginal()), f); + } + return super.handleMove(f); + } + private static class OrigL implements PropertyChangeListener { WeakReference shadow = null; public OrigL (DataShadow shadow) {