/* 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 <http://www.gnu.org/licenses/>. */ package com.redhat.lightblue.metadata; import com.redhat.lightblue.util.Path; import java.util.*; /** * * @author nmalik */ public class Indexes extends MetadataObject { private final ArrayList<Index> 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<Index> indexes) { this.indexes.clear(); if (indexes != null) { this.indexes.addAll(indexes); } } @SuppressWarnings("unchecked") public List<Index> getIndexes() { return (List<Index>) 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<Path> where for each index, the mapped path * set gives the fields that can be searched efficiently using that index. */ public Map<Index, Set<Path>> getUsefulIndexes(Collection<Path> fields) { Map<Index, Set<Path>> m = new HashMap<>(); for (Index ix : indexes) { Set<Path> u = ix.getUsefulness(fields); if (!u.isEmpty()) { m.put(ix, u); } } return m; } }