001 // $HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/ogcwebservices/wcs/configuration/DefaultExtension.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.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: 9345 $, $Date: 2007-12-27 17:22:25 +0100 (Do, 27 Dez 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 * constructor initializing an empty <tt>Extension</tt> 076 * 077 * @param type 078 * @throws UnknownCVExtensionException 079 */ 080 public DefaultExtension( String type ) throws UnknownCVExtensionException { 081 resolutions = new TreeSet<Resolution>(); 082 setType( type ); 083 } 084 085 /** 086 * initializing the <tt>Extension</tt> with the passed <tt>Resolution</tt>s 087 * 088 * @param type 089 * @param resolutions 090 * @param offset 091 * @param scaleFactor 092 * @throws UnknownCVExtensionException 093 */ 094 public DefaultExtension( String type, Resolution[] resolutions, double offset, double scaleFactor ) 095 throws UnknownCVExtensionException { 096 this( type ); 097 minScale = 9E99; 098 maxScale = 0; 099 for ( int i = 0; i < resolutions.length; i++ ) { 100 this.resolutions.add( resolutions[i] ); 101 if ( resolutions[i].getMinScale() < minScale ) { 102 minScale = resolutions[i].getMinScale(); 103 } 104 if ( resolutions[i].getMaxScale() > maxScale ) { 105 maxScale = resolutions[i].getMaxScale(); 106 } 107 } 108 this.offset = offset; 109 this.scaleFactor = scaleFactor; 110 } 111 112 /** 113 * returns the type of the coverage source that is described be an extension 114 * 115 * @return the type of the coverage source that is described be an extension 116 */ 117 public String getType() { 118 return type; 119 } 120 121 /** 122 * returns the type of the coverage source that is described be an extension. Valid types are: 123 * <ul> 124 * <li>shapeIndexed 125 * <li>nameIndexed 126 * <li>file 127 * </ul> 128 * This list may be extended in future versions of deegree 129 * 130 * @param type 131 * @throws UnknownCVExtensionException 132 */ 133 public void setType( String type ) 134 throws UnknownCVExtensionException { 135 if ( type == null 136 || ( !Extension.SHAPEINDEXED.equals( type ) && !Extension.NAMEINDEXED.equals( type ) 137 && !Extension.FILEBASED.equals( type ) && !Extension.ORACLEGEORASTER.equals( type ) && 138 !Extension.DATABASEINDEXED.equals( type ) ) ) { 139 throw new UnknownCVExtensionException( "unknown extension type: " + type ); 140 } 141 this.type = type; 142 } 143 144 /** 145 * returns the minimum scale of objects that are described by an <tt>Extension</tt> object 146 * 147 * @return the minimum scale of objects that are described by an <tt>Extension</tt> object 148 */ 149 public double getMinScale() { 150 return minScale; 151 } 152 153 /** 154 * returns the offset of the data. 0 will be returned if no offset is defined. Data first must 155 * be divided by the scale factor (@see #getScaleFactor()) before sustracting the offset 156 * 157 * @return 158 */ 159 public double getOffset() { 160 return offset; 161 } 162 163 /** 164 * returns the scale factor of the data. If no scale factor is defined 1 will be returned. Data 165 * first must be divided by the scale factor (@see #getScaleFactor()) before sustracting the 166 * offset 167 * 168 * @return 169 */ 170 public double getScaleFactor() { 171 return scaleFactor; 172 } 173 174 /** 175 * returns the maximum scale of objects that are described by an <tt>Extension</tt> object 176 * 177 * @return the maximum scale of objects that are described by an <tt>Extension</tt> object 178 */ 179 public double getMaxScale() { 180 return maxScale; 181 } 182 183 /** 184 * returns all <tt>Resolution</tt>s . If no <tt>Resolution</tt> can be found for the passed 185 * scale an empty array will be returned. 186 * 187 * @param scale 188 * scale the returned resolutions must fit 189 * 190 * @return <tt>Resolution</tt>s matching the passed scale 191 */ 192 public Resolution[] getResolutions() { 193 return resolutions.toArray( new Resolution[resolutions.size()] ); 194 } 195 196 /** 197 * returns the <tt>Resolution</tt>s matching the passed scale. If no <tt>Resolution</tt> 198 * can be found for the passed scale an empty array will be returned. 199 * 200 * @param scale 201 * scale the returned resolutions must fit 202 * 203 * @return <tt>Resolution</tt>s matching the passed scale 204 */ 205 public Resolution[] getResolutions( double scale ) { 206 if ( scale < minScale || scale > maxScale ) { 207 return new Resolution[0]; 208 } 209 List<Resolution> list = new ArrayList<Resolution>(); 210 Iterator iterator = resolutions.iterator(); 211 while ( iterator.hasNext() ) { 212 Resolution res = (Resolution) iterator.next(); 213 if ( scale >= res.getMinScale() && scale <= res.getMaxScale() ) { 214 list.add( res ); 215 } 216 } 217 return list.toArray( new Resolution[list.size()] ); 218 } 219 220 /** 221 * @param resolution 222 */ 223 public void addResolution( Resolution resolution ) { 224 resolutions.add( resolution ); 225 } 226 227 }