/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2004-2008, Open Source Geospatial Foundation (OSGeo) * * 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; * version 2.1 of the License. * * 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. * * This package contains documentation from OpenGIS specifications. * OpenGIS consortium's work is fully acknowledged here. */ package org.geotools.metadata.iso; import java.util.Collection; import org.opengis.metadata.Datatype; import org.opengis.metadata.Obligation; import org.opengis.metadata.citation.ResponsibleParty; import org.opengis.metadata.ExtendedElementInformation; import org.opengis.util.InternationalString; /** * New metadata element, not found in ISO 19115, which is required to describe geographic data. * * * @source $URL$ * @version $Id$ * @author Martin Desruisseaux (IRD) * @author Touraïvane * * @since 2.1 */ public class ExtendedElementInformationImpl extends MetadataEntity implements ExtendedElementInformation { /** * Serial number for interoperability with different versions. */ private static final long serialVersionUID = -935396252908733907L; /** * Name of the extended metadata element. */ private String name; /** * Short form suitable for use in an implementation method such as XML or SGML. */ private String shortName; /** * Three digit code assigned to the extended element. * Non-null only if the {@linkplain #getDataType data type} * is {@linkplain Datatype#CODE_LIST_ELEMENT code list element}. */ private Integer domainCode; /** * Definition of the extended element. */ private InternationalString definition; /** * Obligation of the extended element. */ private Obligation obligation; /** * Condition under which the extended element is mandatory. * Non-null value only if the {@linkplain #getObligation obligation} * is {@linkplain Obligation#CONDITIONAL conditional}. */ private InternationalString condition; /** * Code which identifies the kind of value provided in the extended element. */ private Datatype dataType; /** * Maximum occurrence of the extended element. * Returns {@code null} if it doesn't apply, for example if the * {@linkplain #getDataType data type} is {@linkplain Datatype#ENUMERATION enumeration}, * {@linkplain Datatype#CODE_LIST code list} or {@linkplain Datatype#CODE_LIST_ELEMENT * code list element}. */ private Integer maximumOccurrence; /** * Valid values that can be assigned to the extended element. * Returns {@code null} if it doesn't apply, for example if the * {@linkplain #getDataType data type} is {@linkplain Datatype#ENUMERATION enumeration}, * {@linkplain Datatype#CODE_LIST code list} or {@linkplain Datatype#CODE_LIST_ELEMENT * code list element}. */ private InternationalString domainValue; /** * Name of the metadata entity(s) under which this extended metadata element may appear. * The name(s) may be standard metadata element(s) or other extended metadata element(s). */ private Collection<String> parentEntity; /** * Specifies how the extended element relates to other existing elements and entities. */ private InternationalString rule; /** * Reason for creating the extended element. */ private Collection<InternationalString> rationales; /** * Name of the person or organization creating the extended element. */ private Collection<ResponsibleParty> sources; /** * Construct an initially empty extended element information. */ public ExtendedElementInformationImpl() { } /** * Constructs a metadata entity initialized with the values from the specified metadata. * * @since 2.4 */ public ExtendedElementInformationImpl(final ExtendedElementInformation source) { super(source); } /** * Create an extended element information initialized to the given values. */ public ExtendedElementInformationImpl(final String name, final InternationalString definition, final InternationalString condition, final Datatype dataType, final Collection<String> parentEntity, final InternationalString rule, final Collection<? extends ResponsibleParty> sources) { setName (name); setDefinition (definition); setCondition (condition); setDataType (dataType); setParentEntity(parentEntity); setRule (rule); setSources (sources); } /** * Name of the extended metadata element. */ public String getName() { return name; } /** * Set the name of the extended metadata element. */ public synchronized void setName(final String newValue) { checkWritePermission(); name = newValue; } /** * Short form suitable for use in an implementation method such as XML or SGML. * NOTE: other methods may be used. * Returns {@code null} if the {@linkplain #getDataType data type} * is {@linkplain Datatype#CODE_LIST_ELEMENT code list element}. */ public String getShortName() { return shortName; } /** * Set a short form suitable for use in an implementation method such as XML or SGML. */ public synchronized void setShortName(final String newValue) { checkWritePermission(); shortName = newValue; } /** * Three digit code assigned to the extended element. * Returns a non-null value only if the {@linkplain #getDataType data type} * is {@linkplain Datatype#CODE_LIST_ELEMENT code list element}. */ public Integer getDomainCode() { return domainCode; } /** * Set a three digit code assigned to the extended element. */ public synchronized void setDomainCode(final Integer newValue) { checkWritePermission(); domainCode = newValue; } /** * Definition of the extended element. */ public InternationalString getDefinition() { return definition; } /** * Set the definition of the extended element. */ public synchronized void setDefinition(final InternationalString newValue) { checkWritePermission(); definition = newValue; } /** * Obligation of the extended element. */ public Obligation getObligation() { return obligation; } /** * Set the obligation of the extended element. */ public synchronized void setObligation(final Obligation newValue) { checkWritePermission(); obligation = newValue; } /** * Condition under which the extended element is mandatory. * Returns a non-null value only if the {@linkplain #getObligation obligation} * is {@linkplain Obligation#CONDITIONAL conditional}. */ public InternationalString getCondition() { return condition; } /** * Set the condition under which the extended element is mandatory. */ public synchronized void setCondition(final InternationalString newValue) { checkWritePermission(); condition = newValue; } /** * Code which identifies the kind of value provided in the extended element. */ public Datatype getDataType() { return dataType; } /** * Set the code which identifies the kind of value provided in the extended element. */ public synchronized void setDataType(final Datatype newValue) { checkWritePermission(); dataType = newValue; } /** * Maximum occurrence of the extended element. * Returns {@code null} if it doesn't apply, for example if the * {@linkplain #getDataType data type} is {@linkplain Datatype#ENUMERATION enumeration}, * {@linkplain Datatype#CODE_LIST code list} or {@linkplain Datatype#CODE_LIST_ELEMENT * code list element}. */ public Integer getMaximumOccurrence() { return maximumOccurrence; } /** * Set the maximum occurrence of the extended element. */ public synchronized void setMaximumOccurrence(final Integer newValue) { checkWritePermission(); maximumOccurrence = newValue; } /** * Valid values that can be assigned to the extended element. * Returns {@code null} if it doesn't apply, for example if the * {@linkplain #getDataType data type} is {@linkplain Datatype#ENUMERATION enumeration}, * {@linkplain Datatype#CODE_LIST code list} or {@linkplain Datatype#CODE_LIST_ELEMENT * code list element}. */ public InternationalString getDomainValue() { return domainValue; } /** * Set the valid values that can be assigned to the extended element. */ public synchronized void setDomainValue(final InternationalString newValue) { checkWritePermission(); domainValue = newValue; } /** * Name of the metadata entity(s) under which this extended metadata element may appear. * The name(s) may be standard metadata element(s) or other extended metadata element(s). */ public synchronized Collection<String> getParentEntity() { return parentEntity = nonNullCollection(parentEntity, String.class); } /** * Set the name of the metadata entity(s) under which this extended metadata element may appear. */ public synchronized void setParentEntity( final Collection<? extends String> newValues) { parentEntity = copyCollection(newValues, parentEntity, String.class); } /** * Specifies how the extended element relates to other existing elements and entities. */ public InternationalString getRule() { return rule; } /** * Set how the extended element relates to other existing elements and entities. */ public synchronized void setRule(final InternationalString newValue) { checkWritePermission(); rule = newValue; } /** * Reason for creating the extended element. */ public synchronized Collection<InternationalString> getRationales() { return (rationales = nonNullCollection(rationales, InternationalString.class)); } /** * Set the reason for creating the extended element. */ public synchronized void setRationales( final Collection<? extends InternationalString> newValues) { rationales = copyCollection(newValues, rationales, InternationalString.class); } /** * Name of the person or organization creating the extended element. */ public synchronized Collection<ResponsibleParty> getSources() { return sources = nonNullCollection(sources, ResponsibleParty.class); } /** * Set the name of the person or organization creating the extended element. */ public synchronized void setSources( final Collection<? extends ResponsibleParty> newValues) { sources = copyCollection(newValues, sources, ResponsibleParty.class); } /** * Sets the {@code xmlMarshalling} flag to {@code true}, since the marshalling * process is going to be done. * This method is automatically called by JAXB, when the marshalling begins. * * @param marshaller Not used in this implementation. */ /// private void beforeMarshal(Marshaller marshaller) { /// xmlMarshalling(true); /// } /** * Sets the {@code xmlMarshalling} flag to {@code false}, since the marshalling * process is finished. * This method is automatically called by JAXB, when the marshalling ends. * * @param marshaller Not used in this implementation */ /// private void afterMarshal(Marshaller marshaller) { /// xmlMarshalling(false); /// } }