001 //$HeadURL: svn+ssh://jwilden@svn.wald.intevation.org/deegree/base/branches/2.5_testing/src/org/deegree/portal/context/MapParameter.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 package org.deegree.portal.context; 037 038 import java.util.ArrayList; 039 040 /** 041 * encapsulates the part of the general web map context extension parameters that targets the map operation and feature 042 * info format options. These are informations about the possible values and the current selected value for each of the 043 * encapsulated parameters: <p/> feature info formats<p/> pan factors (% of the map size) <p/> zoom factors (% of the 044 * map factors) <p/> minimum displayable scale (WMS scale definition) <p/> maximum displayable scale (WMS scale 045 * definition) <p/> 046 * 047 * @version $Revision: 18195 $ 048 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a> 049 */ 050 public class MapParameter { 051 private ArrayList<Format> offeredInfoFormats = new ArrayList<Format>(); 052 053 private ArrayList<MapOperationFactor> offeredPanFactors = new ArrayList<MapOperationFactor>(); 054 055 private ArrayList<MapOperationFactor> offeredZoomFactors = new ArrayList<MapOperationFactor>(); 056 057 private double maxScale = 0; 058 059 private double minScale = 0; 060 061 /** 062 * Creates a new MapParameter object. 063 * 064 * @param offeredInfoFormats 065 * feature info formats 066 * @param offeredPanFactors 067 * pan factors (% of the map size) 068 * @param offeredZoomFactors 069 * pan factors (% of the map size) 070 * @param minScale 071 * minimum displayable scale (WMS scale definition) 072 * @param maxScale 073 * maximum displayable scale (WMS scale definition) 074 */ 075 public MapParameter( Format[] offeredInfoFormats, MapOperationFactor[] offeredPanFactors, 076 MapOperationFactor[] offeredZoomFactors, double minScale, double maxScale ) { 077 setOfferedInfoFormats( offeredInfoFormats ); 078 setOfferedPanFactors( offeredPanFactors ); 079 setOfferedZoomFactors( offeredZoomFactors ); 080 setMinScale( minScale ); 081 setMaxScale( maxScale ); 082 } 083 084 /** 085 * sets the offered pan factors (% of the map size) for a map context 086 * 087 * @param panFactors 088 */ 089 public void setOfferedPanFactors( MapOperationFactor[] panFactors ) { 090 offeredPanFactors.clear(); 091 092 if ( panFactors != null ) { 093 for ( int i = 0; i < panFactors.length; i++ ) { 094 addPanFactor( panFactors[i] ); 095 } 096 } 097 } 098 099 /** 100 * add a pan factor to a map context 101 * 102 * @param panFactor 103 */ 104 public void addPanFactor( MapOperationFactor panFactor ) { 105 offeredPanFactors.add( panFactor ); 106 } 107 108 /** 109 * returns the list of pan factors offered by this map context 110 * 111 * @return list of pan factors offered by this map context 112 */ 113 public MapOperationFactor[] getOfferedPanFactors() { 114 MapOperationFactor[] ms = new MapOperationFactor[0]; 115 116 if ( offeredPanFactors.size() == 0 ) { 117 ms = null; 118 } else { 119 ms = new MapOperationFactor[offeredPanFactors.size()]; 120 ms = offeredPanFactors.toArray( ms ); 121 } 122 123 return ms; 124 } 125 126 /** 127 * returns the pan factor that is marked as selected. If no pan factor is marked, the first pan factor will be 128 * returned. 129 * 130 * @return pan factor that is marked as selected 131 */ 132 public MapOperationFactor getSelectedPanFactor() { 133 MapOperationFactor ms = offeredPanFactors.get( 0 ); 134 135 for ( int i = 0; i < offeredPanFactors.size(); i++ ) { 136 MapOperationFactor tmp = offeredPanFactors.get( i ); 137 if ( tmp.isSelected() ) { 138 ms = tmp; 139 break; 140 } 141 } 142 143 return ms; 144 } 145 146 /** 147 * removes a pan factor from a context 148 * 149 * @param panFactor 150 * @throws ContextException 151 * if the map operation factior is selected. 152 */ 153 public void removePanFactor( MapOperationFactor panFactor ) 154 throws ContextException { 155 for ( int i = 0; i < offeredPanFactors.size(); i++ ) { 156 MapOperationFactor mof = offeredPanFactors.get( i ); 157 if ( mof.getFactor() == panFactor.getFactor() ) { 158 if ( mof.isSelected() ) { 159 throw new ContextException( "The PanFactor can't be removed " 160 + "from the context because it is the " + "current one" ); 161 } 162 } 163 } 164 } 165 166 /** 167 * sets the offered zoom factors (% of the map size) for a map context 168 * 169 * @param zoomFactors 170 */ 171 public void setOfferedZoomFactors( MapOperationFactor[] zoomFactors ) { 172 offeredZoomFactors.clear(); 173 174 if ( zoomFactors != null ) { 175 for ( int i = 0; i < zoomFactors.length; i++ ) { 176 addZoomFactor( zoomFactors[i] ); 177 } 178 } 179 } 180 181 /** 182 * adds a zoom factor to a map context 183 * 184 * @param zoomFactor 185 */ 186 public void addZoomFactor( MapOperationFactor zoomFactor ) { 187 offeredZoomFactors.add( zoomFactor ); 188 } 189 190 /** 191 * returns the list of zoom factors offered by the map context 192 * 193 * @return list of zoom factors offered by the map context 194 */ 195 public MapOperationFactor[] getOfferedZoomFactors() { 196 MapOperationFactor[] ms = new MapOperationFactor[0]; 197 198 if ( offeredZoomFactors.size() == 0 ) { 199 ms = null; 200 } else { 201 ms = new MapOperationFactor[offeredZoomFactors.size()]; 202 ms = offeredZoomFactors.toArray( ms ); 203 } 204 205 return ms; 206 } 207 208 /** 209 * returns the zoom factor that is marked as selected. If no zoom factor is marked, the first zoom factor will be 210 * returned. 211 * 212 * @return zoom factor that is marked as selected 213 */ 214 public MapOperationFactor getSelectedZoomFactor() { 215 MapOperationFactor ms = offeredZoomFactors.get( 0 ); 216 217 for ( int i = 0; i < offeredPanFactors.size(); i++ ) { 218 MapOperationFactor tmp = offeredZoomFactors.get( i ); 219 220 if ( tmp.isSelected() ) { 221 ms = tmp; 222 break; 223 } 224 } 225 226 return ms; 227 } 228 229 /** 230 * removes a zomm factor from a map context 231 * 232 * @param zoomFactor 233 * @throws ContextException 234 * if the map operation factor is selected. 235 */ 236 public void removeZoomFactor( MapOperationFactor zoomFactor ) 237 throws ContextException { 238 for ( int i = 0; i < offeredZoomFactors.size(); i++ ) { 239 MapOperationFactor mof = offeredZoomFactors.get( i ); 240 if ( mof.getFactor() == zoomFactor.getFactor() ) { 241 if ( mof.isSelected() ) { 242 throw new ContextException( "The ZoomFactor can't be removed " 243 + "from the context because it is the current one" ); 244 } 245 } 246 } 247 } 248 249 /** 250 * sets the info formats offered by a map context 251 * 252 * @param infoFormats 253 */ 254 public void setOfferedInfoFormats( Format[] infoFormats ) { 255 offeredInfoFormats.clear(); 256 257 if ( infoFormats != null ) { 258 for ( int i = 0; i < infoFormats.length; i++ ) { 259 addInfoFormat( infoFormats[i] ); 260 } 261 } 262 } 263 264 /** 265 * adds an info format to a map context 266 * 267 * @param infoFormat 268 */ 269 public void addInfoFormat( Format infoFormat ) { 270 offeredInfoFormats.add( infoFormat ); 271 } 272 273 /** 274 * returns the list of map formats offered by the map context 275 * 276 * @return list of map formats offered by the map context 277 */ 278 public Format[] getOfferedInfoFormats() { 279 Format[] ms = new Format[0]; 280 281 if ( offeredInfoFormats.size() == 0 ) { 282 ms = null; 283 } else { 284 ms = new Format[offeredInfoFormats.size()]; 285 ms = offeredInfoFormats.toArray( ms ); 286 } 287 288 return ms; 289 } 290 291 /** 292 * returns the info format that is marked as selected. If no info format is marked, the first info format will be 293 * returned. 294 * 295 * @return info format that is marked as selected 296 */ 297 public Format getSelectedInfoFormat() { 298 Format ms = offeredInfoFormats.get( 0 ); 299 for ( int i = 0; i < offeredInfoFormats.size(); i++ ) { 300 Format tmp = offeredInfoFormats.get( i ); 301 302 if ( tmp.isCurrent() ) { 303 ms = tmp; 304 break; 305 } 306 } 307 308 return ms; 309 } 310 311 /** 312 * removes an info format from a map context 313 * 314 * @param format 315 * @throws ContextException 316 * the format is the current format. 317 */ 318 public void removeInfoFormat( Format format ) 319 throws ContextException { 320 for ( int i = 0; i < offeredInfoFormats.size(); i++ ) { 321 Format frmt = offeredInfoFormats.get( i ); 322 if ( frmt.getName() == format.getName() ) { 323 if ( format.isCurrent() ) { 324 throw new ContextException( "The Info Format can't be removed " 325 + "from the context because it is the " + "current one" ); 326 } 327 } 328 } 329 } 330 331 /** 332 * returns the minimum map scale as defined at the OGC WMS specs that is offered by the map context 333 * 334 * @return minimum scale 335 */ 336 public double getMinScale() { 337 return minScale; 338 } 339 340 /** 341 * sets the minimum map scale as defined at the OGC WMS specs that is offered by the map context 342 * 343 * @param minScale 344 */ 345 public void setMinScale( double minScale ) { 346 this.minScale = minScale; 347 } 348 349 /** 350 * returns the maximum map scale as defined at the OGC WMS specs that is offered by the map context 351 * 352 * @return maximum scale 353 */ 354 public double getMaxScale() { 355 return maxScale; 356 } 357 358 /** 359 * sets the maximum map scale as defined at the OGC WMS specs that is offered by the map context 360 * 361 * @param maxScale 362 */ 363 public void setMaxScale( double maxScale ) { 364 this.maxScale = maxScale; 365 } 366 367 /** 368 * 369 * 370 * @return XML coded 371 */ 372 public String exportAsXML() { 373 return null; 374 } 375 }