public static SimpleFilter convert()

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