blob: 6fa4dd5c59820ad5ed448d478b55a6a62b9ed248 [file] [log] [blame]
/*
* 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.pirk.schema.query;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.pirk.schema.query.filter.DataFilter;
/**
* Class to hold a query schema
*
*/
public class QuerySchema implements Serializable
{
private static final long serialVersionUID = 1L;
// This schema's name.
private final String schemaName;
// Name of the data schema associated with this query schema.
private final String dataSchemaName;
// Name of element in the dataSchema to be used as the selector.
private final String selectorName;
// Element names from the data schema to include in the response.
// Order matters for packing/unpacking.
private final List<String> elementNames = new ArrayList<>();
// Name of class to use in data filtering.
private final String filterTypeName;
// Instance of the filterTypeName.
private final DataFilter filter;
// Set of data schema element names on which to apply filtering.
private final Set<String> filteredElementNames = new HashSet<>();
// Total number of bits to be returned for each data element hit.
private final int dataElementSize;
// Additional fields by key,value
private final HashMap<String,String> additionalFields = new HashMap<>();
QuerySchema(String schemaName, String dataSchemaName, String selectorName, String filterTypeName, DataFilter filter, int dataElementSize)
{
this.schemaName = schemaName;
this.dataSchemaName = dataSchemaName;
this.selectorName = selectorName;
this.filterTypeName = filterTypeName;
this.filter = filter;
this.dataElementSize = dataElementSize;
}
/**
* Returns the name of this schema.
*
* @return The schema name.
*/
public String getSchemaName()
{
return schemaName;
}
/**
* Returns the name of the data schema.
* <p>
* This query is designed to be run over data described by this data schema.
*
* @return The data schema name.
*/
public String getDataSchemaName()
{
return dataSchemaName;
}
/**
* Returns the element names to include in the response.
* <p>
* The element names are defined by the data schema associated with this query.
*
* @return The ordered list of query element names.
*/
public List<String> getElementNames()
{
return elementNames;
}
/**
* Returns the element name used as the selector.
* <p>
* The element names are defined by the data schema associated with this query.
*
* @return The element names being selected.
*/
public String getSelectorName()
{
return selectorName;
}
public int getDataElementSize()
{
return dataElementSize;
}
/**
* Returns the name of the filter class for this query.
*
* The filter class name is the fully qualified name of a Java class that implements the {@link DataFilter} interface.
*
* @return The type name of the query filter, or <code>null</code> if there is no filter defined.
*/
public String getFilterTypeName()
{
return filterTypeName;
}
/**
* Returns the set of element names on which to apply the filter.
*
* @return The possibly empty set of data schema element names.
*/
public Set<String> getFilteredElementNames()
{
return filteredElementNames;
}
/**
* Returns the data element filter for this query.
* <p>
* The data filter is applied to the {@link QuerySchema#getFilteredElementNames()} data elements.
*
* @return The data filter, or <code>null</code> if no filter has been specified for this query.
*/
public DataFilter getFilter()
{
return filter;
}
/**
* Returns the map of additional field keys and values
* <p>
* Note that additional fields are optional, thus the map may be empty
*
* @return The additionalFields HashMap
*/
public HashMap<String,String> getAdditionalFields()
{
return additionalFields;
}
/**
* Returns the value from the additionalFields mapping corresponding to the given key
*
* @param key
* @return value from the additionalFields mapping corresponding to the given key
*/
public String getAdditionalFieldValue(String key)
{
return additionalFields.get(key);
}
}