001: /*
002: * GeoTools - OpenSource mapping toolkit
003: * http://geotools.org
004: * (C) 2004-2006, GeoTools Project Managment Committee (PMC)
005: * (C) 2004, Institut de Recherche pour le Développement
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation;
010: * version 2.1 of the License.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * This package contains documentation from OpenGIS specifications.
018: * OpenGIS consortium's work is fully acknowledged here.
019: */
020: package org.geotools.metadata.iso.quality;
021:
022: // OpenGIS dependencies
023: import java.util.Collection;
024:
025: import org.opengis.metadata.extent.Extent;
026: import org.opengis.metadata.quality.Scope;
027: import org.opengis.metadata.maintenance.ScopeCode;
028: import org.opengis.metadata.maintenance.ScopeDescription;
029:
030: // Geotools dependencies
031: import org.geotools.metadata.iso.MetadataEntity;
032:
033: /**
034: * Description of the data specified by the scope.
035: *
036: * @source $URL: http://svn.geotools.org/geotools/tags/2.4.1/modules/library/metadata/src/main/java/org/geotools/metadata/iso/quality/ScopeImpl.java $
037: * @version $Id: ScopeImpl.java 25189 2007-04-17 13:23:47Z desruisseaux $
038: * @author Martin Desruisseaux
039: * @author Touraïvane
040: *
041: * @since 2.1
042: */
043: public class ScopeImpl extends MetadataEntity implements Scope {
044: /**
045: * Serial number for interoperability with different versions.
046: */
047: private static final long serialVersionUID = -8021256328527422972L;
048:
049: /**
050: * Hierarchical level of the data specified by the scope.
051: */
052: private ScopeCode level;
053:
054: /**
055: * Information about the spatial, vertical and temporal extent of the data specified by the
056: * scope.
057: */
058: private Extent extent;
059:
060: /**
061: * Detailed description about the level of the data specified by the scope.
062: */
063: private Collection/*<ScopeDescription>*/levelDescription;
064:
065: /**
066: * Constructs an initially empty scope.
067: */
068: public ScopeImpl() {
069: }
070:
071: /**
072: * Constructs a metadata entity initialized with the values from the specified metadata.
073: *
074: * @since 2.4
075: */
076: public ScopeImpl(final Scope source) {
077: super (source);
078: }
079:
080: /**
081: * Creates a scope initialized to the given level.
082: */
083: public ScopeImpl(final ScopeCode level) {
084: setLevel(level);
085: }
086:
087: /**
088: * Hierarchical level of the data specified by the scope.
089: */
090: public ScopeCode getLevel() {
091: return level;
092: }
093:
094: /**
095: * Set the hierarchical level of the data specified by the scope.
096: */
097: public synchronized void setLevel(final ScopeCode newValue) {
098: checkWritePermission();
099: level = newValue;
100: }
101:
102: /**
103: * Returns detailed descriptions about the level of the data specified by the scope.
104: * Should be defined only if the {@linkplain #getLevel level} is not equal
105: * to {@link ScopeCode#DATASET DATASET} or {@link ScopeCode#SERIES SERIES}.
106: *
107: * @since 2.4
108: */
109: public synchronized Collection getLevelDescription() {
110: return levelDescription = nonNullCollection(levelDescription,
111: ScopeDescription.class);
112: }
113:
114: /**
115: * Set detailed descriptions about the level of the data specified by the scope.
116: *
117: * @since 2.4
118: */
119: public synchronized void setLevelDescription(
120: final Collection newValues) {
121: levelDescription = copyCollection(newValues, levelDescription,
122: ScopeDescription.class);
123: }
124:
125: /**
126: * Information about the spatial, vertical and temporal extent of the data specified by the
127: * scope.
128: */
129: public Extent getExtent() {
130: return extent;
131: }
132:
133: /**
134: * Set information about the spatial, vertical and temporal extent of the data specified
135: * by the scope.
136: */
137: public synchronized void setExtent(final Extent newValue) {
138: checkWritePermission();
139: extent = newValue;
140: }
141: }
|