/*
 *    GeoTools - OpenSource mapping toolkit
 *    http://geotools.org
 *    (C) 2004-2006, Geotools Project Managment Committee (PMC)
 *    
 *    This library 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 2.1 of the License, or (at your option) any later version.
 *
 *    This library 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.
 */
package org.geotools.data.wms.request;

import java.util.Set;

import org.geotools.data.ows.Layer;
import org.geotools.data.ows.Request;



/**
 * Information required for a GetFeatureInfo request.
 
 * <p>
 * Q: queryableLayers is a Set - is this true? Or is order important Q:
 * infoFormats - what does this do? Do these match up with querableLayers? Or
 * is it a list of formats our client is willing to understand?
 * </p>
 *
 * @author Richard Gould, Refractions Research
 * @source $URL: http://svn.geotools.org/geotools/tags/2.4.1/modules/plugin/wms/src/main/java/org/geotools/data/wms/request/GetFeatureInfoRequest.java $
 */
public interface GetFeatureInfoRequest extends Request{
    /** Represents the INFO_FORMAT parameter */
    public static final String INFO_FORMAT = "INFO_FORMAT"; //$NON-NLS-1$
    /** Represents the FEATURE_COUNT parameter */
    public static final String FEATURE_COUNT = "FEATURE_COUNT"; //$NON-NLS-1$
    /** Represents the X parameter */
    public static final String QUERY_X = "X"; //$NON-NLS-1$
    /** Represents the Y parameter */
    public static final String QUERY_Y = "Y"; //$NON-NLS-1$
    /** Represents the QUERY_LAYERS parameter */
    public static final String QUERY_LAYERS = "QUERY_LAYERS"; //$NON-NLS-1$

    
    /**
     * An unordered set of type Layer. These are the layers that the 
     * GetFeatureInfo request will be performed on. 
     *
     * @param layers A Set of type Layer, each to be queried
     */
    public void setQueryLayers(Set layers);
    
    /**
     * Add a Layer to the set of layers to be queried in the request.
     * This Layer must have queryable set to true.
     * 
     * @param layer a queryable Layer
     */
    public void addQueryLayer(Layer layer);
    
    /**
     * Sets the INFO_FORMAT parameter, which specifies the format of the 
     * GetFeatureInfoResponse. Valid values are available in getInfoFormats()
     * 
     * @param infoFormat a value from getInfoFormats()
     */
    public void setInfoFormat(String infoFormat);
    
    /**
     * @param featureCount the maximum number of features to return in the response
     */
    public void setFeatureCount(String featureCount);
    
    /**
     * @param featureCount the maximum number of features to return in the response
     */
    public void setFeatureCount(int featureCount);
    
    /**
     * The point on the image (in pixels) to be queried. The image is 
     * represented by the GetMapRequest passed into the constructor.
     * 
     * @param x the x point, in pixels
     * @param y the y point, in pixels
     */
    public void setQueryPoint(int x, int y);
}
