All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opengis.parameter.ParameterValueGroup Maven / Gradle / Ivy

There is a newer version: 24.2-oss84-1
Show newest version
/*
 *    GeoTools - The Open Source Java GIS Toolkit
 *    http://geotools.org
 *
 *    (C) 2011, Open Source Geospatial Foundation (OSGeo)
 *    (C) 2003-2005, Open Geospatial Consortium Inc.
 *
 *    All Rights Reserved. http://www.opengis.org/legal/
 */
package org.opengis.parameter;

import static org.opengis.annotation.Obligation.*;
import static org.opengis.annotation.Specification.*;

import java.util.List;
import org.opengis.annotation.Extension;
import org.opengis.annotation.UML;
import org.opengis.metadata.Identifier;

/**
 * A group of related parameter values. The same group can be repeated more than once in an
 * {@linkplain org.opengis.referencing.operation.Operation operation} or higher level {@code
 * ParameterValueGroup}, if those instances contain different values of one or more {@link
 * ParameterValue}s which suitably distinquish among those groups.
 *
 * @version Abstract
 *     specification 2.0
 * @author Martin Desruisseaux (IRD)
 * @author Jody Garnett (Refractions Research)
 * @since GeoAPI 1.0
 * @see ParameterDescriptorGroup
 * @see ParameterValue
 */
@UML(identifier = "CC_ParameterValueGroup", specification = ISO_19111)
public interface ParameterValueGroup extends GeneralParameterValue {
    /**
     * The abstract definition of this group of parameters.
     *
     * @departure The ISO name was {@code "valuesOfGroup"}. GeoAPI uses {@code "descriptor"} instead
     *     in order to override the {@linkplain GeneralParameterValue#getDescriptor generic method
     *     provided in the parent interface}. The "descriptor" name make more apparent that this
     *     method returns an abstract definition of parameters - not their actual values - and is
     *     consistent with usage in other Java libraries like {@link
     *     javax.media.jai.ParameterList#getParameterListDescriptor ParameterList}.
     */
    @UML(identifier = "valuesOfGroup", obligation = MANDATORY, specification = ISO_19111)
    ParameterDescriptorGroup getDescriptor();

    /**
     * Returns the values in this group. The returned list may or may not be unmodifiable; this is
     * implementation-dependent. However, if some aspects of this list are modifiable, then any
     * modification shall be reflected back into this {@code ParameterValueGroup}. More
     * specifically:
     *
     * 
    *
  • *

    If the list supports the {@link List#add(Object) add} operation, then it should * ensure that the added {@linkplain GeneralParameterValue general parameter value} is * valid and can be added to this group. An {@link InvalidParameterCardinalityException} * (or any other appropriate exception) shall be thrown if it is not the case. *

  • *

    The list may also supports the {@link List#remove(Object) remove} operation as a way * to remove parameter created by the {@link #parameter} method. *

* * @return The values in this group. */ @UML(identifier = "includesValue", obligation = MANDATORY, specification = ISO_19111) List values(); /** * Returns the value in this group for the specified {@linkplain Identifier#getCode identifier * code}. If no {@linkplain ParameterValue parameter value} is found but a {@linkplain * ParameterDescriptor parameter descriptor} is found (which may occurs if the parameter is * optional, i.e. {@linkplain ParameterDescriptor#getMinimumOccurs * minimumOccurs} == 0), then a {@linkplain ParameterValue parameter value} is * automatically created and initialized to its {@linkplain ParameterDescriptor#getDefaultValue * default value} (if any). * *

This convenience method provides a way to get and set parameter values by name. For * example the following idiom fetches a floating point value for the {@code "false_easting"} * parameter: * *

* * * double value = parameter("false_easting").{@linkplain ParameterValue#doubleValue() doubleValue()}; * * *
* * This method do not search recursively in subgroups. This is because more than one subgroup * may exist for the same {@linkplain ParameterDescriptorGroup descriptor}. The user must * {@linkplain #groups query all subgroups} and select explicitly the appropriate one to use. * * @param name The case insensitive {@linkplain Identifier#getCode identifier code} of the * parameter to search for. * @return The parameter value for the given identifier code. * @throws ParameterNotFoundException if there is no parameter value for the given identifier * code. */ @Extension ParameterValue parameter(String name) throws ParameterNotFoundException; /** * Returns all subgroups with the specified name. This method do not create new groups. If the * requested group is optional (i.e. * {@linkplain ParameterDescriptor#getMinimumOccurs minimumOccurs} == 0) and no value * were defined previously, then this method returns an empty set. * * @param name The case insensitive {@linkplain Identifier#getCode identifier code} of the * parameter group to search for. * @return The set of all parameter group for the given identifier code. * @throws ParameterNotFoundException if no {@linkplain ParameterDescriptorGroup descriptor} was * found for the given name. */ @Extension List groups(String name) throws ParameterNotFoundException; /** * Creates a new group of the specified name. The specified name must be the {@linkplain * Identifier#getCode identifier code} of a {@linkplain ParameterDescriptorGroup descriptor * group}. * * @param name The case insensitive {@linkplain Identifier#getCode identifier code} of the * parameter group to create. * @return A newly created parameter group for the given identifier code. * @throws ParameterNotFoundException if no {@linkplain ParameterDescriptorGroup descriptor} was * found for the given name. * @throws IllegalStateException if this parameter group already contains the {@linkplain * ParameterDescriptorGroup#getMaximumOccurs maximum number of occurences} of subgroups of * the given name. */ @Extension ParameterValueGroup addGroup(String name) throws ParameterNotFoundException, IllegalStateException; /** * Returns a copy of this group of parameter values. Included parameter values and subgroups are * cloned recursively. * * @return A copy of this group of parameter values. */ ParameterValueGroup clone(); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy