in subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/capabilityset/SimpleFilter.java [563:656]
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<SimpleFilter>();
for (Entry<String, Object> entry : attrs.entrySet())
{
if (entry.getValue() instanceof VersionRange)
{
VersionRange vr = (VersionRange) entry.getValue();
if (vr.getLeftType() == VersionRange.RIGHT_OPEN)
{
filters.add(
new SimpleFilter(
entry.getKey(),
vr.getLeft().toString(),
SimpleFilter.GTE));
}
else
{
SimpleFilter not =
new SimpleFilter(null, new ArrayList(), SimpleFilter.NOT);
((List) not.getValue()).add(
new SimpleFilter(
entry.getKey(),
vr.getLeft().toString(),
SimpleFilter.LTE));
filters.add(not);
}
if (vr.getRight() != null)
{
if (vr.getRightType() == VersionRange.RIGHT_OPEN)
{
filters.add(
new SimpleFilter(
entry.getKey(),
vr.getRight().toString(),
SimpleFilter.LTE));
}
else
{
SimpleFilter not =
new SimpleFilter(null, new ArrayList(), SimpleFilter.NOT);
((List) not.getValue()).add(
new SimpleFilter(
entry.getKey(),
vr.getRight().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;
}