public static void copy(ModifiableTraversableSource from, ModifiableTraversableSource to) throws IOException { if (!from.exists()) { throw new IOException("Cannot find source file/folder"); } if (from.isCollection()) { to.makeCollection(); Collection contents; try { contents = from.getChildren(); } catch (SourceException se) { throw new RuntimeException("Unable to list contents for collection " + from); } for (Iterator iter = contents.iterator(); iter.hasNext(); ) { ModifiableTraversableSource src = (ModifiableTraversableSource) iter.next(); SourceUtil.copy(src, resolve(to.getURI() + "/" + src.getName())); } } else { to = (ModifiableTraversableSource) resolve(to.getURI()); InputStream in = null; OutputStream out = null; try { in = from.getInputStream(); out = to.getOutputStream(); copy(in, out); } finally { if (out != null) out.close(); if (in != null) in.close(); } } }
public void testDeleteDir() throws Exception { String text = "Wow, a lot of data going there"; ModifiableTraversableSource source = (ModifiableTraversableSource) resolver.resolveURI("jcr://and/again/a/deep/node"); assertFalse(source.exists()); write(source, text); // Lookup 'a' node source = (ModifiableTraversableSource) resolver.resolveURI("jcr://and/again/a/"); assertTrue(source.isCollection()); source.delete(); assertFalse(source.exists()); // Double check with a fresh source source = (ModifiableTraversableSource) resolver.resolveURI("jcr://and/again/a/"); assertFalse(source.exists()); // Check on children source = (ModifiableTraversableSource) resolver.resolveURI("jcr://and/again/a/deep/node"); assertFalse(source.exists()); }
public static boolean remove(ModifiableTraversableSource resource) { boolean success = true; if (resource.isCollection()) { Collection contents; try { contents = resource.getChildren(); } catch (SourceException se) { throw new RuntimeException("Unable to list contents for collection " + resource); } for (Iterator iter = contents.iterator(); iter.hasNext(); ) { ModifiableTraversableSource element = (ModifiableTraversableSource) iter.next(); success = remove(element); } } try { resource.delete(); return success; } catch (SourceException e) { return false; } }