001 // $HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/tags/2.1/src/org/deegree/ogcwebservices/wcs/configuration/DefaultExtension.java $
002 /*---------------- FILE HEADER ------------------------------------------
003
004 This file is part of deegree.
005 Copyright (C) 2001-2006 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.Iterator;
048 import java.util.List;
049 import java.util.TreeSet;
050
051 /**
052 * Default implementation of WCS CoverageDescription for handling informations about coverage data
053 * backend.
054 *
055 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
056 * @author last edited by: $Author: apoth $
057 *
058 * @version $Revision: 6582 $, $Date: 2007-04-11 11:44:24 +0200 (Mi, 11 Apr 2007) $
059 */
060 public class DefaultExtension implements Extension {
061
062 protected TreeSet<Resolution> resolutions = null;
063
064 protected double minScale = 0;
065
066 protected double maxScale = 9E99;
067
068 private String type = null;
069
070 private double offset = 0;
071
072 private double scaleFactor = 1;
073
074
075 /**
076 * constructor initializing an empty <tt>Extension</tt>
077 *
078 * @param type
079 * @throws UnknownCVExtensionException
080 */
081 public DefaultExtension( String type ) throws UnknownCVExtensionException {
082 resolutions = new TreeSet<Resolution>();
083 setType( type );
084 }
085
086 /**
087 * initializing the <tt>Extension</tt> with the passed <tt>Resolution</tt>s
088 *
089 * @param type
090 * @param resolutions
091 * @param offset
092 * @param scaleFactor
093 * @throws UnknownCVExtensionException
094 */
095 public DefaultExtension( String type, Resolution[] resolutions, double offset,
096 double scaleFactor )
097 throws UnknownCVExtensionException {
098 this( type );
099 minScale = 9E99;
100 maxScale = 0;
101 for ( int i = 0; i < resolutions.length; i++ ) {
102 this.resolutions.add( resolutions[i] );
103 if ( resolutions[i].getMinScale() < minScale ) {
104 minScale = resolutions[i].getMinScale();
105 }
106 if ( resolutions[i].getMaxScale() > maxScale ) {
107 maxScale = resolutions[i].getMaxScale();
108 }
109 }
110 this.offset = offset;
111 this.scaleFactor = scaleFactor;
112 }
113
114 /**
115 * returns the type of the coverage source that is described be an extension
116 *
117 * @return the type of the coverage source that is described be an extension
118 */
119 public String getType() {
120 return type;
121 }
122
123 /**
124 * returns the type of the coverage source that is described be an extension. Valid types are:
125 * <ul>
126 * <li>shapeIndexed
127 * <li>nameIndexed
128 * <li>file
129 * </ul>
130 * This list may be extended in future versions of deegree
131 *
132 * @param type
133 * @throws UnknownCVExtensionException
134 */
135 public void setType( String type )
136 throws UnknownCVExtensionException {
137 if ( type == null
138 || ( !type.equals( "shapeIndexed" ) && !type.equals( "nameIndexed" )
139 && !type.equals( "file" ) && !type.equals( "OracleGeoRaster" ) ) ) {
140 throw new UnknownCVExtensionException( "unknown extension type: " + type );
141 }
142 this.type = type;
143 }
144
145 /**
146 * returns the minimum scale of objects that are described by an <tt>Extension</tt> object
147 *
148 * @return the minimum scale of objects that are described by an <tt>Extension</tt> object
149 */
150 public double getMinScale() {
151 return minScale;
152 }
153
154 /**
155 * returns the offset of the data. 0 will be returned if no offset is
156 * defined. Data first must be divided by the scale factor (@see #getScaleFactor())
157 * before sustracting the offset
158 *
159 * @return
160 */
161 public double getOffset() {
162 return offset;
163 }
164
165 /**
166 * returns the scale factor of the data. If no scale factor is defined
167 * 1 will be returned. Data first must be divided by the scale factor
168 * (@see #getScaleFactor()) before sustracting the offset
169 * @return
170 */
171 public double getScaleFactor() {
172 return scaleFactor;
173 }
174
175 /**
176 * returns the maximum scale of objects that are described by an <tt>Extension</tt> object
177 *
178 * @return the maximum scale of objects that are described by an <tt>Extension</tt> object
179 */
180 public double getMaxScale() {
181 return maxScale;
182 }
183
184 /**
185 * returns all <tt>Resolution</tt>s . If no <tt>Resolution</tt> can be found for the passed
186 * scale an empty array will be returned.
187 *
188 * @param scale
189 * scale the returned resolutions must fit
190 *
191 * @return <tt>Resolution</tt>s matching the passed scale
192 */
193 public Resolution[] getResolutions() {
194 return resolutions.toArray( new Resolution[resolutions.size()] );
195 }
196
197 /**
198 * returns the <tt>Resolution</tt>s matching the passed scale. If no <tt>Resolution</tt>
199 * can be found for the passed scale an empty array will be returned.
200 *
201 * @param scale
202 * scale the returned resolutions must fit
203 *
204 * @return <tt>Resolution</tt>s matching the passed scale
205 */
206 public Resolution[] getResolutions( double scale ) {
207 if ( scale < minScale || scale > maxScale ) {
208 return new Resolution[0];
209 }
210 List<Resolution> list = new ArrayList<Resolution>();
211 Iterator iterator = resolutions.iterator();
212 while ( iterator.hasNext() ) {
213 Resolution res = (Resolution) iterator.next();
214 if ( scale >= res.getMinScale() && scale <= res.getMaxScale() ) {
215 list.add( res );
216 }
217 }
218 return list.toArray( new Resolution[list.size()] );
219 }
220
221 /**
222 * @param resolution
223 */
224 public void addResolution( Resolution resolution ) {
225 resolutions.add( resolution );
226 }
227
228 }