001 //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/portal/standard/csw/configuration/CSWClientConfiguration.java $ 002 /*---------------- FILE HEADER ------------------------------------------ 003 004 This file is part of deegree. 005 Copyright (C) 2001-2008 by: 006 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 53177 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.portal.standard.csw.configuration; 045 046 import java.net.URL; 047 import java.util.ArrayList; 048 import java.util.Arrays; 049 import java.util.HashMap; 050 import java.util.Iterator; 051 import java.util.List; 052 import java.util.Map; 053 import java.util.Set; 054 055 import org.deegree.framework.util.StringTools; 056 import org.deegree.i18n.Messages; 057 import org.deegree.model.spatialschema.Envelope; 058 059 /** 060 * TODO class description 061 * 062 * @author <a href="mailto:mays@lat-lon.de">Judit Mays</a> 063 * @author last edited by: $Author: apoth $ 064 * 065 * @version $Revision: 9346 $, $Date: 2007-12-27 17:39:07 +0100 (Do, 27 Dez 2007) $ 066 */ 067 public class CSWClientConfiguration { 068 069 private int maxRecords = 10; 070 071 // private String briefXSL; 072 // private String summaryXSL; 073 // private String fullXSL; 074 075 /** 076 * key<String> = catalog name; value<String> = catalog address 077 */ 078 private Map<String, String> catalogToUrlMap; 079 080 /** 081 * key<String> = catalog name; 082 * value<List<String>> = list of supported protocols ( e.g. POST, SOAP ) 083 */ 084 private Map<String, List<String>> catalogToProtocolMap; 085 086 /** 087 * key<String> = catalog name; 088 * value<List<String>> = list of supported formats ( e.g. ISO19115, ISO19119, OGCCORE ) 089 */ 090 private Map<String, List<String>> catalogToFormatMap; 091 092 /** 093 * key<String> = profile name ( e.g. Profile.ISO19115, Profile.OGCCORE, etc. ); 094 * value<HashMap<String,String>> = key: e.g. brief, summary, full; value: e.g. metaList2html.xsl 095 */ 096 private Map<String, HashMap<String, String>> profilesToXsl; 097 098 private String srs; 099 100 private String xPathToDataIdentifier; 101 102 private String xPathToDataTitle; 103 104 private String xPathToDataTitleFull; 105 106 private String xPathToServiceIdentifier; 107 108 private String xPathToServiceTitle; 109 110 private String xPathToServiceOperatesOnTitle; 111 112 private String xPathToServiceAddress; 113 114 private String xPathToServiceType; 115 116 private String xPathToServiceTypeVersion; 117 118 private String[] namespaceBindings; 119 120 private String mapContextTemplatePath; 121 122 /* 123 * ignorig for now 124 * private HashMap thesauri = null; 125 * private Download download = null; 126 * private CCatalog[] ccatalog = null; 127 * private int maxInactiveInterval = 0; 128 * private String[] filterIDs = null; 129 * private int queryScope = 0; 130 * private GM_Envelope rootBoundingBox = null; 131 * private WMSClientConfiguration wmsCConfig = null; // seems to be not needed 132 */ 133 134 /** 135 * 136 */ 137 public CSWClientConfiguration() { 138 catalogToUrlMap = new HashMap<String, String>( 5 ); 139 profilesToXsl = new HashMap<String, HashMap<String, String>>( 5 ); 140 catalogToProtocolMap = new HashMap<String, List<String>>( 5 ); 141 catalogToFormatMap = new HashMap<String, List<String>>( 5 ); 142 } 143 144 /** 145 * @return Returns the names of all served catalogs 146 */ 147 public String[] getCatalogNames() { 148 Set<String> keySet = catalogToUrlMap.keySet(); 149 return keySet.toArray( new String[keySet.size()] ); 150 } 151 152 /** 153 * @return Returns the addresses of all served catalogs 154 */ 155 public String[] getCatalogServerAddresses() { 156 String[] addresses = new String[catalogToUrlMap.size()]; 157 Iterator it = catalogToUrlMap.values().iterator(); 158 for ( int i = 0; i < addresses.length && it.hasNext(); i++ ) { 159 addresses[i] = (String) it.next(); 160 } 161 return addresses; 162 } 163 164 /** 165 * @param catalogName 166 * @return Returns the address of the submitted catalog, or <tt>null</tt> if the map contains 167 * no mapping for this key. 168 */ 169 public String getCatalogServerAddress( String catalogName ) { 170 return catalogToUrlMap.get( catalogName ); 171 } 172 173 /** 174 * @return Returns the catalogToFormatMap. 175 */ 176 public Map getCatalogToFormatMap() { 177 return catalogToFormatMap; 178 } 179 180 /** 181 * @param catalogName 182 * The name of the catalog 183 * @return Returns the format types of a given catalog, e.g. "ISO19115" or "ISO19119". May be 184 * null, if the passed catalogName is unknown. 185 */ 186 public List getCatalogFormats( String catalogName ) { 187 return catalogToFormatMap.get( catalogName ); 188 } 189 190 /** 191 * @return Returns the catalogToProtocolMap. 192 */ 193 public Map getCatalogToProtocolMap() { 194 return catalogToProtocolMap; 195 } 196 197 /** 198 * @param catalogName 199 * The name of the catalog 200 * @return Returns the protocol type of a given catalog, e.g. "POST" or "SOAP". May be null, if 201 * the passed catalogName is unknown. 202 */ 203 public List getCatalogProtocols( String catalogName ) { 204 return catalogToProtocolMap.get( catalogName ); 205 } 206 207 /** 208 * @return Returns the catalogToUrlMap. 209 */ 210 public Map getCatalogToUrlMap() { 211 return catalogToUrlMap; 212 } 213 214 /** 215 * 216 * @return Returns a List of the service metadata catalogues. 217 */ 218 public List<String> getServiceMetadataCatalogs() { 219 List<String> serviceCatalogs = new ArrayList<String>( 10 ); 220 221 Iterator it = catalogToFormatMap.keySet().iterator(); 222 while ( it.hasNext() ) { 223 String catalog = (String) it.next(); 224 List formats = getCatalogFormats( catalog ); 225 String smf = ServiceMetadataFormats.getString( "CSWClientConfiguration.serviceMetadata" ); 226 String[] s = StringTools.toArray( smf, ",", true ); 227 List<String> list = new ArrayList<String>( Arrays.asList( s ) ); 228 for ( int i = 0; i < formats.size(); i++ ) { 229 if ( list.contains( formats.get( i ) ) ) { 230 serviceCatalogs.add( catalog ); 231 break; 232 } 233 } 234 } 235 236 return serviceCatalogs; 237 } 238 239 /** 240 * @return Returns an array of IDs that marks UDK objects that are valid for the catalog 241 */ 242 public String[] getFilterIDs() { 243 throw new UnsupportedOperationException( Messages.getMessage( "IGEO_STD_CSW_UNSUPPORTED_METHOD", 244 "getFilterIDs()" ) ); 245 } 246 247 /** 248 * @param catalogField 249 * @return Returns the catalog (iso-) elements that shall be targeted by a html form element 250 */ 251 public String[] getFormElements( String catalogField ) { 252 throw new UnsupportedOperationException( Messages.getMessage( "IGEO_STD_CSW_UNSUPPORTED_METHOD", 253 "getFormElements()" ) ); 254 } 255 256 /** 257 * @return Returns the mapContextTemplatePath. 258 */ 259 public String getMapContextTemplatePath() { 260 return mapContextTemplatePath; 261 } 262 263 /** 264 * @return Returns the maximum number records requested in a GetRecord request. 265 */ 266 public int getMaxRecords() { 267 return maxRecords; 268 } 269 270 /** 271 * @return Returns the maximun time a session will be alive after the last change in seconds 272 */ 273 public int getMaxSessionLifeTime() { 274 return 3600;// maxInactiveInterval; 275 } 276 277 /** 278 * @return Returns the namespace bindings as String array. 279 */ 280 public String[] getNamespaceBindings() { 281 return namespaceBindings; 282 } 283 284 /** 285 * @return Returns the profilesToXsl. 286 */ 287 public Map getProfilesToXsl() { 288 return profilesToXsl; 289 } 290 291 /** 292 * @param profileName 293 * @return Returns the profiles to xsl for the passed profile or <tt>null</tt> if the profile 294 * map contains no mapping for this key. 295 */ 296 public HashMap getProfileXSL( String profileName ) { 297 return this.profilesToXsl.get( profileName ); 298 } 299 300 /** 301 * @return Returns the names of possible protocol types 302 */ 303 public String[] getProtocolNames() { 304 Set<String> keySet = catalogToProtocolMap.keySet(); 305 return keySet.toArray( new String[keySet.size()] ); 306 } 307 308 /** 309 * @return Returns the maximum number (iterations) to cascaded catalogs that shall be performed. 310 */ 311 public int getQueryScope() { 312 return 9999;// queryScope; 313 } 314 315 /** 316 * @return Returns the bounding box of the maximum area that shall be searched for (meta)data. 317 * This parameter will be extracted from the searchmap parameter 318 */ 319 public Envelope getRootBoundingBox() { 320 throw new UnsupportedOperationException( Messages.getMessage( "IGEO_STD_CSW_UNSUPPORTED_METHOD", 321 "getRootBoundingBox()" ) ); 322 // return rootBoundingBox; 323 } 324 325 /** 326 * @return Returns the srs. 327 */ 328 public String getSrs() { 329 return srs; 330 } 331 332 /** 333 * @param thesaurus 334 * @return Returns the address of the submitted thesaurus 335 */ 336 public URL getThesaurusAddress( String thesaurus ) { 337 throw new UnsupportedOperationException( Messages.getMessage( "IGEO_STD_CSW_UNSUPPORTED_METHOD", 338 "getThesaurusAddress()" ) ); 339 // return (URL)thesauri.get( thesaurus ); 340 } 341 342 /** 343 * @return Returns the names of the thesauri known by the client 344 */ 345 public String[] getThesaurusNames() { 346 throw new UnsupportedOperationException( Messages.getMessage( "IGEO_STD_CSW_UNSUPPORTED_METHOD", 347 "getThesaurusNames()" ) ); 348 // String[] tn = new String[thesauri.size()]; 349 // return (String[])thesauri.keySet().toArray( tn ); 350 } 351 352 /** 353 * @return Returns the xPathToDataIdentifier. 354 */ 355 public String getXPathToDataIdentifier() { 356 return xPathToDataIdentifier; 357 } 358 359 /** 360 * @return Returns the xPathToDataTitle. 361 */ 362 public String getXPathToDataTitle() { 363 return xPathToDataTitle; 364 } 365 366 /** 367 * @return Returns the xPathToDataTitleFull. 368 */ 369 public String getXPathToDataTitleFull() { 370 return xPathToDataTitleFull; 371 } 372 373 /** 374 * @return Returns the xPathToServiceAddress. 375 */ 376 public String getXPathToServiceAddress() { 377 return xPathToServiceAddress; 378 } 379 380 /** 381 * @return Returns the xPathToServiceIdentifier. 382 */ 383 public String getXPathToServiceIdentifier() { 384 return xPathToServiceIdentifier; 385 } 386 387 /** 388 * @return Returns the xPathToServiceOperatesOnTitle. 389 */ 390 public String getXPathToServiceOperatesOnTitle() { 391 return xPathToServiceOperatesOnTitle; 392 } 393 394 /** 395 * @return Returns the xPathToServiceTitle. 396 */ 397 public String getXPathToServiceTitle() { 398 return xPathToServiceTitle; 399 } 400 401 /** 402 * @return Returns the xPathToServiceType. 403 */ 404 public String getXPathToServiceType() { 405 return xPathToServiceType; 406 } 407 408 /** 409 * @return Returns the xPathToServiceTypeVersion. 410 */ 411 public String getXPathToServiceTypeVersion() { 412 return xPathToServiceTypeVersion; 413 } 414 415 // ########################################################### 416 417 /** 418 * @param mapContextTemplatePath 419 * The mapContextTemplatePath to set. 420 */ 421 public void setMapContextTemplatePath( String mapContextTemplatePath ) { 422 this.mapContextTemplatePath = mapContextTemplatePath; 423 } 424 425 /** 426 * @param maxRecords 427 */ 428 public void setMaxRecords( int maxRecords ) { 429 this.maxRecords = maxRecords; 430 } 431 432 /** 433 * @param namespaceBindings 434 * The namespaceBindings to set. 435 */ 436 public void setNamespaceBindings( String[] namespaceBindings ) { 437 this.namespaceBindings = namespaceBindings; 438 } 439 440 /** 441 * @param srs 442 * The srs to set. 443 */ 444 public void setSrs( String srs ) { 445 this.srs = srs; 446 } 447 448 /** 449 * @param pathToIdentifier 450 * The xPath to the FileIdentifier to set. 451 */ 452 public void setXPathToDataIdentifier( String pathToIdentifier ) { 453 this.xPathToDataIdentifier = pathToIdentifier; 454 } 455 456 /** 457 * @param pathToDataTitle 458 * The xPathToDataTitle to set. 459 */ 460 public void setXPathToDataTitle( String pathToDataTitle ) { 461 xPathToDataTitle = pathToDataTitle; 462 } 463 464 /** 465 * @param pathToDataTitleFull 466 * The xPathToDataTitleFull to set. 467 */ 468 public void setXPathToDataTitleFull( String pathToDataTitleFull ) { 469 xPathToDataTitleFull = pathToDataTitleFull; 470 } 471 472 /** 473 * @param pathToServiceAddress 474 * The xPathToServiceAddress to set. 475 */ 476 public void setXPathToServiceAddress( String pathToServiceAddress ) { 477 xPathToServiceAddress = pathToServiceAddress; 478 } 479 480 /** 481 * @param pathToServiceIdentifier 482 * The xPathToServiceIdentifier to set. 483 */ 484 public void setXPathToServiceIdentifier( String pathToServiceIdentifier ) { 485 xPathToServiceIdentifier = pathToServiceIdentifier; 486 } 487 488 /** 489 * @param pathToServiceOperatesOnTitle 490 * The xPathToServiceOperatesOnTitle to set. 491 */ 492 public void setXPathToServiceOperatesOnTitle( String pathToServiceOperatesOnTitle ) { 493 xPathToServiceOperatesOnTitle = pathToServiceOperatesOnTitle; 494 } 495 496 /** 497 * @param pathToServiceTitle 498 * The xPathToServiceTitle to set. 499 */ 500 public void setXPathToServiceTitle( String pathToServiceTitle ) { 501 xPathToServiceTitle = pathToServiceTitle; 502 } 503 504 /** 505 * @param pathToServiceType 506 * The xPathToServiceType to set. 507 */ 508 public void setXPathToServiceType( String pathToServiceType ) { 509 xPathToServiceType = pathToServiceType; 510 } 511 512 /** 513 * @param pathToServiceTypeVersion 514 * The xPathToServiceTypeVersion to set. 515 */ 516 public void setXPathToServiceTypeVersion( String pathToServiceTypeVersion ) { 517 xPathToServiceTypeVersion = pathToServiceTypeVersion; 518 } 519 520 // ########################################################### 521 522 /** 523 * @param catalogueName 524 * @param formatList 525 */ 526 public void addCatalogueFormat( String catalogueName, List<String> formatList ) { 527 this.catalogToFormatMap.put( catalogueName, formatList ); 528 } 529 530 /** 531 * @param catalogueName 532 * @param protocolList 533 */ 534 public void addCatalogueProtocol( String catalogueName, List<String> protocolList ) { 535 this.catalogToProtocolMap.put( catalogueName, protocolList ); 536 } 537 538 /** 539 * @param catalogueName 540 * @param catURL 541 */ 542 public void addCatalogueURL( String catalogueName, String catURL ) { 543 this.catalogToUrlMap.put( catalogueName, catURL ); 544 } 545 546 /** 547 * @param profileName 548 * The name of the profile (ie: Profiles.ISO19115, Profiles.ISO19119, 549 * Profiles.OGCCORE) 550 * @param elementSetKeyToXSL 551 * HashMap containing the elementset name as key and the xsl file name as value. 552 */ 553 public void addProfileXSL( String profileName, HashMap<String, String> elementSetKeyToXSL ) { 554 this.profilesToXsl.put( profileName, elementSetKeyToXSL ); 555 } 556 557 }