/*
* Copyright 2010, Andrew M Gibson
*
* www.andygibson.net
*
* This file is part of DataValve.
*
* DataValve is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* DataValve 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 Lesser General Public License for more details.
*
*
* You should have received a copy of the GNU Lesser General Public License
* along with DataValve. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.fluttercode.datavalve.provider;
import java.util.List;
import java.util.Map;
import org.fluttercode.datavalve.DataProvider;
import org.fluttercode.datavalve.ParameterResolver;
/**
* Extends the {@link DataProvider} interface to include parameterization of
* the dataset. This introduces methods that allows you to define parameters and
* also attach {@link ParameterResolver} instances to extend the parameter
* resolution beyond key-value pairs.
*
* @author Andy Gibson
*
* @param <T> The type of objects returned from this query
*/
public interface ParameterizedDataProvider<T> extends DataProvider<T> {
/**
* Returns the map holding local parameters that are by default used in
* parameter resolution.
*
* @return The map holding local parameters
*/
public abstract Map<String, Object> getParameters();
/**
* Set the parameter map for this dataset.
*
* @param parameters
* The parameter map to assign to this dataset
*/
public abstract void setParameters(Map<String, Object> parameters);
/**
* Helper method to add a new parameter value to the dataset.
*
* @param name
* Name of new parameter
* @param value
* Value of new parameter
*/
public abstract void addParameter(String name, Object value);
/**
* Adds a new parameter resolver to the dataset. This resolver will be
* called if the resolvers preceeding it are unable to resolve the
* expression.
*
* @param resolver
* the new {@link ParameterResolver} to add to this dataset.
*/
public void addParameterResolver(ParameterResolver resolver);
/**
* Resolves the parameter defined by <code>name</code>. The name may include
* various decorations to indicate what type of expression it is (i.e.
* #{name} for EL expressions. This method should use the
* {@link ParameterResolver} instances attached to this dataset to resolve
* the parameter name to a value. This method should return the first
* non-null value that is return from an attached resolver.
*
* @param name
* of the parameter to resolve
* @return the value of this parameter (null if not found)
*/
public Object resolveParameter(String name);
public List<ParameterResolver> getParameterResolvers();
public void setParameterResolvers(List<ParameterResolver> parameterResolvers);
}