private static VersionRange exactVersion(String versionRange) { return new VersionRange(versionRange, true, true); }
public static VersionRange parseVersionRange( String val ) throws IllegalArgumentException, NumberFormatException { if ( val == null || val.trim().length() == 0 ) { return ANY_VERSION; } return new VersionRange( val ); }
public static VersionRange parseVersionRange( String val ) throws IllegalArgumentException, NumberFormatException { if ( val == null || val.trim().length() == 0 ) { return ANY_VERSION; } return new VersionRange( val ); }
public static VersionRange parseVersionRange( String val ) throws IllegalArgumentException, NumberFormatException { if ( val == null || val.trim().length() == 0 ) { return ANY_VERSION; } return new VersionRange( val ); }
public static VersionRange parseVersionRange( String val ) throws IllegalArgumentException, NumberFormatException { if ( val == null || val.trim().length() == 0 ) { return ANY_VERSION; } return new VersionRange( val ); }
private static VersionRange getRange(String version, String featureResolutionRange) { VersionRange range; if (version.equals("0.0.0")) { range = VersionRange.ANY_VERSION; } else if (!version.startsWith("[") && !version.startsWith("(")) { range = new VersionRange(Macro.transform(featureResolutionRange, version)); } else { range = new VersionRange(version); } return range; }
public static RequirementImpl addIdentityRequirement(ResourceImpl resource, String name, String type, String range, boolean mandatory) { return addIdentityRequirement(resource, name, type, range != null ? new VersionRange(range) : null, mandatory); }
private static VersionRange range(String versionRange) { if (versionRange == null) { return ANY_VERSION; } versionRange = versionRange.trim(); if ("0.0.0".equals(versionRange)) { return ANY_VERSION; } if (versionRange.contains(",")) { return new VersionRange(versionRange, false, true); } else { return exactVersion(versionRange); } }
protected static void addDependency(FeatureResource resource, Dependency dep, String featureRange, boolean condition) { String name = dep.getName(); String version = dep.getVersion(); if (version.equals("0.0.0")) { version = null; } else if (!version.startsWith("[") && !version.startsWith("(")) { version = Macro.transform(featureRange, version); } addIdentityRequirement(resource, name, TYPE_FEATURE, version != null ? new VersionRange(version) : null, true, condition); }
public static Map<String, Map<VersionRange, Map<String, String>>> getMetadata(Map<String, String> properties, String prefix) { Map<String, Map<VersionRange, Map<String, String>>> result = new HashMap<>(); for (String key : properties.keySet()) { if (key.startsWith(prefix)) { String val = properties.get(key); key = key.substring(prefix.length()); String[] parts = key.split("#"); if (parts.length == 3) { Map<VersionRange, Map<String, String>> ranges = result.computeIfAbsent(parts[0], k -> new HashMap<>()); String version = parts[1]; if (!version.startsWith("[") && !version.startsWith("(")) { Processor processor = new Processor(); processor.setProperty("@", VersionTable.getVersion(version).toString()); Macro macro = new Macro(processor); version = macro.process("${range;[==,=+)}"); } VersionRange range = new VersionRange(version); ranges.computeIfAbsent(range, k -> new HashMap<>()).put(parts[2], val); } } } return result; }
public static Map<String, Map<VersionRange, Map<String, String>>> getMetadata(Map<String, String> properties, String prefix) { Map<String, Map<VersionRange, Map<String, String>>> result = new HashMap<>(); for (String key : properties.keySet()) { if (key.startsWith(prefix)) { String val = properties.get(key); key = key.substring(prefix.length()); String[] parts = key.split("#"); if (parts.length == 3) { Map<VersionRange, Map<String, String>> ranges = result.computeIfAbsent(parts[0], k -> new HashMap<>()); String version = parts[1]; if (!version.startsWith("[") && !version.startsWith("(")) { Processor processor = new Processor(); processor.setProperty("@", VersionTable.getVersion(version).toString()); Macro macro = new Macro(processor); version = macro.process("${range;[==,=+)}"); } VersionRange range = new VersionRange(version); ranges.computeIfAbsent(range, k -> new HashMap<>()).put(parts[2], val); } } } return result; }
protected void addRequirement(String requirement) throws BundleException { for (Requirement req : ResourceBuilder.parseRequirement(this, requirement)) { Object range = req.getAttributes().get(CAPABILITY_VERSION_ATTRIBUTE); if (range instanceof String) { req.getAttributes().put(CAPABILITY_VERSION_ATTRIBUTE, new VersionRange((String) range)); } addRequirement(req); } }
/** * Changes feature identifier (<code>name[/version]</code>) into a requirement specification. * The OSGi manifest header for a feature will be: <code>osgi.identity;osgi.identity=feature-name;type=karaf.feature[;version=feature-version];filter:=filter-from-attrs</code>. * * @param feature The feature name. * @return The feature requirement. */ public static String toFeatureRequirement(String feature) { String[] parts = feature.split("/"); Map<String, Object> attrs = new StringArrayMap<>(parts.length > 1 ? 3 : 2); attrs.put(IDENTITY_NAMESPACE, parts[0]); attrs.put(CAPABILITY_TYPE_ATTRIBUTE, TYPE_FEATURE); if (parts.length > 1) { attrs.put(CAPABILITY_VERSION_ATTRIBUTE, new VersionRange(parts[1])); } Map<String, String> dirs = Collections.singletonMap( Constants.FILTER_DIRECTIVE, SimpleFilter.convert(attrs).toString()); return new RequirementImpl(null, IDENTITY_NAMESPACE, dirs, attrs).toString(); }
public static void addIdentityRequirement(ResourceImpl resource, Resource required, boolean mandatory) { for (Capability cap : required.getCapabilities(null)) { if (cap.getNamespace().equals(IDENTITY_NAMESPACE)) { Map<String, Object> attributes = cap.getAttributes(); Map<String, String> dirs = new StringArrayMap<>(1); dirs.put(REQUIREMENT_RESOLUTION_DIRECTIVE, mandatory ? RESOLUTION_MANDATORY : RESOLUTION_OPTIONAL); Version version = (Version) attributes.get(CAPABILITY_VERSION_ATTRIBUTE); Map<String, Object> attrs = new StringArrayMap<>(version != null ? 3 : 2); attrs.put(IDENTITY_NAMESPACE, attributes.get(IDENTITY_NAMESPACE)); attrs.put(CAPABILITY_TYPE_ATTRIBUTE, attributes.get(CAPABILITY_TYPE_ATTRIBUTE)); if (version != null) { attrs.put(CAPABILITY_VERSION_ATTRIBUTE, new VersionRange(version, true)); } resource.addRequirement(new RequirementImpl(resource, IDENTITY_NAMESPACE, dirs, attrs)); } } }
/** * <p>Returns a {@link VersionRange} that existing bundle has to satisfy in order to be updated to * <code>newVersion</code></p> * <p>If we're upgrading to <code>1.2.3</code>, existing bundle has to be in range * <code>[1.2.0,1.2.3)</code></p> * @param patch * @param url * @param newVersion * @return */ private VersionRange getUpdateableRange(Patch patch, String url, Version newVersion) { VersionRange range = null; if (patch.getPatchData().getVersionRange(url) == null) { // default version range starts with x.y.0 as the lower bound Version lower = new Version(newVersion.getMajor(), newVersion.getMinor(), 0); // We can't really upgrade with versions such as 2.1.0 if (newVersion.compareTo(lower) > 0) { range = new VersionRange(false, lower, newVersion, true); } } else { range = new VersionRange(patch.getPatchData().getVersionRange(url)); } return range; }
public static Feature search(String name, String version, Collection<Repository> repositories) { VersionRange range = new VersionRange(version, false, true); Feature bestFeature = null; Version bestVersion = null; for (Repository repo : repositories) { Feature[] features; try { features = repo.getFeatures(); } catch (Exception e) { // This should not happen as the repository has been loaded already throw new IllegalStateException(e); } for (Feature feature : features) { if (name.equals(feature.getName())) { Version v = new Version(VersionCleaner.clean(feature.getVersion())); if (range.contains(v)) { if (bestVersion == null || bestVersion.compareTo(v) < 0) { bestFeature = feature; bestVersion = v; } } } } } return bestFeature; } }
protected Feature extractFeatureFromDependency(Dependency dependency) throws Exception { Feature[] features = featuresService.listFeatures(); VersionRange range = org.apache.karaf.features.internal.model.Feature.DEFAULT_VERSION.equals(dependency.getVersion()) ? VersionRange.ANY_VERSION : new VersionRange(dependency.getVersion(), true, true); Feature fi = null; for(Feature f: features) { if (f.getName().equals(dependency.getName())) { Version v = VersionTable.getVersion(f.getVersion()); if (range.contains(v) && (fi == null || VersionTable.getVersion(fi.getVersion()).compareTo(v) < 0)) { fi = f; break; } } } return fi; }
feature.getName(), TYPE_FEATURE, new VersionRange(VersionTable.getVersion(feature.getVersion()), true));
/** * Returns the owningFeature if this feature or any of its dependent features contains a bundle matching the prefix location or null if there is no match */ protected Feature featureMatchesBundleLocationPrefix(Iterable<Feature> allFeatures, Feature feature, String prefix, Feature owningFeature, boolean includeDependencies) { for (BundleInfo bi : feature.getBundles()) { if (!bi.isDependency() && bi.getLocation().startsWith(prefix)) { return owningFeature; } } if (includeDependencies) { for (Dependency dependency: feature.getDependencies()) { for (Feature f : allFeatures) { if (f.getName().equals(dependency.getName()) && new VersionRange(dependency.getVersion()).contains(VersionTable.getVersion(f.getVersion()))) { Feature answer = featureMatchesBundleLocationPrefix(allFeatures, f, prefix, owningFeature, true); if (answer != null) { return answer; } } } } } return null; }
/** * @param resource resource to be overriden * @param explicitRange range set on the override clause * @return if the resource should be overriden by the given override */ private static <T extends Resource> boolean shouldOverride(Resource resource, T override, String explicitRange) { if (!getSymbolicName(resource).equals(getSymbolicName(override))) { return false; } VersionRange range; if (explicitRange == null) { // default to micro version compatibility Version v1 = getVersion(resource); Version v2 = new Version(v1.getMajor(), v1.getMinor() + 1, 0); range = new VersionRange(false, v1, v2, true); } else { range = VersionRange.parseVersionRange(explicitRange); } return range.contains(getVersion(override)) && getVersion(resource).compareTo(getVersion(override)) < 0; }