X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.init%2Fsrc%2Forg%2Fargeo%2Finit%2Fa2%2FAbstractProvisioningSource.java;h=800635c9e93748214b95c9b286bce88b6be41352;hb=88fd398d2939ab9030274ff822db8a46b32d6a96;hp=7df851b2452c0d788c5618a9372238459d712021;hpb=c66685995c1bf2c59bdf6d68753470c85828310a;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.init/src/org/argeo/init/a2/AbstractProvisioningSource.java b/org.argeo.init/src/org/argeo/init/a2/AbstractProvisioningSource.java index 7df851b24..800635c9e 100644 --- a/org.argeo.init/src/org/argeo/init/a2/AbstractProvisioningSource.java +++ b/org.argeo.init/src/org/argeo/init/a2/AbstractProvisioningSource.java @@ -28,10 +28,10 @@ import org.osgi.framework.Version; public abstract class AbstractProvisioningSource implements ProvisioningSource { protected final Map contributions = Collections.synchronizedSortedMap(new TreeMap<>()); - private final boolean useReference; + private final boolean usingReference; - public AbstractProvisioningSource(boolean useReference) { - this.useReference = useReference; + public AbstractProvisioningSource(boolean usingReference) { + this.usingReference = usingReference; } public Iterable listContributions(Object filter) { @@ -42,22 +42,24 @@ public abstract class AbstractProvisioningSource implements ProvisioningSource { public Bundle install(BundleContext bc, A2Module module) { try { Object locator = module.getLocator(); - if (useReference && locator instanceof Path locatorPath) { + if (usingReference && locator instanceof Path locatorPath) { String referenceUrl = "reference:file:" + locatorPath.toString(); Bundle bundle = bc.installBundle(referenceUrl); return bundle; } else { - - Path tempJar = null; - if (locator instanceof Path && Files.isDirectory((Path) locator)) - tempJar = toTempJar((Path) locator); + Path locatorPath = (Path) locator; + Path pathToUse; + if (locator instanceof Path && Files.isDirectory(locatorPath)) + pathToUse = toTempJar(locatorPath); + else + pathToUse = locatorPath; Bundle bundle; - try (InputStream in = newInputStream(tempJar != null ? tempJar : locator)) { - bundle = bc.installBundle(module.getBranch().getCoordinates(), in); + try (InputStream in = newInputStream(pathToUse)) { + bundle = bc.installBundle(locatorPath.toAbsolutePath().toString(), in); } - if (tempJar != null) - Files.deleteIfExists(tempJar); + if (pathToUse != null) + Files.deleteIfExists(pathToUse); return bundle; } } catch (BundleException | IOException e) { @@ -69,7 +71,7 @@ public abstract class AbstractProvisioningSource implements ProvisioningSource { public void update(Bundle bundle, A2Module module) { try { Object locator = module.getLocator(); - if (useReference && locator instanceof Path) { + if (usingReference && locator instanceof Path) { try (InputStream in = newInputStream(locator)) { bundle.update(in); } @@ -196,6 +198,20 @@ public abstract class AbstractProvisioningSource implements ProvisioningSource { return symbolicName; } + protected boolean isUsingReference() { + return usingReference; + } + + private InputStream newInputStream(Object locator) throws IOException { + if (locator instanceof Path) { + return Files.newInputStream((Path) locator); + } else if (locator instanceof URL) { + return ((URL) locator).openStream(); + } else { + throw new IllegalArgumentException("Unsupported module locator type " + locator.getClass()); + } + } + private static Manifest findManifest(Path currentPath) { Path metaInfPath = currentPath.resolve("META-INF"); if (Files.exists(metaInfPath) && Files.isDirectory(metaInfPath)) { @@ -241,13 +257,4 @@ public abstract class AbstractProvisioningSource implements ProvisioningSource { } - private InputStream newInputStream(Object locator) throws IOException { - if (locator instanceof Path) { - return Files.newInputStream((Path) locator); - } else if (locator instanceof URL) { - return ((URL) locator).openStream(); - } else { - throw new IllegalArgumentException("Unsupported module locator type " + locator.getClass()); - } - } }