- Path targetJarP = targetA2.resolve(a2JarDirectory.relativize(jarP));
- Files.createDirectories(targetJarP.getParent());
- Files.copy(jarP, targetJarP);
+ Path targetJarP = targetA2.resolve(a2Output.relativize(jarP));
+ if (uninstall) { // uninstall
+ if (Files.exists(targetJarP)) {
+ Files.delete(targetJarP);
+ logger.log(DEBUG, "Removed " + targetJarP);
+ count++;
+ }
+ Path targetParent = targetJarP.getParent();
+ deleteEmptyParents(targetA2, targetParent);
+ } else { // install
+ Files.createDirectories(targetJarP.getParent());
+ boolean update = Files.exists(targetJarP);
+ Files.copy(jarP, targetJarP, StandardCopyOption.REPLACE_EXISTING);
+ logger.log(DEBUG, (update ? "Updated " : "Installed ") + targetJarP);
+ count++;
+ }
+ }
+ logger.log(INFO, uninstall ? count + " bundles removed" : count + " bundles installed or updated");
+ }
+
+ /** Delete empty parent directory up to the A2 target (included). */
+ void deleteEmptyParents(Path targetA2, Path targetParent) throws IOException {
+ if (!Files.isDirectory(targetParent))
+ throw new IllegalArgumentException(targetParent + " must be a directory");
+ boolean isA2target = Files.isSameFile(targetA2, targetParent);
+ if (!Files.list(targetParent).iterator().hasNext()) {
+ Files.delete(targetParent);
+ if (isA2target)
+ return;// stop after deleting A2 base
+ deleteEmptyParents(targetA2, targetParent.getParent());