private static void toString(StringBuilder sb, List<?> list) { for (Object o : list) { SimpleFilter sf = (SimpleFilter) o; sf.toString(sb); } }
private static boolean matchMandatoryAttribute(String attrName, SimpleFilter sf) { if ((sf.getName() != null) && sf.getName().equals(attrName)) { return true; } else if (sf.getOperation() == SimpleFilter.AND) { List list = (List) sf.getValue(); for (Object aList : list) { SimpleFilter sf2 = (SimpleFilter) aList; if ((sf2.getName() != null) && sf2.getName().equals(attrName)) { return true; } } } return false; }
/** * 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(); }
/** * @return map of bundles and the region they are deployed in */ public Map<Resource, String> getBundles() { if (bundles == null) { String filter = String.format("(&(%s=*)(|(%s=%s)(%s=%s)))", IDENTITY_NAMESPACE, CAPABILITY_TYPE_ATTRIBUTE, TYPE_BUNDLE, CAPABILITY_TYPE_ATTRIBUTE, TYPE_FRAGMENT); SimpleFilter sf = SimpleFilter.parse(filter); bundles = getResourceMapping(sf); } return bundles; }
toString(sb, (List<?>) value); sb.append(")"); break; case OR: sb.append("(|"); toString(sb, (List<?>) value); sb.append(")"); break; case NOT: sb.append("(!"); toString(sb, (List<?>) value); sb.append(")"); break; .append(name) .append("="); toEncodedString(sb, value); sb.append(")"); break; .append(name) .append("<="); toEncodedString(sb, value); sb.append(")"); break; .append(name) .append(">="); toEncodedString(sb, value);
startIdx = skipWhitespace(filter, attrEndIdx); Object value = toDecodedString(filter, startIdx, endIdx); List<String> values = parseSubstring(valueStr); if ((values.size() == 2) && (values.get(0).length() == 0) return new SimpleFilter(attr, value, op);
@SuppressWarnings("unchecked") public static SimpleFilter parse(String filter) { int idx = skipWhitespace(filter, 0); idx = skipWhitespace(filter, idx + 1); int peek = skipWhitespace(filter, idx + 1); if (filter.charAt(peek) == '(') { idx = peek - 1; stack.addFirst(new SimpleFilter(null, new ArrayList<>(2), SimpleFilter.AND)); } else { stack.addFirst(idx); int peek = skipWhitespace(filter, idx + 1); if (filter.charAt(peek) == '(') { idx = peek - 1; stack.addFirst(new SimpleFilter(null, new ArrayList<>(2), SimpleFilter.OR)); } else { stack.addFirst(idx); int peek = skipWhitespace(filter, idx + 1); if (filter.charAt(peek) == '(') { idx = peek - 1; stack.addFirst(new SimpleFilter(null, new ArrayList<>(1), SimpleFilter.NOT)); } else { stack.addFirst(idx); SimpleFilter.subfilter(filter, (Integer) top, idx)); } else { sf = SimpleFilter.subfilter(filter, (Integer) top, idx);
private static SimpleFilter createFilter(String... s) { Map<String, Object> attrs = new HashMap<>(); for (int i = 0; i < s.length - 1; i += 2) { attrs.put(s[i], s[i + 1]); } return SimpleFilter.convert(attrs); }
if (!vr.isOpenFloor()) { filters.add( new SimpleFilter( entry.getKey(), vr.getFloor().toString(), ); } else { SimpleFilter val = new SimpleFilter( entry.getKey(), vr.getFloor().toString(), SimpleFilter.LTE); SimpleFilter not = new SimpleFilter(null, Collections.singletonList(val), SimpleFilter.NOT); filters.add(not); if (!vr.isOpenCeiling()) { filters.add( new SimpleFilter( entry.getKey(), vr.getCeiling().toString(), ); } else if (!vr.getCeiling().equals(VersionRange.INFINITE_VERSION)) { SimpleFilter val = new SimpleFilter( entry.getKey(), vr.getCeiling().toString(), SimpleFilter.GTE); SimpleFilter not =
SimpleFilter(String name, Object value, int op) { this.name = reuseCommonString(name); this.value = value; this.op = op; }
return compareApproximate(lhs, rhs); case SimpleFilter.SUBSTRING: return SimpleFilter.compareSubstring((List<String>) rhs, (String) lhs); default: throw new RuntimeException("Unknown comparison operator: " + op);
@Override public Collection<Resource> getMandatoryResources() { List<Resource> resources = new ArrayList<>(); Requirement req = new RequirementImpl( null, IDENTITY_NAMESPACE, Collections.emptyMap(), Collections.emptyMap(), SimpleFilter.parse("(" + IDENTITY_NAMESPACE + "=root)")); Collection<Capability> identities = repository.findProviders(Collections.singleton(req)).get(req); for (Capability identity : identities) { resources.add(identity.getResource()); } return resources; }
toString(sb, (List<?>) value); sb.append(")"); break; case OR: sb.append("(|"); toString(sb, (List<?>) value); sb.append(")"); break; case NOT: sb.append("(!"); toString(sb, (List<?>) value); sb.append(")"); break; .append(name) .append("="); toEncodedString(sb, value); sb.append(")"); break; .append(name) .append("<="); toEncodedString(sb, value); sb.append(")"); break; .append(name) .append(">="); toEncodedString(sb, value);
startIdx = skipWhitespace(filter, attrEndIdx); Object value = toDecodedString(filter, startIdx, endIdx); List<String> values = parseSubstring(valueStr); if ((values.size() == 2) && (values.get(0).length() == 0) return new SimpleFilter(attr, value, op);
@SuppressWarnings("unchecked") public static SimpleFilter parse(String filter) { int idx = skipWhitespace(filter, 0); idx = skipWhitespace(filter, idx + 1); int peek = skipWhitespace(filter, idx + 1); if (filter.charAt(peek) == '(') { idx = peek - 1; stack.addFirst(new SimpleFilter(null, new ArrayList<>(2), SimpleFilter.AND)); } else { stack.addFirst(idx); int peek = skipWhitespace(filter, idx + 1); if (filter.charAt(peek) == '(') { idx = peek - 1; stack.addFirst(new SimpleFilter(null, new ArrayList<>(2), SimpleFilter.OR)); } else { stack.addFirst(idx); int peek = skipWhitespace(filter, idx + 1); if (filter.charAt(peek) == '(') { idx = peek - 1; stack.addFirst(new SimpleFilter(null, new ArrayList<>(1), SimpleFilter.NOT)); } else { stack.addFirst(idx); SimpleFilter.subfilter(filter, (Integer) top, idx)); } else { sf = SimpleFilter.subfilter(filter, (Integer) top, idx);
private boolean hasResource(String type, String name, Version version) { CapabilitySet set = capSets.get(IDENTITY_NAMESPACE); if (set != null) { Map<String, Object> attrs = new HashMap<>(); attrs.put(CAPABILITY_TYPE_ATTRIBUTE, type); attrs.put(IDENTITY_NAMESPACE, name); attrs.put(CAPABILITY_VERSION_ATTRIBUTE, version); SimpleFilter sf = SimpleFilter.convert(attrs); return !set.match(sf, true).isEmpty(); } else { return false; } }
if (!vr.isOpenFloor()) { filters.add( new SimpleFilter( entry.getKey(), vr.getFloor().toString(), ); } else { SimpleFilter val = new SimpleFilter( entry.getKey(), vr.getFloor().toString(), SimpleFilter.LTE); SimpleFilter not = new SimpleFilter(null, Collections.singletonList(val), SimpleFilter.NOT); filters.add(not); if (!vr.isOpenCeiling()) { filters.add( new SimpleFilter( entry.getKey(), vr.getCeiling().toString(), ); } else if (!vr.getCeiling().equals(VersionRange.INFINITE_VERSION)) { SimpleFilter val = new SimpleFilter( entry.getKey(), vr.getCeiling().toString(), SimpleFilter.GTE); SimpleFilter not =
SimpleFilter(String name, Object value, int op) { this.name = reuseCommonString(name); this.value = value; this.op = op; }