Rule(String filter, String output) { this.filter = new Filter(filter); this.output = output; }
@Override public boolean matches(ServiceReference<?> serviceReference) { BasicServiceReference<?> basicServiceReference = (BasicServiceReference<?>)serviceReference; Dictionary<String, Object> dictionary = new UnmodifiableCaseInsensitiveMapDictionary<>( basicServiceReference._properties); return _filter.match(dictionary); }
boolean compareString(String s1, int op, String s2) { switch (op) { case EQ : return patSubstr(s1, s2); case APPROX : return fixupString(s2).equals(fixupString(s1)); default : return compareSign(op, s2.compareTo(s1)); } }
/** * Ensure that we are running on the correct bnd. */ void doRequireBnd() { Map<String, String> require = OSGiHeader.parseProperties(getProperty(REQUIRE_BND)); if (require == null || require.isEmpty()) return; Hashtable<String, String> map = new Hashtable<String, String>(); map.put(Constants.VERSION_FILTER, getBndVersion()); for (String filter : require.keySet()) { try { Filter f = new Filter(filter); if (f.match(map)) continue; error("%s fails %s", REQUIRE_BND, require.get(filter)); } catch (Exception t) { error("%s with value %s throws exception", t, REQUIRE_BND, require); } } }
Class<?> numClass = obj.getClass(); if (numClass == String.class) { return compareString((String) obj, op, s); } else if (numClass == Character.class) { return compareString(obj.toString(), op, s); } else if (numClass == Long.class) { return compareSign(op, Long.valueOf(s) .compareTo((Long) obj)); } else if (numClass == Integer.class) { return compareSign(op, Integer.valueOf(s) .compareTo((Integer) obj)); } else if (numClass == Short.class) { return compareSign(op, Short.valueOf(s) .compareTo((Short) obj)); } else if (numClass == Byte.class) { return compareSign(op, Byte.valueOf(s) .compareTo((Byte) obj)); } else if (numClass == Double.class) { return compareSign(op, Double.valueOf(s) .compareTo((Double) obj)); } else if (numClass == Float.class) { return compareSign(op, Float.valueOf(s) .compareTo((Float) obj)); } else if (numClass == Boolean.class) { return compareSign(op, new BigInteger(s).compareTo((BigInteger) obj)); } else if (numClass == BigDecimal.class) { return compareSign(op, new BigDecimal(s).compareTo((BigDecimal) obj)); } else if (obj instanceof Collection<?>) {
public List<Capability> findCapabilities(String ns, String filter) throws Exception { if (filter == null || capabilities.isEmpty()) return Collections.emptyList(); List<Capability> capabilities = new ArrayList<>(); Filter f = new Filter(filter); for (Capability c : getCapabilities()) { if (ns != null && !ns.equals(c.getNamespace())) continue; Map<String, Object> attributes = c.getAttributes(); if (attributes != null) { if (f.matchMap(attributes)) capabilities.add(c); } } return capabilities; }
Class< ? > numClass = obj.getClass(); if (numClass == String.class) { return compareString((String) obj, op, s); } else if (numClass == Character.class) { return compareString(obj.toString(), op, s); } else if (numClass == Long.class) { return compareSign(op, Long.valueOf(s).compareTo((Long) obj)); } else if (numClass == Integer.class) { return compareSign(op, Integer.valueOf(s).compareTo((Integer) obj)); } else if (numClass == Short.class) { return compareSign(op, Short.valueOf(s).compareTo((Short) obj)); } else if (numClass == Byte.class) { return compareSign(op, Byte.valueOf(s).compareTo((Byte) obj)); } else if (numClass == Double.class) { return compareSign(op, Double.valueOf(s).compareTo((Double) obj)); } else if (numClass == Float.class) { return compareSign(op, Float.valueOf(s).compareTo((Float) obj)); } else if (numClass == Boolean.class) { if (op != EQ) int a = Boolean.valueOf(s).booleanValue() ? 1 : 0; int b = ((Boolean) obj).booleanValue() ? 1 : 0; return compareSign(op, a - b); } else if (numClass == BigInteger.class) { return compareSign(op, new BigInteger(s).compareTo((BigInteger) obj)); } else if (numClass == BigDecimal.class) { return compareSign(op, new BigDecimal(s).compareTo((BigDecimal) obj)); } else if (obj instanceof Collection< ? >) { for (Object x : (Collection< ? >) obj)
boolean patSubstr(String s, String pat) { if (s == null) return false; if (pat.length() == 0) return s.length() == 0; if (pat.charAt(0) == WILDCARD) { pat = pat.substring(1); for (;;) { if (patSubstr(s, pat)) return true; if (s.length() == 0) return false; s = s.substring(1); } } if (s.length() == 0 || s.charAt(0) != pat.charAt(0)) return false; return patSubstr(s.substring(1), pat.substring(1)); } }
public boolean matches(Map<String, String> map) throws Exception { return filter.matchMap(map); }
@Override public boolean match(Arguments arguments) throws Exception { Object attr = arguments.getProp(key); return compare(attr, op, value); } }
void filterResourcesByResolverMode(Collection<Resource> resources, ResolverMode mode) { assert mode != null; Properties modeCapability = new Properties(); modeCapability.setProperty(CapabilityType.MODE.getTypeName(), mode.name()); for (Iterator<Resource> iter = resources.iterator(); iter.hasNext(); ) { Resource resource = iter.next(); Require modeRequire = resource.findRequire(CapabilityType.MODE.getTypeName()); if (modeRequire == null) continue; else if (modeRequire.getFilter() == null) iter.remove(); else { try { Filter filter = new Filter(modeRequire.getFilter()); if (!filter.match(modeCapability)) iter.remove(); } catch (IllegalArgumentException e) { synchronized (this) { if (reporter != null) reporter.error("Error parsing mode filter requirement on resource %s: %s", resource.getUrl(), modeRequire.getFilter()); } iter.remove(); } } } }
Class<?> numClass = obj.getClass(); if (numClass == String.class) { return compareString((String) obj, op, s); } else if (numClass == Character.class) { return compareString(obj.toString(), op, s); } else if (numClass == Long.class) { return compareSign(op, Long.valueOf(s) .compareTo((Long) obj)); } else if (numClass == Integer.class) { return compareSign(op, Integer.valueOf(s) .compareTo((Integer) obj)); } else if (numClass == Short.class) { return compareSign(op, Short.valueOf(s) .compareTo((Short) obj)); } else if (numClass == Byte.class) { return compareSign(op, Byte.valueOf(s) .compareTo((Byte) obj)); } else if (numClass == Double.class) { return compareSign(op, Double.valueOf(s) .compareTo((Double) obj)); } else if (numClass == Float.class) { return compareSign(op, Float.valueOf(s) .compareTo((Float) obj)); } else if (numClass == Boolean.class) { return compareSign(op, new BigInteger(s).compareTo((BigInteger) obj)); } else if (numClass == BigDecimal.class) { return compareSign(op, new BigDecimal(s).compareTo((BigDecimal) obj)); } else if (obj instanceof Collection<?>) {
public List<Capability> findCapabilities(String ns, String filter) throws Exception { if (filter == null || capabilities.isEmpty()) return Collections.emptyList(); List<Capability> capabilities = new ArrayList<>(); Filter f = new Filter(filter); for (Capability c : getCapabilities()) { if (ns != null && !ns.equals(c.getNamespace())) continue; Map<String, Object> attributes = c.getAttributes(); if (attributes != null) { if (f.matchMap(attributes)) capabilities.add(c); } } return capabilities; }
Class< T > numClass = (Class<T>) obj.getClass(); if (numClass == String.class) { return compareString((String) obj, op, s); } else if (numClass == Character.class) { return compareString(obj.toString(), op, s); } else if (numClass == Long.class) { return compareSign(op, Long.valueOf(s).compareTo((Long) obj)); } else if (numClass == Integer.class) { return compareSign(op, Integer.valueOf(s).compareTo((Integer) obj)); } else if (numClass == Short.class) { return compareSign(op, Short.valueOf(s).compareTo((Short) obj)); } else if (numClass == Byte.class) { return compareSign(op, Byte.valueOf(s).compareTo((Byte) obj)); } else if (numClass == Double.class) { return compareSign(op, Double.valueOf(s).compareTo((Double) obj)); } else if (numClass == Float.class) { return compareSign(op, Float.valueOf(s).compareTo((Float) obj)); } else if (numClass == Boolean.class) { if (op != EQ) int a = Boolean.valueOf(s).booleanValue() ? 1 : 0; int b = ((Boolean) obj).booleanValue() ? 1 : 0; return compareSign(op, a - b); } else if (numClass == BigInteger.class) { return compareSign(op, new BigInteger(s).compareTo((BigInteger) obj)); } else if (numClass == BigDecimal.class) { return compareSign(op, new BigDecimal(s).compareTo((BigDecimal) obj)); } else if (obj instanceof Collection< ? >) { for (Object x : (Collection< ? >) obj)
boolean patSubstr(String s, String pat) { if (s == null) return false; if (pat.length() == 0) return s.length() == 0; if (pat.charAt(0) == WILDCARD) { pat = pat.substring(1); for (;;) { if (patSubstr(s, pat)) return true; if (s.length() == 0) return false; s = s.substring(1); } } if (s.length() == 0 || s.charAt(0) != pat.charAt(0)) return false; return patSubstr(s.substring(1), pat.substring(1)); } }
public boolean matches(Map<String, String> map) throws Exception { return filter.matchMap(map); }
@Override public boolean match(Arguments arguments) throws Exception { Object attr = arguments.getProp(key); return compare(attr, op, value); } }
boolean compareString(String s1, int op, String s2) { switch (op) { case EQ : return patSubstr(s1, s2); case APPROX : return fixupString(s2).equals(fixupString(s1)); default : return compareSign(op, s2.compareTo(s1)); } }