@Override public Promise<Collection<Resource>> findProviders(RequirementExpression expression) { Set<Resource> providers = new HashSet<>(); dispatch(expression, providers); return promiseFactory.resolved(providers); }
private void dispatch(RequirementExpression expression, Set<Resource> providers) { if (expression instanceof IdentityExpression) { Map<Requirement, Collection<Capability>> capabilities = findProviders( Collections.singleton(((IdentityExpression) expression).getRequirement())); for (Collection<Capability> caps : capabilities.values()) { dispatch(re, providers); } else if (expression instanceof AndExpression) { List<RequirementExpression> requirementExpressions = ((AndExpression) expression) dispatch(requirementExpressions.get(0), providers); return; dispatch(requirementExpressions.get(0), subset); if (!matches(re, resource)) { } else if (expression instanceof NotExpression) { Set<Resource> allSet = new HashSet<>(); dispatch(all, allSet); RequirementExpression re = ((NotExpression) expression).getRequirementExpression(); for (Iterator<Resource> it = allSet.iterator(); it.hasNext();) { Resource resource = it.next(); if (matches(re, resource)) { it.remove(); if (allSet.isEmpty())
private boolean matches(RequirementExpression expression, Resource resource) { if (expression instanceof IdentityExpression) { Requirement r = ((IdentityExpression) expression).getRequirement(); return ResourceUtils.matches(r, resource); } else if (expression instanceof OrExpression) { List<RequirementExpression> res = ((OrExpression) expression).getRequirementExpressions(); for (RequirementExpression re : res) { if (matches(re, resource)) return true; } return false; } else if (expression instanceof AndExpression) { List<RequirementExpression> res = ((AndExpression) expression).getRequirementExpressions(); for (RequirementExpression re : res) { if (!matches(re, resource)) return false; } return true; } else if (expression instanceof NotExpression) { RequirementExpression re = ((NotExpression) expression).getRequirementExpression(); return !matches(re, resource); } else throw new UnsupportedOperationException("Unknown expression type " + expression.getClass()); }
private void dispatch(RequirementExpression expression, Set<Resource> providers) { if (expression instanceof IdentityExpression) { Map<Requirement, Collection<Capability>> capabilities = findProviders( Collections.singleton(((IdentityExpression) expression).getRequirement())); for (Collection<Capability> caps : capabilities.values()) { dispatch(re, providers); } else if (expression instanceof AndExpression) { List<RequirementExpression> requirementExpressions = ((AndExpression) expression) dispatch(requirementExpressions.get(0), providers); return; dispatch(requirementExpressions.get(0), subset); if (!matches(re, resource)) { } else if (expression instanceof NotExpression) { Set<Resource> allSet = new HashSet<>(); dispatch(all, allSet); RequirementExpression re = ((NotExpression) expression).getRequirementExpression(); for (Iterator<Resource> it = allSet.iterator(); it.hasNext();) { Resource resource = it.next(); if (matches(re, resource)) { it.remove(); if (allSet.isEmpty())
private boolean matches(RequirementExpression expression, Resource resource) { if (expression instanceof IdentityExpression) { Requirement r = ((IdentityExpression) expression).getRequirement(); return ResourceUtils.matches(r, resource); } else if (expression instanceof OrExpression) { List<RequirementExpression> res = ((OrExpression) expression).getRequirementExpressions(); for (RequirementExpression re : res) { if (matches(re, resource)) return true; } return false; } else if (expression instanceof AndExpression) { List<RequirementExpression> res = ((AndExpression) expression).getRequirementExpressions(); for (RequirementExpression re : res) { if (!matches(re, resource)) return false; } return true; } else if (expression instanceof NotExpression) { RequirementExpression re = ((NotExpression) expression).getRequirementExpression(); return !matches(re, resource); } else throw new UnsupportedOperationException("Unknown expression type " + expression.getClass()); }
@Override public Promise<Collection<Resource>> findProviders(RequirementExpression expression) { Set<Resource> providers = new HashSet<>(); dispatch(expression, providers); return promiseFactory.resolved(providers); }