public static SimpleFilter convert()

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;
    }