GenericConstraint(ResolverBundle bundle, GenericSpecification constraint) { super(bundle, constraint); String effectiveDirective = constraint.getRequirement().getDirectives().get(Constants.EFFECTIVE_DIRECTIVE); effective = effectiveDirective == null || Constants.EFFECTIVE_RESOLVE.equals(effectiveDirective); multiple = (constraint.getResolution() & GenericSpecification.RESOLUTION_MULTIPLE) != 0; }
private boolean isResolvable(GenericSpecification constraint, ResolverHook hook) { Map<String, List<GenericDescription>> genericCapabilities = getGenericsMap(constraint.getBundle().getContainingState(), true); List<GenericDescription> genericList = genericCapabilities.get(constraint.getName()); if (genericList == null) return false; return getPossibleCandidates(constraint, genericList.toArray(new BaseDescription[genericList.size()]), null, hook, true).size() > 0; }
private void writeGenericSpecification(GenericSpecification specification, DataOutputStream out) throws IOException { if (writePrefix(specification, out)) return; writeVersionConstraint(specification, out); writeStringOrNull(specification.getType() == GenericDescription.DEFAULT_TYPE ? null : specification.getType(), out); GenericDescription[] suppliers = specification.getSuppliers(); out.writeInt(suppliers == null ? 0 : suppliers.length); if (suppliers != null) for (int i = 0; i < suppliers.length; i++) writeGenericDescription(suppliers[i], out); out.writeInt(specification.getResolution()); writeStringOrNull(specification.getMatchingFilter(), out); }
private GenericSpecification[] createGenericRequires(GenericSpecification[] genericRequires) { if (genericRequires == null || genericRequires.length == 0) return null; GenericSpecification[] result = new GenericSpecification[genericRequires.length]; for (int i = 0; i < genericRequires.length; i++) { GenericSpecificationImpl req = new GenericSpecificationImpl(); req.setName(genericRequires[i].getName()); req.setType(genericRequires[i].getType()); req.setResolution(req.getResolution()); try { req.setMatchingFilter(genericRequires[i].getMatchingFilter(), true); } catch (InvalidSyntaxException e) { // do nothing; this filter should already have been tested } result[i] = req; } return result; }
private GenericSpecification[] createGenericRequires(GenericSpecification[] genericRequires) { if (genericRequires == null || genericRequires.length == 0) return null; GenericSpecification[] result = new GenericSpecification[genericRequires.length]; for (int i = 0; i < genericRequires.length; i++) { GenericSpecificationImpl req = new GenericSpecificationImpl(); req.setName(genericRequires[i].getName()); req.setType(genericRequires[i].getType()); req.setResolution(genericRequires[i].getResolution()); try { req.setMatchingFilter(genericRequires[i].getMatchingFilter(), false); } catch (InvalidSyntaxException e) { // do nothing; this filter should already have been tested } if (genericRequires[i] instanceof GenericSpecificationImpl) { req.setAttributes(((GenericSpecificationImpl) genericRequires[i]).getAttributes()); req.setArbitraryDirectives(((GenericSpecificationImpl) genericRequires[i]).getArbitraryDirectives()); } result[i] = req; } return result; }
public List<BundleRequirement> getDeclaredRequirements(String namespace) { List<BundleRequirement> result = new ArrayList<BundleRequirement>(); if (namespace == null || BundleRevision.BUNDLE_NAMESPACE.equals(namespace)) { BundleSpecification[] requires = getRequiredBundles(); for (BundleSpecification require : requires) { result.add(require.getRequirement()); } } if (host != null && (namespace == null || BundleRevision.HOST_NAMESPACE.equals(namespace))) { result.add(host.getRequirement()); } if (namespace == null || BundleRevision.PACKAGE_NAMESPACE.equals(namespace)) { ImportPackageSpecification[] imports = getImportPackages(); for (ImportPackageSpecification importPkg : imports) result.add(importPkg.getRequirement()); } GenericSpecification[] genericSpecifications = getGenericRequires(); for (GenericSpecification requirement : genericSpecifications) { if (namespace == null || namespace.equals(requirement.getType())) result.add(requirement.getRequirement()); } return Collections.unmodifiableList(result); }
public String getNameSpace() { return ((GenericSpecification) getVersionConstraint()).getType(); }
boolean isFromRequiredEE() { return (((GenericSpecification) constraint).getResolution() & GenericSpecificationImpl.RESOLUTION_FROM_BREE) != 0; }
private void rewireGeneric(GenericConstraint constraint, List<ResolverBundle> visited) { if (constraint.getSelectedSupplier() != null) return; GenericDescription[] suppliers = ((GenericSpecification) constraint.getVersionConstraint()).getSuppliers(); if (suppliers == null) return; VersionHashMap<GenericCapability> namespace = resolverGenerics.get(constraint.getNameSpace()); if (namespace == null) { System.err.println("Could not find matching capability for " + constraint.getVersionConstraint()); //$NON-NLS-1$ // TODO log error!! return; } String constraintName = constraint.getName(); List<GenericCapability> matches = constraintName == null ? namespace.get(constraintName) : namespace.getAllValues(); for (GenericCapability match : matches) { for (GenericDescription supplier : suppliers) if (match.getBaseDescription() == supplier) constraint.addPossibleSupplier(match); } VersionSupplier[] matchingCapabilities = constraint.getPossibleSuppliers(); if (matchingCapabilities != null) for (int i = 0; i < matchingCapabilities.length; i++) rewireBundle(matchingCapabilities[i].getResolverBundle(), visited); }
if (!generics[i].isResolved() && !isResolvable(generics[i], hook)) unsatisfied.add(generics[i]); NativeCodeSpecification nativeCode = bundle.getNativeCodeSpecification();
GenericConstraint(ResolverBundle bundle, GenericSpecification constraint) { super(bundle, constraint); String effectiveDirective = constraint.getRequirement().getDirectives().get(Constants.EFFECTIVE_DIRECTIVE); effective = effectiveDirective == null || Constants.EFFECTIVE_RESOLVE.equals(effectiveDirective); }
private List<GenericSpecification> createRequireCapability(Requirement requirement) { Map<String, String> directives = new HashMap<>(requirement.getDirectives()); String filter = directives.get(Namespace.REQUIREMENT_FILTER_DIRECTIVE); if (filter != null) { directives.put(Namespace.REQUIREMENT_FILTER_DIRECTIVE, escapeFilterInput(filter)); } String declaration = requirement.getNamespace() + toString(requirement.getAttributes(), "=", false) + toString(directives, ":=", true); //$NON-NLS-1$ //$NON-NLS-2$ List<GenericSpecification> result = state.getFactory().createGenericSpecifications(declaration); for (GenericSpecification genericSpecification : result) { genericSpecification.setUserObject(requirement); } return result; }
private GenericSpecification[] createGenericRequires(GenericSpecification[] genericRequires) { if (genericRequires == null || genericRequires.length == 0) return null; GenericSpecification[] result = new GenericSpecification[genericRequires.length]; for (int i = 0; i < genericRequires.length; i++) { GenericSpecificationImpl req = new GenericSpecificationImpl(); req.setName(genericRequires[i].getName()); req.setType(genericRequires[i].getType()); req.setResolution(req.getResolution()); try { req.setMatchingFilter(genericRequires[i].getMatchingFilter(), false); } catch (InvalidSyntaxException e) { // do nothing; this filter should already have been tested } if (genericRequires[i] instanceof GenericSpecificationImpl) { req.setAttributes(((GenericSpecificationImpl) genericRequires[i]).getAttributes()); req.setArbitraryDirectives(((GenericSpecificationImpl) genericRequires[i]).getArbitraryDirectives()); } result[i] = req; } return result; }
public List<BundleRequirement> getDeclaredRequirements(String namespace) { List<BundleRequirement> result = new ArrayList<BundleRequirement>(); if (namespace == null || BundleRevision.BUNDLE_NAMESPACE.equals(namespace)) { BundleSpecification[] requires = getRequiredBundles(); for (BundleSpecification require : requires) { result.add(require.getRequirement()); } } if (host != null && (namespace == null || BundleRevision.HOST_NAMESPACE.equals(namespace))) { result.add(host.getRequirement()); } if (namespace == null || BundleRevision.PACKAGE_NAMESPACE.equals(namespace)) { ImportPackageSpecification[] imports = getImportPackages(); for (ImportPackageSpecification importPkg : imports) result.add(importPkg.getRequirement()); } GenericSpecification[] genericSpecifications = getGenericRequires(); for (GenericSpecification requirement : genericSpecifications) { if (namespace == null || namespace.equals(requirement.getType())) result.add(requirement.getRequirement()); } return Collections.unmodifiableList(result); }
public String getNameSpace() { return ((GenericSpecification) getVersionConstraint()).getType(); }
boolean isFromRequiredEE() { return (((GenericSpecification) constraint).getResolution() & GenericSpecificationImpl.RESOLUTION_FROM_BREE) != 0; }
private void rewireGeneric(GenericConstraint constraint, List<ResolverBundle> visited) { if (constraint.getSelectedSupplier() != null) return; GenericDescription[] suppliers = ((GenericSpecification) constraint.getVersionConstraint()).getSuppliers(); if (suppliers == null) return; VersionHashMap<GenericCapability> namespace = resolverGenerics.get(constraint.getNameSpace()); if (namespace == null) { System.err.println("Could not find matching capability for " + constraint.getVersionConstraint()); //$NON-NLS-1$ // TODO log error!! return; } String constraintName = constraint.getName(); List<GenericCapability> matches = constraintName == null ? namespace.get(constraintName) : namespace.getAllValues(); for (GenericCapability match : matches) { for (GenericDescription supplier : suppliers) if (match.getBaseDescription() == supplier) constraint.addPossibleSupplier(match); } VersionSupplier[] matchingCapabilities = constraint.getPossibleSuppliers(); if (matchingCapabilities != null) for (int i = 0; i < matchingCapabilities.length; i++) rewireBundle(matchingCapabilities[i].getResolverBundle(), visited); }
if (!generics[i].isResolved() && !isResolvable(generics[i], hook)) unsatisfied.add(generics[i]); NativeCodeSpecification nativeCode = bundle.getNativeCodeSpecification();
protected void addRequirement(List<IRequirement> reqsDeps, GenericSpecification requireCapSpec, ManifestElement[] rawRequireCapabilities) { BundleRequirement req = requireCapSpec.getRequirement(); String namespace = req.getNamespace(); Map<String, String> directives = req.getDirectives(); String capFilter = directives.get(Namespace.REQUIREMENT_FILTER_DIRECTIVE); boolean optional = directives.get(Namespace.REQUIREMENT_RESOLUTION_DIRECTIVE) == Namespace.RESOLUTION_OPTIONAL; boolean greedy = optional ? INSTALLATION_GREEDY.equals(directives.get(INSTALLATION_DIRECTIVE)) : true; IRequirement requireCap = MetadataFactory.createRequirement(namespace, capFilter, null, optional ? 0 : 1, 1, greedy); reqsDeps.add(requireCap); }
private List<GenericSpecification> createRequireCapability(Requirement requirement) { String declaration = requirement.getNamespace() + toString(requirement.getAttributes(), "=", false) + toString(requirement.getDirectives(), ":=", true); //$NON-NLS-1$ //$NON-NLS-2$ List<GenericSpecification> result = state.getFactory().createGenericSpecifications(declaration); for (GenericSpecification genericSpecification : result) { genericSpecification.setUserObject(requirement); } return result; }