@DefaultCommand public void rename( @Option(description = "source", required = true) final Resource<?> source, @Option(description = "target", required = true) final String target, @Option(name = "force", shortName = "f", description = "force operation", flagOnly = true) final boolean force, final PipeOut out) { Resource<?> directory = this.directory; rename(source, directory, target, force, out); }
private void rename(final Resource<?> source, Resource<?> directory, final String target, final boolean force, final PipeOut out) { List<Resource<?>> results = new PathspecParser(resourceFactory, directory, target).resolve(); if (results.size() > 1) { throw new RuntimeException("ambiguous target file name: " + target); } else { Resource<?> targetResource = results.get(0); if (targetResource.exists()) { if (isDirectory(targetResource)) { targetResource = targetResource.getChild(source.getName()); } else if (force && (isFile(targetResource))) { ((FileResource<?>) targetResource).delete(false); } else { throw new RuntimeException("destination file exists: " + targetResource.getFullyQualifiedName()); } } ((FileResource<?>) source).renameTo(targetResource.getFullyQualifiedName()); } }