001 // $HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/ogcwebservices/wcs/configuration/AbstractResolution.java $
002 /*---------------- FILE HEADER ------------------------------------------
003
004 This file is part of deegree.
005 Copyright (C) 2001-2008 by:
006 EXSE, Department of Geography, University of Bonn
007 http://www.giub.uni-bonn.de/deegree/
008 lat/lon GmbH
009 http://www.lat-lon.de
010
011 This library is free software; you can redistribute it and/or
012 modify it under the terms of the GNU Lesser General Public
013 License as published by the Free Software Foundation; either
014 version 2.1 of the License, or (at your option) any later version.
015
016 This library is distributed in the hope that it will be useful,
017 but WITHOUT ANY WARRANTY; without even the implied warranty of
018 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019 Lesser General Public License for more details.
020
021 You should have received a copy of the GNU Lesser General Public
022 License along with this library; if not, write to the Free Software
023 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024
025 Contact:
026
027 Andreas Poth
028 lat/lon GmbH
029 Aennchenstr. 19
030 53115 Bonn
031 Germany
032 E-Mail: poth@lat-lon.de
033
034 Prof. Dr. Klaus Greve
035 Department of Geography
036 University of Bonn
037 Meckenheimer Allee 166
038 53115 Bonn
039 Germany
040 E-Mail: greve@giub.uni-bonn.de
041
042
043 ---------------------------------------------------------------------------*/
044 package org.deegree.ogcwebservices.wcs.configuration;
045
046 import java.util.ArrayList;
047 import java.util.Arrays;
048 import java.util.List;
049
050 /**
051 * A concrete Resolution must implement accessor methods for either Shape, Directory or File (or
052 * additional descriptions available in future) which will be used is no Range is persent.
053 *
054 * @version $Revision: 9345 $
055 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
056 * @author last edited by: $Author: apoth $
057 *
058 * @version 1.0. $Revision: 9345 $, $Date: 2007-12-27 17:22:25 +0100 (Do, 27 Dez 2007) $
059 *
060 * @since 2.0
061 */
062 abstract class AbstractResolution implements Resolution {
063
064 private double minScale = 0;
065
066 private double maxScale = 9E99;
067
068 private List<Range> ranges = null;
069
070 /**
071 * @param minScale
072 * @param maxScale
073 * @param range
074 */
075 public AbstractResolution( double minScale, double maxScale, Range[] range ) throws IllegalArgumentException {
076 if ( minScale >= maxScale ) {
077 throw new IllegalArgumentException( "minScale must be > maxScale" );
078 }
079 this.minScale = minScale;
080 this.maxScale = maxScale;
081 setRange( range );
082 }
083
084 /**
085 * @see #getMaxScale()
086 * @param maxScale
087 * The maxScale to set.
088 *
089 */
090 public void setMaxScale( double maxScale )
091 throws IllegalArgumentException {
092 if ( minScale >= maxScale ) {
093 throw new IllegalArgumentException( "minScale must be > maxScale" );
094 }
095 this.maxScale = maxScale;
096 }
097
098 /**
099 * @see #getMinScale()
100 * @param minScale
101 * The minScale to set.
102 *
103 */
104 public void setMinScale( double minScale )
105 throws IllegalArgumentException {
106 if ( minScale >= maxScale ) {
107 throw new IllegalArgumentException( "minScale must be > maxScale" );
108 }
109 this.minScale = minScale;
110 }
111
112 /**
113 * @see #getRanges()
114 * @param ranges
115 * The range to set.
116 */
117 public void setRange( Range[] ranges ) {
118 this.ranges = new ArrayList<Range>( Arrays.asList( ranges ) );
119 }
120
121 /**
122 * @see #getRanges()
123 * @param range
124 */
125 public void addRange( Range range ) {
126 ranges.add( range );
127 }
128
129 /**
130 * removes a range from a <tt>Resolution</tt>
131 *
132 * @param range
133 */
134 public void removeRange( Range range ) {
135 ranges.remove( range );
136 }
137
138 /**
139 * returns the minimum scale (inculding) the <tt>Resolution</tt> is valid for.
140 *
141 * @return the minimum scale (inculding) the <tt>Resolution</tt> is valid for.
142 *
143 */
144 public double getMinScale() {
145 return minScale;
146 }
147
148 /**
149 * returns the maximum scale (exculding) the <tt>Resolution</tt> is valid for.
150 *
151 * @return the maximum scale (exculding) the <tt>Resolution</tt> is valid for.
152 *
153 */
154 public double getMaxScale() {
155 return maxScale;
156 }
157
158 /**
159 * returns the <tt>Range</tt>s included with in resolution. A range is similar to those
160 * defined in OGC WCS 1.0.0 specification for CoverageOffering. But it is reduced to the
161 * elements required for identifying the coverages resources assigned to a specific combination
162 * of parameter (values).
163 * <p>
164 * The return value maybe is <tt>null</tt> if the <tt>Resolution</tt> just describes data
165 * from one parameter dimension (missing Range in CoverageOffering). In this case there is
166 * direct access to the data source describing element(s).
167 *
168 * @return the <tt>Range</tt>s included with in resolution.
169 *
170 */
171 public Range[] getRanges() {
172 return ranges.toArray( new Range[ranges.size()] );
173 }
174
175 /**
176 * minScale is used for comparing. If this.minScale < o.getMinScale -1 will be ruturned; vice
177 * versa 1 will be returned. only is this.minScale == o.minScale 0 will be returned.
178 *
179 * @see java.lang.Comparable#compareTo(java.lang.Object)
180 *
181 * @param o
182 * @return integer
183 *
184 */
185 public int compareTo( Object o )
186 throws IllegalArgumentException {
187 if ( !( o instanceof Resolution ) ) {
188 throw new IllegalArgumentException( "o must be an instance of Resolution" );
189 }
190 Resolution res = (Resolution) o;
191 if ( getMinScale() < res.getMinScale() ) {
192 return -1;
193 }
194 if ( getMinScale() > res.getMinScale() ) {
195 return 1;
196 }
197 return 0;
198 }
199
200 }