+ /** Install the bundles. */
+ void install(Map<String, List<String>> options) throws IOException {
+ // check arguments
+ List<String> bundles = options.get("--bundles");
+ Objects.requireNonNull(bundles, "--bundles argument must be set");
+ if (bundles.isEmpty())
+ return;
+
+ List<String> categories = options.get("--category");
+ Objects.requireNonNull(categories, "--category argument must be set");
+ if (categories.size() != 1)
+ throw new IllegalArgumentException("One and only one --category must be specified");
+ String category = categories.get(0);
+
+ List<String> targetDirs = options.get("--target");
+ Objects.requireNonNull(targetDirs, "--target argument must be set");
+ if (targetDirs.size() != 1)
+ throw new IllegalArgumentException("One and only one --target must be specified");
+ Path targetA2 = Paths.get(targetDirs.get(0));
+ logger.log(INFO, "Installing to " + targetA2);
+
+ final String branch;
+ Path branchMk = sdkSrcBase.resolve(BRANCH_MK);
+ if (Files.exists(branchMk)) {
+ Map<String, String> branchVariables = readMakefileVariables(branchMk);
+ branch = branchVariables.get(VAR_BRANCH);
+ } else {
+ throw new IllegalArgumentException(VAR_BRANCH + " variable must be set.");
+ }
+
+ Properties properties = new Properties();
+ Path branchBnd = sdkSrcBase.resolve("sdk/branches/" + branch + ".bnd");
+ if (Files.exists(branchBnd))
+ try (InputStream in = Files.newInputStream(branchBnd)) {
+ properties.load(in);
+ }
+ String major = properties.getProperty("major");
+ Objects.requireNonNull(major, "'major' must be set");
+ String minor = properties.getProperty("minor");
+ Objects.requireNonNull(minor, "'minor' must be set");
+
+ for (String bundle : bundles) {
+ Path bundlePath = Paths.get(bundle);
+ Path bundleParent = bundlePath.getParent();
+ Path a2JarDirectory = bundleParent != null ? a2Output.resolve(bundleParent).resolve(category)
+ : a2Output.resolve(category);
+ Path jarP = a2JarDirectory.resolve(bundlePath.getFileName() + "." + major + "." + minor + ".jar");
+
+ Path targetJarP = targetA2.resolve(a2JarDirectory.relativize(jarP));
+ Files.createDirectories(targetJarP.getParent());
+ Files.copy(jarP, targetJarP);
+ }
+ }
+