X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.osgi.boot%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fboot%2FDistributionBundle.java;h=a336b6446c920f656f2457fbbcd3fe3bd0d86221;hb=25a31ea46e5de6ce0de366fdb999588c6788c540;hp=f481473a2d46e47b83be5e1230bd94a9589c83bf;hpb=366986c3687b920a4b68eb0a0fadf3bc19dbb1bd;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.osgi.boot/src/org/argeo/osgi/boot/DistributionBundle.java b/org.argeo.osgi.boot/src/org/argeo/osgi/boot/DistributionBundle.java index f481473a2..a336b6446 100644 --- a/org.argeo.osgi.boot/src/org/argeo/osgi/boot/DistributionBundle.java +++ b/org.argeo.osgi.boot/src/org/argeo/osgi/boot/DistributionBundle.java @@ -1,18 +1,3 @@ -/* - * Copyright (C) 2007-2012 Argeo GmbH - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ package org.argeo.osgi.boot; import java.io.BufferedReader; @@ -20,6 +5,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.nio.file.DirectoryStream; import java.nio.file.Files; @@ -58,6 +44,7 @@ public class DistributionBundle { private String baseUrl; /** can be null */ private String relativeUrl; + private String localCache; private List artifacts; @@ -67,7 +54,7 @@ public class DistributionBundle { this.url = url; } - public DistributionBundle(String baseUrl, String relativeUrl) { + public DistributionBundle(String baseUrl, String relativeUrl, String localCache) { if (baseUrl == null || !baseUrl.endsWith("/")) throw new OsgiBootException("Base url " + baseUrl + " badly formatted"); if (relativeUrl.startsWith("http") || relativeUrl.startsWith("file:")) @@ -75,6 +62,7 @@ public class DistributionBundle { this.url = constructUrl(baseUrl, relativeUrl); this.baseUrl = baseUrl; this.relativeUrl = relativeUrl; + this.localCache = localCache; } protected String constructUrl(String baseUrl, String relativeUrl) { @@ -96,34 +84,6 @@ public class DistributionBundle { if (res.size() == 0) throw new OsgiBootException("No file matching " + relativeUrl + " found in " + baseUrl); return res.get(res.firstKey()).toUri().toString(); - // try (DirectoryStream ds = - // Files.newDirectoryStream(basePath)) { - // Path res = null; - // for (Path path : ds) { - // if (pm.matches(path)) { - // if (res == null) - // res = path; - // else - // throw new OsgiBootException( - // "More than one file matching " + relativeUrl + " found in " + - // baseUrl); - // } - // } - // if (res == null) - // throw new OsgiBootException("No file matching " + relativeUrl - // + " found in " + baseUrl); - // return res.toUri().toURL().toString(); - // // Iterator it = ds.iterator(); - // // if (!it.hasNext()) - // // throw new OsgiBootException("No file matching " + - // // relativeUrl + " found in " + baseUrl); - // // Path distributionBundlePath = it.next(); - // // if (it.hasNext())// TODO implement version ordered - // // throw new OsgiBootException( - // // "More than one file matching " + relativeUrl + " found in - // // " + baseUrl); - // // return distributionBundlePath.toUri().toURL().toString(); - // } } else { return baseUrl + relativeUrl; } @@ -150,30 +110,16 @@ public class DistributionBundle { } } - // public static void main(String[] args) { - // try { - // String baseUrl = "file:///home/mbaudier/.m2/repository/"; - // String relativeUrl = - // "org/argeo/commons/org.argeo.dep.cms.node/2.1.*-SNAPSHOT/org.argeo.dep.cms.node-2.1.*-SNAPSHOT.jar"; - // Path basePath = Paths.get(new URI(baseUrl)); - // PathMatcher pm = basePath.getFileSystem().getPathMatcher("glob:" + - // relativeUrl); - // - // try (DirectoryStream ds = Files.newDirectoryStream(basePath, "**")) - // { - // for (Path path : ds) { - // System.out.println(path); - // } - // } - // } catch (Exception e) { - // e.printStackTrace(); - // } - // } - public void processUrl() { JarInputStream jarIn = null; try { URL u = new URL(url); + + // local cache + URI localUri = new URI(localCache + relativeUrl); + Path localPath = Paths.get(localUri); + if (Files.exists(localPath)) + u = localUri.toURL(); jarIn = new JarInputStream(u.openStream()); // meta data @@ -226,11 +172,13 @@ public class DistributionBundle { try { reader = new BufferedReader(new InputStreamReader(in)); String line = null; - while ((line = reader.readLine()) != null) { + lines: while ((line = reader.readLine()) != null) { StringTokenizer st = new StringTokenizer(line, separator); String moduleName = st.nextToken(); String moduleVersion = st.nextToken(); String relativeUrl = st.nextToken(); + if (relativeUrl.endsWith(".pom")) + continue lines; osgiArtifacts.add(new OsgiArtifact(moduleName, moduleVersion, relativeUrl)); } } catch (Exception e) { @@ -240,8 +188,8 @@ public class DistributionBundle { } /** Convenience method */ - public static DistributionBundle processUrl(String baseUrl, String realtiveUrl) { - DistributionBundle distributionBundle = new DistributionBundle(baseUrl, realtiveUrl); + public static DistributionBundle processUrl(String baseUrl, String relativeUrl, String localCache) { + DistributionBundle distributionBundle = new DistributionBundle(baseUrl, relativeUrl, localCache); distributionBundle.processUrl(); return distributionBundle; } @@ -260,7 +208,21 @@ public class DistributionBundle { List urls = new ArrayList(); for (int i = 0; i < artifacts.size(); i++) { OsgiArtifact osgiArtifact = (OsgiArtifact) artifacts.get(i); - urls.add(baseUrl + osgiArtifact.getRelativeUrl()); + // local cache + URI localUri; + try { + localUri = new URI(localCache + relativeUrl); + } catch (URISyntaxException e) { + OsgiBootUtils.warn(e.getMessage()); + localUri = null; + } + Version version = new Version(osgiArtifact.getVersion()); + if (localUri != null && Files.exists(Paths.get(localUri)) && version.getQualifier() != null + && version.getQualifier().startsWith("SNAPSHOT")) { + urls.add(localCache + osgiArtifact.getRelativeUrl()); + } else { + urls.add(baseUrl + osgiArtifact.getRelativeUrl()); + } } return urls; }