+ /** Process sources in Eclipse format. */
+ protected void processEclipseSourceJar(Path file, Path targetBase) throws IOException {
+ try {
+ Path targetBundleDir;
+ try (JarInputStream jarIn = new JarInputStream(Files.newInputStream(file), false)) {
+ Manifest manifest = jarIn.getManifest();
+
+ String[] relatedBundle = manifest.getMainAttributes().getValue("Eclipse-SourceBundle").split(";");
+ String version = relatedBundle[1].substring("version=\"".length());
+ version = version.substring(0, version.length() - 1);
+ NameVersion nameVersion = new DefaultNameVersion(relatedBundle[0], version);
+ targetBundleDir = targetBase.resolve(nameVersion.getName() + "." + nameVersion.getBranch());
+
+ Path targetSourceDir = targetBundleDir.resolve("OSGI-OPT/src");
+
+ // TODO make it less dangerous?
+ if (Files.exists(targetSourceDir)) {
+// deleteDirectory(targetSourceDir);
+ } else {
+ Files.createDirectories(targetSourceDir);
+ }
+
+ // copy entries
+ JarEntry entry;
+ entries: while ((entry = jarIn.getNextJarEntry()) != null) {
+ if (entry.isDirectory())
+ continue entries;
+ if (entry.getName().startsWith("META-INF"))// skip META-INF entries
+ continue entries;
+ Path target = targetSourceDir.resolve(entry.getName());
+ Files.createDirectories(target.getParent());
+ Files.copy(jarIn, target);
+ logger.log(Level.TRACE, () -> "Copied source " + target);
+ }
+
+ // copy MANIFEST
+// Path manifestPath = targetBundleDir.resolve("META-INF/MANIFEST.MF");
+// Files.createDirectories(manifestPath.getParent());
+// try (OutputStream out = Files.newOutputStream(manifestPath)) {
+// manifest.write(out);
+// }
+ }
+ } catch (IOException e) {
+ throw new IllegalStateException("Cannot process " + file, e);
+ }
+
+ }
+
+ /*
+ * COMMON PROCESSING
+ */
+ /** Normalise a bundle. */