in repository/service/src/main/java/org/apache/karaf/cave/repository/service/bundlerepository/SimpleFilter.java [493:572]
public static SimpleFilter convert(Map<String, Object> attrs) {
// Rather than building a filter string to be parsed into a SimpleFilter,
// we will just create the parsed SimpleFilter directly.
List<SimpleFilter> filters = new ArrayList<>(attrs.size());
for (Entry<String, Object> entry : attrs.entrySet()) {
if (entry.getValue() instanceof VersionRange) {
VersionRange vr = (VersionRange) entry.getValue();
if (!vr.isOpenFloor()) {
filters.add(
new SimpleFilter(
entry.getKey(),
vr.getFloor().toString(),
SimpleFilter.GTE)
);
} else {
SimpleFilter not =
new SimpleFilter(null, new ArrayList(), SimpleFilter.NOT);
((List<Object>) not.getValue()).add(
new SimpleFilter(
entry.getKey(),
vr.getFloor().toString(),
SimpleFilter.LTE)
);
filters.add(not);
}
if (vr.getCeiling() != null) {
if (!vr.isOpenCeiling()) {
filters.add(
new SimpleFilter(
entry.getKey(),
vr.getCeiling().toString(),
SimpleFilter.LTE)
);
} else if (!vr.getCeiling().equals(VersionRange.INFINITE_VERSION)) {
SimpleFilter not =
new SimpleFilter(null, new ArrayList(), SimpleFilter.NOT);
((List<Object>) not.getValue()).add(
new SimpleFilter(
entry.getKey(),
vr.getCeiling().toString(),
SimpleFilter.GTE)
);
filters.add(not);
}
}
} else {
List<String> values = SimpleFilter.parseSubstring(entry.getValue().toString());
if (values.size() > 1) {
filters.add(
new SimpleFilter(
entry.getKey(),
values,
SimpleFilter.SUBSTRING)
);
} else {
filters.add(
new SimpleFilter(
entry.getKey(),
values.get(0),
SimpleFilter.EQ)
);
}
}
}
SimpleFilter sf = null;
if (filters.size() == 1) {
sf = filters.get(0);
} else if (attrs.size() > 1) {
sf = new SimpleFilter(null, filters, SimpleFilter.AND);
} else if (filters.isEmpty()) {
sf = new SimpleFilter(null, null, SimpleFilter.MATCH_ALL);
}
return sf;
}