All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.redhat.lightblue.metadata.Indexes Maven / Gradle / Ivy

There is a newer version: 2.18.0
Show newest version
/*
 Copyright 2013 Red Hat, Inc. and/or its affiliates.

 This file is part of lightblue.

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program.  If not, see .
 */
package com.redhat.lightblue.metadata;

import com.redhat.lightblue.util.Path;

import java.util.*;

/**
 *
 * @author nmalik
 */
public class Indexes extends MetadataObject {

    private final ArrayList indexes = new ArrayList<>();

    public Indexes() {
    }

    public Indexes(Index... ix) {
        for (Index x : ix) {
            indexes.add(x);
        }
    }

    public void add(Index x) {
        indexes.add(x);
    }

    public void setIndexes(Collection indexes) {
        this.indexes.clear();
        if (indexes != null) {
            this.indexes.addAll(indexes);
        }
    }

    @SuppressWarnings("unchecked")
    public List getIndexes() {
        return (List) indexes.clone();
    }

    public boolean isEmpty() {
        return indexes.isEmpty();
    }

    /**
     * Returns the indexes that can be used to evaluate a search criteria
     * containing the given fields
     *
     * @param fields List of fields for which a search will be conducted
     *
     * @return A map of index -> set where for each index, the mapped path
     * set gives the fields that can be searched efficiently using that index.
     */
    public Map> getUsefulIndexes(Collection fields) {
        Map> m = new HashMap<>();
        for (Index ix : indexes) {
            Set u = ix.getUsefulness(fields);
            if (!u.isEmpty()) {
                m.put(ix, u);
            }
        }
        return m;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy