    001    //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.4_testing/src/org/deegree/owscommon/com110/OWSDomainType110.java $
    002    /*----------------------------------------------------------------------------
    003     This file is part of deegree, http://deegree.org/
    004     Copyright (C) 2001-2009 by:
    005       Department of Geography, University of Bonn
    006     and
    007       lat/lon GmbH
    008
    009     This library is free software; you can redistribute it and/or modify it under
    010     the terms of the GNU Lesser General Public License as published by the Free
    011     Software Foundation; either version 2.1 of the License, or (at your option)
    012     any later version.
    013     This library is distributed in the hope that it will be useful, but WITHOUT
    014     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    015     FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
    016     details.
    017     You should have received a copy of the GNU Lesser General Public License
    018     along with this library; if not, write to the Free Software Foundation, Inc.,
    019     59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    020
    021     Contact information:
    022
    023     lat/lon GmbH
    024     Aennchenstr. 19, 53177 Bonn
    025     Germany
    026     http://lat-lon.de/
    027
    028     Department of Geography, University of Bonn
    029     Prof. Dr. Klaus Greve
    030     Postfach 1147, 53001 Bonn
    031     Germany
    032     http://www.geographie.uni-bonn.de/deegree/
    033
    034     e-mail: info@deegree.org
    035    ----------------------------------------------------------------------------*/
    036
    037    package org.deegree.owscommon.com110;
    038
    039    import org.deegree.datatypes.values.TypedLiteral;
    040    import org.deegree.owscommon.OWSMetadata;
    041
    042    /**
    043     * FIXME should be renamed.
    044     *
    045     * @author <a href="mailto:mays@lat-lon.de">Judit Mays</a>
    046     * @author last edited by: $Author: mschneider $
    047     *
    048     * @version 2.0, $Revision: 18195 $, $Date: 2009-06-18 17:55:39 +0200 (Do, 18. Jun 2009) $
    049     *
    050     * @since 2.0
    051     */
    052    public class OWSDomainType110 {
    053
    054        /*
    055         * FIXME When this class OWSDomainType110 gets integrated properly, the class OWSMetadata should
    056         * be provided with an identifier (private String name), to enable identification of the kind of
    057         * OWSMetadata. With this handle, the implemented String 'measurementType' becomes obsolete,
    058         * because its content could be moved into the String 'name' within the OWSMetadata object.
    059         */
    060
    061        public static final String REFERENCE_SYSTEM = "REFERENCE_SYSTEM";
    062
    063        public static final String UOM = "UOM";
    064
    065        // the choice of one of these four elements is mandatory:
    066        private OWSAllowedValues allowedValues;
    067
    068        private boolean anyValue;
    069
    070        private boolean noValues;
    071
    072        private OWSMetadata valuesListReference;
    073
    074        // these elements are optional:
    075        private TypedLiteral defaultValue;
    076
    077        private OWSMetadata meaning;
    078
    079        private OWSMetadata owsDataType;
    080
    081        private String measurementType; // choice between REFERENCE_SYSTEM and UOM
    082
    083        private OWSMetadata measurement;
    084
    085        private OWSMetadata[] metadata;
    086
    087        // mandatory attribute:
    088        public String name;
    089
    090        /**
    091         * Creates a new <code>DomainType110</code> object. This is the basic constructor, which is
    092         * called from any other public constructor.
    093         *
    094         * @param allowedValues
    095         * @param anyValue
    096         * @param noValues
    097         * @param valuesListReference
    098         * @param defaultValue
    099         * @param meaning
    100         * @param dataType
    101         * @param measurementType
    102         * @param measurement
    103         * @param metadata
    104         * @param name
    105         */
    106        private OWSDomainType110( OWSAllowedValues allowedValues, boolean anyValue, boolean noValues,
    107                                  OWSMetadata valuesListReference, String defaultValue, OWSMetadata meaning,
    108                                  OWSMetadata dataType, String measurementType, OWSMetadata measurement,
    109                                  OWSMetadata[] metadata, String name ) {
    110
    111            if ( anyValue == true && noValues == true ) {
    112                throw new IllegalArgumentException( "anyValue and noValues cannot both be true." );
    113            }
    114
    115            if ( measurement != null ) {
    116
    117                if ( measurementType == null ) {
    118                    throw new NullPointerException( "measurementType cannot be null." );
    119                }
    120                if ( REFERENCE_SYSTEM.equals( measurementType ) || UOM.equals( measurementType ) ) {
    121                    this.measurementType = measurementType;
    122                } else {
    123                    throw new IllegalArgumentException( "measurementType must be either " + getClass().getName()
    124                                                        + ".REFERENCE_SYSTEM or " + getClass().getName() + ".UOM" );
    125                }
    126                this.measurement = measurement;
    127            }
    128
    129            this.allowedValues = allowedValues;
    130            this.anyValue = anyValue;
    131            this.noValues = noValues;
    132            this.valuesListReference = valuesListReference;
    133            setDefaultValue( defaultValue );
    134            this.meaning = meaning;
    135            this.owsDataType = dataType;
    136            if ( metadata == null ) {
    137                this.metadata = new OWSMetadata[0];
    138            } else {
    139                this.metadata = metadata;
    140            }
    141            this.name = name;
    142
    143        }
    144
    145        /**
    146         * Creates a new <code>DomainType110</code> object.
    147         *
    148         * Use this constructor to create the <code>DomainType110</code> object with an
    149         * <code>OWSAllowedValues</code> object.
    150         *
    151         * @param allowedValues
    152         * @param defaultValue
    153         * @param meaning
    154         * @param dataType
    155         * @param measurementType
    156         *            Must be either "REFERENCE_SYSTEM" or "UOM".
    157         * @param measurement
    158         * @param metadata
    159         * @param name
    160         *            mandatory attribute
    161         */
    162        public OWSDomainType110( OWSAllowedValues allowedValues, String defaultValue, OWSMetadata meaning,
    163                                 OWSMetadata dataType, String measurementType, OWSMetadata measurement,
    164                                 OWSMetadata[] metadata, String name ) {
    165
    166            this( allowedValues, false, false, null, defaultValue, meaning, dataType, measurementType, measurement,
    167                  metadata, name );
    168        }
    169
    170        /**
    171         * Creates a new <code>DomainType110</code> object.
    172         *
    173         * Use this constructor to create the <code>DomainType110</code> object when
    174         * <code>anyValue</code> OR <code>noValues</code> is true.
    175         *
    176         * @param anyValue
    177         *            Cannot be true if noValues is true.
    178         * @param noValues
    179         *            Cannot be true if anyValue is true.
    180         * @param defaultValue
    181         * @param meaning
    182         * @param dataType
    183         * @param measurementType
    184         *            Must be either "REFERENCE_SYSTEM" or "UOM".
    185         * @param measurement
    186         * @param metadata
    187         * @param name
    188         *            mandatory attribute
    189         */
    190        public OWSDomainType110( boolean anyValue, boolean noValues, String defaultValue, OWSMetadata meaning,
    191                                 OWSMetadata dataType, String measurementType, OWSMetadata measurement,
    192                                 OWSMetadata[] metadata, String name ) {
    193
    194            this( null, anyValue, noValues, null, defaultValue, meaning, dataType, measurementType, measurement, metadata,
    195                  name );
    196        }
    197
    198        /**
    199         * Creates a new <code>DomainType110</code> object.
    200         *
    201         * Use this constructor to create the <code>DomainType110</code> object with an
    202         * <code>OWSMetadata</code> object of valuesListReference.
    203         *
    204         * @param valuesListReference
    205         * @param defaultValue
    206         * @param meaning
    207         * @param dataType
    208         * @param measurementType
    209         *            Must be either "REFERENCE_SYSTEM" or "UOM".
    210         * @param measurement
    211         * @param metadata
    212         * @param name
    213         *            mandatory attribute
    214         */
    215        public OWSDomainType110( OWSMetadata valuesListReference, String defaultValue, OWSMetadata meaning,
    216                                 OWSMetadata dataType, String measurementType, OWSMetadata measurement,
    217                                 OWSMetadata[] metadata, String name ) {
    218
    219            this( null, false, false, valuesListReference, defaultValue, meaning, dataType, measurementType, measurement,
    220                  metadata, name );
    221        }
    222
    223        /**
    224         * @return Returns the allowedValues.
    225         */
    226        public OWSAllowedValues getAllowedValues() {
    227            return allowedValues;
    228        }
    229
    230        /**
    231         * @return Returns the anyValue.
    232         */
    233        public boolean isAnyValue() {
    234            return anyValue;
    235        }
    236
    237        /**
    238         * @return Returns the noValues.
    239         */
    240        public boolean hasNoValues() {
    241            return noValues;
    242        }
    243
    244        /**
    245         * @return Returns the valuesListReference.
    246         */
    247        public OWSMetadata getValuesListReference() {
    248            return valuesListReference;
    249        }
    250
    251        /**
    252         * @return Returns the defaultValue.
    253         */
    254        public TypedLiteral getDefaultValue() {
    255            return defaultValue;
    256        }
    257
    258        /**
    259         * @return Returns the meaning.
    260         */
    261        public OWSMetadata getMeaning() {
    262            return meaning;
    263        }
    264
    265        /**
    266         * @return Returns the owsDataType.
    267         */
    268        public OWSMetadata getOwsDataType() {
    269            return owsDataType;
    270        }
    271
    272        /**
    273         * Returns the measurementType, or null if the measurement object is null.
    274         *
    275         * @return Returns the measurementType.
    276         */
    277        public String getMeasurementType() {
    278            return measurementType;
    279        }
    280
    281        /**
    282         * @return Returns the measurement.
    283         */
    284        public OWSMetadata getMeasurement() {
    285            return measurement;
    286        }
    287
    288        /**
    289         * Returns an array of OWSMetadata objects. If metadata is null, an array of size 0 is returned.
    290         *
    291         * @return Returns the metadata.
    292         */
    293        public OWSMetadata[] getMetadata() {
    294            return metadata;
    295        }
    296
    297        /**
    298         * @return Returns the name.
    299         */
    300        public String getName() {
    301            return name;
    302        }
    303
    304        /**
    305         * @param defaultValue
    306         *            The defaultValue to set.
    307         */
    308        public void setDefaultValue( TypedLiteral defaultValue ) {
    309            this.defaultValue = defaultValue;
    310        }
    311
    312        /**
    313         * Sets the defaultValue to a new TypedLiteral with the given value.
    314         *
    315         * @param defaultURI
    316         */
    317        private void setDefaultValue( String value ) {
    318            this.defaultValue = new TypedLiteral( value, null );
    319        }
    320
    321    }