private static List<ParsedHeaderClause> normalizeRequireClauses(List<ParsedHeaderClause> clauses) { // Convert bundle version attribute to VersionRange type. for (ParsedHeaderClause clause : clauses) { Object value = clause.attrs.get(Constants.BUNDLE_VERSION_ATTRIBUTE); if (value != null) { clause.attrs.put(Constants.BUNDLE_VERSION_ATTRIBUTE, VersionRange.parseVersionRange(value.toString())); } } return clauses; }
private static List<ParsedHeaderClause> normalizeRequireClauses(List<ParsedHeaderClause> clauses) { // Convert bundle version attribute to VersionRange type. for (ParsedHeaderClause clause : clauses) { Object value = clause.attrs.get(Constants.BUNDLE_VERSION_ATTRIBUTE); if (value != null) { clause.attrs.put(Constants.BUNDLE_VERSION_ATTRIBUTE, VersionRange.parseVersionRange(value.toString())); } } return clauses; }
private VersionRange extractVersion(String value) { int begin = value.indexOf("version=") + 8; int end = value.indexOf(";", begin); if (end < 0) { return VersionRange.parseVersionRange(unquote(value.substring(begin))); } else { return VersionRange.parseVersionRange(unquote(value.substring(begin, end))); } }
private boolean checkBundle(String bundleName, String version) { VersionRange vr = VersionRange.parseVersionRange(version); Bundle[] bundles = bundleContext.getBundles(); for (int i = 0; (bundles != null) && (i < bundles.length); i++) { String sym = bundles[i].getSymbolicName(); if ((sym != null) && sym.equals(bundleName)) { if (vr.contains(bundles[i].getVersion())) { return true; } } } return false; }
private boolean checkBundle(String bundleName, String version) { VersionRange vr = VersionRange.parseVersionRange(version); Bundle[] bundles = bundleContext.getBundles(); for (int i = 0; (bundles != null) && (i < bundles.length); i++) { String sym = bundles[i].getSymbolicName(); if ((sym != null) && sym.equals(bundleName)) { if (vr.contains(bundles[i].getVersion())) { return true; } } } return false; }
clause.attrs.remove(Constants.PACKAGE_SPECIFICATION_VERSION); v = (v == null) ? sv : v; clause.attrs.put(Constants.VERSION_ATTRIBUTE, VersionRange.parseVersionRange(v.toString())); clause.attrs.put(Constants.BUNDLE_VERSION_ATTRIBUTE, VersionRange.parseVersionRange(v.toString()));
protected void findBundlesWithFramentsToRefresh(Set<Bundle> toRefresh) { for (Bundle b : toRefresh) { if (b.getState() != Bundle.UNINSTALLED) { String hostHeader = (String) b.getHeaders().get(Constants.FRAGMENT_HOST); if (hostHeader != null) { Clause[] clauses = Parser.parseHeader(hostHeader); if (clauses != null && clauses.length > 0) { Clause path = clauses[0]; for (Bundle hostBundle : bundleContext.getBundles()) { if (hostBundle.getSymbolicName().equals(path.getName())) { String ver = path.getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE); if (ver != null) { VersionRange v = VersionRange.parseVersionRange(ver); if (v.contains(hostBundle.getVersion())) { toRefresh.add(hostBundle); } } else { toRefresh.add(hostBundle); } } } } } } } }
protected void findBundlesWithFragmentsToRefresh(Set<Bundle> toRefresh) { for (Bundle b : toRefresh) { if (b.getState() != Bundle.UNINSTALLED) { String hostHeader = b.getHeaders().get(Constants.FRAGMENT_HOST); if (hostHeader != null) { Clause[] clauses = Parser.parseHeader(hostHeader); if (clauses != null && clauses.length > 0) { Clause path = clauses[0]; for (Bundle hostBundle : bundleContext.getBundles()) { if (hostBundle.getSymbolicName().equals(path.getName())) { String ver = path.getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE); if (ver != null) { VersionRange v = VersionRange.parseVersionRange(ver); if (v.contains(hostBundle.getVersion())) { toRefresh.add(hostBundle); } } else { toRefresh.add(hostBundle); } } } } } } } }
protected void findBundlesWithFragmentsToRefresh(Set<Bundle> toRefresh) { Set<Bundle> fragments = new HashSet<Bundle>(); Set<Bundle> bundles = getScopedBundles(fragmentScope); for (Bundle b : toRefresh) { if (b.getState() != Bundle.UNINSTALLED) { String hostHeader = b.getHeaders().get(Constants.FRAGMENT_HOST); if (hostHeader != null) { Clause[] clauses = Parser.parseHeader(hostHeader); if (clauses != null && clauses.length > 0) { Clause path = clauses[0]; for (Bundle hostBundle : bundles) { if (hostBundle.getSymbolicName() != null && hostBundle.getSymbolicName().equals(path.getName())) { String ver = path.getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE); if (ver != null) { VersionRange v = VersionRange.parseVersionRange(ver); if (v.contains(VersionTable.getVersion(hostBundle.getHeaders().get(Constants.BUNDLE_VERSION)))) { fragments.add(hostBundle); } } else { fragments.add(hostBundle); } } } } } } } toRefresh.addAll(fragments); }
@SuppressWarnings("deprecation") public static VersionRange getVersionRange(Clause clause) { String v = clause.getAttribute(Constants.VERSION_ATTRIBUTE); if (v == null) { v = clause.getAttribute(Constants.PACKAGE_SPECIFICATION_VERSION); } if (v == null) { v = clause.getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE); } return VersionRange.parseVersionRange(v); } }
private boolean checkPackage(String packageName, String version) { VersionRange range = VersionRange.parseVersionRange(version); if (admin != null) { ExportedPackage[] packages = admin.getExportedPackages(packageName); if (packages != null) { for (ExportedPackage export : packages) { if (range.contains(export.getVersion())) { return true; } } } } return false; }
@SuppressWarnings("deprecation") public static VersionRange getVersionRange(Clause clause) { String v = clause.getAttribute(Constants.VERSION_ATTRIBUTE); if (v == null) { v = clause.getAttribute(Constants.PACKAGE_SPECIFICATION_VERSION); } if (v == null) { v = clause.getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE); } return VersionRange.parseVersionRange(v); } }
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 void doCollectPrerequisites(Set<String> prereqs) { for (Subsystem child : children) { child.doCollectPrerequisites(prereqs); } if (feature != null) { boolean match = false; for (String prereq : prereqs) { String[] p = prereq.split("/"); if (feature.getName().equals(p[0]) && VersionRange.parseVersionRange(p[1]).contains(Version.parseVersion(feature.getVersion()))) { // our feature is already among prerequisites, so ... match = true; break; } } // ... we won't be adding its prerequisites - they'll be handled after another PartialDeploymentException if (!match) { for (Dependency dep : feature.getDependencies()) { if (dep.isPrerequisite()) { prereqs.add(dep.toString()); } } } } }
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); PackageAdmin admin = getPackageAdmin(); if (admin != null) { ExportedPackage[] packages = admin.getExportedPackages(packageName); if (packages != null) { for (ExportedPackage export : packages) { if (range.contains(export.getVersion())) { return true; } } } } return false; } }
private boolean checkPackage(String packageName, String version) { VersionRange range = VersionRange.parseVersionRange(version); PackageAdmin admin = getPackageAdmin(); if (admin != null) { ExportedPackage[] packages = admin.getExportedPackages(packageName); if (packages != null) { for (ExportedPackage export : packages) { if (range.contains(export.getVersion())) { return true; } } } } return false; } }
private void createNodeForImport(Node<Bundle> node, Bundle bundle, Clause i) { VersionRange range = VersionRange.parseVersionRange(i.getAttribute(Constants.VERSION_ATTRIBUTE)); boolean foundMatch = false; for (Bundle b : bundleContext.getBundles()) { BundleWiring wiring = b.adapt(BundleWiring.class); if (wiring != null) { List<BundleCapability> caps = wiring.getCapabilities(BundleRevision.PACKAGE_NAMESPACE); if (caps != null) { for (BundleCapability cap : caps) { String n = getAttribute(cap, BundleRevision.PACKAGE_NAMESPACE); String v = getAttribute(cap, Constants.VERSION_ATTRIBUTE); if (i.getName().equals(n) && range.contains(VersionTable.getVersion(v))) { boolean existing = tree.flatten().contains(b); System.out.printf("- import %s: resolved using %s%n", i, b); foundMatch = true; if (!node.hasChild(b)) { Node<Bundle> child = node.addChild(b); if (!existing) { createNode(child); } } } } } } } if (!foundMatch) { System.out.printf("- import %s: WARNING - unable to find matching export%n", i); } }
private void createNodeForImport(Node<Bundle> node, Bundle bundle, Clause i) { VersionRange range = VersionRange.parseVersionRange(i.getAttribute(Constants.VERSION_ATTRIBUTE)); boolean foundMatch = false; for (Bundle b : bundleContext.getBundles()) { BundleWiring wiring = b.adapt(BundleWiring.class); if (wiring != null) { List<BundleCapability> caps = wiring.getCapabilities(BundleRevision.PACKAGE_NAMESPACE); if (caps != null) { for (BundleCapability cap : caps) { String n = getAttribute(cap, BundleRevision.PACKAGE_NAMESPACE); String v = getAttribute(cap, Constants.VERSION_ATTRIBUTE); if (i.getName().equals(n) && range.contains(VersionTable.getVersion(v))) { boolean existing = tree.flatten().contains(b); System.out.printf("- import %s: resolved using %s%n", i, b); foundMatch = true; if (!node.hasChild(b)) { Node<Bundle> child = node.addChild(b); if (!existing) { createNode(child); } } } } } } } if (!foundMatch) { System.out.printf("- import %s: WARNING - unable to find matching export%n", i); } }
/** * @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; }