public static Version getVersion(String version) { return getVersion( version, true ); }
public static Version getVersion(String version) { return getVersion( version, true ); }
public static Version getVersion(String version) { return getVersion( version, true ); }
public static Version getVersion(String version) { return getVersion( version, true ); }
@Override public int compare(String v1, String v2) { return VersionTable.getVersion(v1).compareTo(VersionTable.getVersion(v2)); } };
public static String transform(String macro, String value) { if (macro.startsWith("${") && macro.endsWith("}")) { String[] args = macro.substring(2, macro.length() - 1).split(";"); switch (args[0]) { case "version": if (args.length != 2) { throw new IllegalArgumentException("Invalid syntax for macro: " + macro); } return version(args[1], VersionTable.getVersion(value)); case "range": if (args.length != 2) { throw new IllegalArgumentException("Invalid syntax for macro: " + macro); } return range(args[1], VersionTable.getVersion(value)); default: throw new IllegalArgumentException("Unknown macro: " + macro); } } return value; }
private static Object parseAttribute(String value, String type) { if ("String".equals(type)) { return value; } else if ("Version".equals(type)) { return VersionTable.getVersion(value); } else if ("Long".equals(type)) { return Long.parseLong(value.trim()); } else if ("Double".equals(type)) { return Double.parseDouble(value.trim()); } else if (type.startsWith("List<") && type.endsWith(">")) { type = type.substring("List<".length(), type.length() - 1); List<Object> list = new ArrayList<>(); for (String s : value.split(",")) { list.add(parseAttribute(s.trim(), type)); } return list; } else { throw new IllegalStateException("Unexpected type: '" + type + "'"); } }
private static Object parseAttribute(String value, String type) { if ("String".equals(type)) { return value; } else if ("Version".equals(type)) { return VersionTable.getVersion(value); } else if ("Long".equals(type)) { return Long.parseLong(value.trim()); } else if ("Double".equals(type)) { return Double.parseDouble(value.trim()); } else if (type.startsWith("List<") && type.endsWith(">")) { type = type.substring("List<".length(), type.length() - 1); List<Object> list = new ArrayList<>(); for (String s : value.split(",")) { list.add(parseAttribute(s.trim(), type)); } return list; } else { throw new IllegalStateException("Unexpected type: '" + type + "'"); } }
public static String toFeatureCapability(String feature) { String[] parts = feature.split("/"); Map<String, String> dirs = Collections.emptyMap(); 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, VersionTable.getVersion(parts[1])); } return new CapabilityImpl(null, IDENTITY_NAMESPACE, dirs, attrs).toString(); } }
private static ParsedHeaderClause parseBundleSymbolicName(Map<String, String> headerMap) throws BundleException { List<ParsedHeaderClause> clauses = parseStandardHeader(headerMap.get(Constants.BUNDLE_SYMBOLICNAME)); if (clauses.size() > 0) { if (clauses.size() > 1 || clauses.get(0).paths.size() > 1) { throw new BundleException("Cannot have multiple symbolic names: " + headerMap.get(Constants.BUNDLE_SYMBOLICNAME)); } // Get bundle version. Version bundleVersion = Version.emptyVersion; if (headerMap.get(Constants.BUNDLE_VERSION) != null) { bundleVersion = VersionTable.getVersion(headerMap.get(Constants.BUNDLE_VERSION)); } // Create a require capability and return it. ParsedHeaderClause clause = clauses.get(0); String symName = clause.paths.get(0); clause.attrs.put(BundleRevision.BUNDLE_NAMESPACE, symName); clause.attrs.put(Constants.BUNDLE_VERSION_ATTRIBUTE, bundleVersion); return clause; } return null; }
private static ParsedHeaderClause parseBundleSymbolicName(Map<String, String> headerMap) throws BundleException { List<ParsedHeaderClause> clauses = parseStandardHeader(headerMap.get(Constants.BUNDLE_SYMBOLICNAME)); if (clauses.size() > 0) { if (clauses.size() > 1 || clauses.get(0).paths.size() > 1) { throw new BundleException("Cannot have multiple symbolic names: " + headerMap.get(Constants.BUNDLE_SYMBOLICNAME)); } // Get bundle version. Version bundleVersion = Version.emptyVersion; if (headerMap.get(Constants.BUNDLE_VERSION) != null) { bundleVersion = VersionTable.getVersion(headerMap.get(Constants.BUNDLE_VERSION)); } // Create a require capability and return it. ParsedHeaderClause clause = clauses.get(0); String symName = clause.paths.get(0); clause.attrs.put(BundleRevision.BUNDLE_NAMESPACE, symName); clause.attrs.put(Constants.BUNDLE_VERSION_ATTRIBUTE, bundleVersion); return clause; } return null; }
public static boolean inRange(String versionText, String range) { VersionRange versionRange = VersionRange.parseVersionRange(range); Version version = VersionTable.getVersion(versionText); if (version != null && versionRange != null) { return versionRange.matches(version); } return false; }
public static boolean inRange(String versionText, String range) { VersionRange versionRange = VersionRange.parseVersionRange(range); Version version = VersionTable.getVersion(versionText); if (version != null && versionRange != null) { return versionRange.matches(version); } return false; }
private FeatureResource(Feature feature) { super(feature.getName(), TYPE_FEATURE, VersionTable.getVersion(feature.getVersion())); this.feature = feature; }
private Set<Feature> getMatching(String nameAndVersion) { FeatureReq req = new FeatureReq(nameAndVersion); Set<Feature> versionToFeatures = featuresCache.get(req.getName()); if (versionToFeatures == null) { return Collections.emptySet(); } return versionToFeatures.stream() .filter(f -> f.getName().equals(req.getName()) && req.getVersionRange().contains(VersionTable.getVersion(f.getVersion()))) .collect(Collectors.toSet()); } }
private static Feature getLatestFeature(Map<String, Feature> versions, VersionRange versionRange) { Feature feature = null; if (versions != null && !versions.isEmpty()) { Version latest = Version.emptyVersion; for (String available : versions.keySet()) { Version availableVersion = VersionTable.getVersion(available); if (availableVersion.compareTo(latest) >= 0 && versionRange.contains(availableVersion)) { Feature possiblyBlacklisted = versions.get(available); // return only if there are no more non-blaclisted features if (feature == null || !possiblyBlacklisted.isBlacklisted()) { feature = possiblyBlacklisted; } latest = availableVersion; } } } return feature; }
private Set<Feature> getMatching(String nameAndVersion) { FeatureReq req = new FeatureReq(nameAndVersion); Set<Feature> versionToFeatures = featuresCache.get(req.getName()); if (versionToFeatures == null) { return Collections.emptySet(); } return versionToFeatures.stream() .filter(f -> f.getName().equals(req.getName()) && req.getVersionRange().contains(VersionTable.getVersion(f.getVersion()))) .collect(Collectors.toSet()); } }
private boolean checkPackage(String packageName, String version) { VersionRange range = VersionRange.parseVersionRange(version); Bundle[] bundles = bundleContext.getBundles(); for (int i = 0; (bundles != null) && (i < bundles.length); i++) { BundleWiring wiring = bundles[i].adapt(BundleWiring.class); List<BundleCapability> caps = wiring != null ? wiring.getCapabilities(BundleRevision.PACKAGE_NAMESPACE) : null; if (caps != null) { for (BundleCapability cap : caps) { String n = getAttribute(cap, BundleRevision.PACKAGE_NAMESPACE); String v = getAttribute(cap, Constants.VERSION_ATTRIBUTE); if (packageName.equals(n) && range.contains(VersionTable.getVersion(v))) { return true; } } } } return false; }
private boolean checkPackage(String packageName, String version) { VersionRange range = VersionRange.parseVersionRange(version); Bundle[] bundles = bundleContext.getBundles(); for (int i = 0; (bundles != null) && (i < bundles.length); i++) { BundleWiring wiring = bundles[i].adapt(BundleWiring.class); List<BundleCapability> caps = wiring != null ? wiring.getCapabilities(BundleRevision.PACKAGE_NAMESPACE) : null; if (caps != null) { for (BundleCapability cap : caps) { String n = getAttribute(cap, BundleRevision.PACKAGE_NAMESPACE); String v = getAttribute(cap, Constants.VERSION_ATTRIBUTE); if (packageName.equals(n) && range.contains(VersionTable.getVersion(v))) { return true; } } } } return false; }
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; }