private boolean matchVersion(String range, Version version, boolean exact) { if (range == null || range.trim().length() == 0) return true; VersionRange vr = new VersionRange(range); boolean result; if (exact) { if (vr.isRange()) result = false; else result = vr.getHigh().equals(version); } else { result = vr.includes(version); } return result; }
/** * Convert to an OSGi filter expression */ public String toFilter(String versionAttribute) { try (Formatter f = new Formatter()) { if (high == Version.HIGHEST) return "(" + versionAttribute + ">=" + low + ")"; if (isRange()) { f.format("(&"); if (includeLow()) f.format("(%s>=%s)", versionAttribute, getLow()); else f.format("(!(%s<=%s))", versionAttribute, getLow()); if (includeHigh()) f.format("(%s<=%s)", versionAttribute, getHigh()); else f.format("(!(%s>=%s))", versionAttribute, getHigh()); f.format(")"); } else { f.format("(%s>=%s)", versionAttribute, getLow()); } return f.toString(); } }
public static VersionRange parseVersionRange(String version) { if (!isVersionRange(version)) return null; return new VersionRange(version); }
ResourceHandle findExactMatch(String identity, String version) throws Exception { VersionRange range = new VersionRange(version); if (range.isRange()) return null; Resource resource = identityMap.getExact(identity, range.getLow()); if (resource == null) return null; return mapResourceToHandle(resource); }
public boolean includes(Version v) { if (!isRange()) { return low.compareTo(v) <= 0; } if (includeLow()) { if (v.compareTo(low) < 0) return false; } else if (v.compareTo(low) <= 0) return false; if (includeHigh()) { if (v.compareTo(high) > 0) return false; } else if (v.compareTo(high) >= 0) return false; return true; }
void doFragment(Domain domain, List< ? super Requirement> reqs) throws Exception { Entry<String,Attrs> fragmentHost = domain.getFragmentHost(); if (fragmentHost != null) { StringBuilder filter = new StringBuilder(); String bsn = fragmentHost.getKey(); filter.append("(&(osgi.wiring.host=").append(bsn).append(")"); String versionStr = fragmentHost.getValue().get(Constants.BUNDLE_VERSION_ATTRIBUTE); VersionRange range = new VersionRange(versionStr); filter.append(range.toFilter()); filter.append(")"); CapReqBuilder builder = new CapReqBuilder(Namespaces.NS_WIRING_HOST).addDirective( Namespaces.DIRECTIVE_FILTER, filter.toString()); reqs.add(builder.buildRequirement()); } }
public Iterable<Version> filter(final Iterable<Version> versions) { List<Version> list = new ArrayList<>(); for (Version v : versions) { if (includes(v)) list.add(v); } return list; }
/** * Convert to an OSGi filter expression */ public String toFilter() { return toFilter("version"); }
public static boolean isOSGiVersionRange(String range) { return Version.isVersion(range) || isVersionRange(range); }
private ResourceHandle getHandle(Object... target) throws Exception { String bsn = (String) target[0]; Version v = (Version) target[1]; VersionRange r = new VersionRange("[" + v.getWithoutQualifier() + "," + v.getWithoutQualifier() + "]"); ResourceHandle[] handles = getHandles(bsn, r.toString()); if (handles == null || handles.length == 0) { return null; } ResourceHandle h = handles[0]; return h; }
public void addFragmentHost(String bsn, Attrs attrs) throws Exception { CapReqBuilder rbb = new CapReqBuilder(resource, HostNamespace.HOST_NAMESPACE); rbb.addDirectives(attrs); StringBuilder filter = new StringBuilder(); filter.append("(") .append(HostNamespace.HOST_NAMESPACE) .append("=") .append(bsn) .append(")"); String v = attrs.get(AbstractWiringNamespace.CAPABILITY_BUNDLE_VERSION_ATTRIBUTE); if (v != null && VersionRange.isOSGiVersionRange(v)) { VersionRange range = VersionRange.parseOSGiVersionRange(v); filter.insert(0, "(&"); filter.append(range.toFilter(AbstractWiringNamespace.CAPABILITY_BUNDLE_VERSION_ATTRIBUTE)); filter.append(")"); } rbb.addDirective(Namespace.REQUIREMENT_FILTER_DIRECTIVE, filter.toString()); addRequirement(rbb.buildRequirement()); }
private DownloadBlocker findMatchingVersion(RepositoryPlugin dest, String bsn, Version version) throws Exception { Version floor = version.getWithoutQualifier(); Version ceiling = new Version(floor.getMajor()+1, 0,0); VersionRange range = new VersionRange(true,floor, ceiling, false); SortedSet<Version> versions = dest.versions(bsn); if ( versions == null || versions.isEmpty()) return null; for ( Version v : range.filter(versions)) { // First one is highest // TODO Diff } return null; }
public VersionRange(boolean b, Version lower, Version upper, boolean c) { start = b ? '[' : '('; end = c ? ']' : ')'; low = lower; high = unique(upper); }
private static String filter(String ns, String primary, Map<String, String> value) { try (Formatter f = new Formatter()) { f.format("(&(%s=%s)", ns, primary); for (String key : value.keySet()) { if (key.equals("version") || key.equals("bundle-version")) { VersionRange vr = new VersionRange(value.get(key)); } else { f.format("(%s=%s)", key, value.get(key)); } } f.format(")"); } return null; }
public boolean includes(Version v) { if (!isRange()) { return low.compareTo(v) <= 0; } if (includeLow()) { if (v.compareTo(low) < 0) return false; } else if (v.compareTo(low) <= 0) return false; if (includeHigh()) { if (v.compareTo(high) > 0) return false; } else if (v.compareTo(high) >= 0) return false; return true; }
void doFragment(Domain domain, List< ? super Requirement> reqs) throws Exception { Entry<String,Attrs> fragmentHost = domain.getFragmentHost(); if (fragmentHost != null) { StringBuilder filter = new StringBuilder(); String bsn = fragmentHost.getKey(); filter.append("(&(osgi.wiring.host=").append(bsn).append(")"); String versionStr = fragmentHost.getValue().get(Constants.BUNDLE_VERSION_ATTRIBUTE); VersionRange range = new VersionRange(versionStr); filter.append(range.toFilter()); filter.append(")"); CapReqBuilder builder = new CapReqBuilder(Namespaces.NS_WIRING_HOST).addDirective( Namespaces.DIRECTIVE_FILTER, filter.toString()); reqs.add(builder.buildRequirement()); } }
ResourceHandle findExactMatch(String identity, String version) throws Exception { VersionRange range = new VersionRange(version); if (range.isRange()) return null; Resource resource = identityMap.getExact(identity, range.getLow()); if (resource == null) return null; return mapResourceToHandle(resource); }
public Iterable<Version> filter(final Iterable<Version> versions) { List<Version> list = new ArrayList<>(); for (Version v : versions) { if (includes(v)) list.add(v); } return list; }
/** * Convert to an OSGi filter expression */ public String toFilter() { return toFilter("version"); }
public static boolean isOSGiVersionRange(String range) { return Version.isVersion(range) || isVersionRange(range); }