/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.stanbol.entityhub.servicesapi.query; import java.util.Collection; import java.util.Set; import java.util.Map.Entry; /** * Simple query interface that allows to search for representations based on * fields and there values.<p> * Currently it is only possible to set a single constraint per field. Therefore * it is not possible to combine an range constraint with an language constraint. * e.g. searching for all labels form a-f in a list of given languages. * TODO: This shortcoming needs to be reevaluated. The intension was to ease the * implementation and the usage of this interface. * TODO: Implementation need to be able to throw UnsupportedConstraintExceptions * for specific combinations of Constraints e.g. Regex or case insensitive ... * TODO: Would be nice if an Implementation could also announce the list of supported * constraints (e.g. via Capability levels ...) * @author Rupert Westenthaler */ public interface FieldQuery extends Query,Iterable<Entry<String, Constraint>>,Cloneable{ /** * The value used as result for {@link Query#getQueryType()} of this query * type. */ String TYPE = "fieldQuery"; /** * Adds Fields to be selected by this Query * @param fields the fields to be selected by this query */ void addSelectedField(String field); /** * Adds Fields to be selected by this Query * @param fields the fields to be selected by this query */ void addSelectedFields(Collection<String> fields); /** * Removes Fields to be selected by this Query * @param fields the fields to be selected by this query */ void removeSelectedField(String fields); /** * Removes Fields to be selected by this Query * @param fields the fields to be selected by this query */ void removeSelectedFields(Collection<String> fields); /** * Unmodifiable set with all the fields to be selected by this query * @return the fields to be selected by this query */ Set<String> getSelectedFields(); /** * Sets/replaces the constraint for a field of the representation. If * <code>null</code> is parsed as constraint this method removes any existing * constraint for the field * @param field the field * @param constraint the Constraint */ void setConstraint(String field, Constraint constraint); /** * Removes the constraint for the parse field * @param field */ void removeConstraint(String field); /** * Checks if there is a constraint for the given field * @param field the field * @return the state */ boolean isConstrained(String field); /** * Getter for the Constraint of a field * @param field the field * @return the constraint or <code>null</code> if none is defined. */ Constraint getConstraint(String field); /** * Getter for the unmodifiable list of query elements for the given Path. Use * the add/remove constraint methods to change query elements for an path * @param path the path * @return the list of query elements for a path */ Set<Entry<String, Constraint>> getConstraints(); /** * Removes all constraints form the query */ void removeAllConstraints(); /** * Removes all selected fields */ void removeAllSelectedFields(); /** * Copies the state of this instance to the parsed one * @param <T> the {@link FieldQuery} implementation * @param copyTo the instance to copy the state * @return the parsed instance with the exact same state as this one */ <T extends FieldQuery> T copyTo(T copyTo); /** * Clones the FieldQuery * @return the clone */ FieldQuery clone(); }