001 //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/ogcwebservices/wmps/XMLFactory.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 package org.deegree.ogcwebservices.wmps; 044 045 import java.io.IOException; 046 import java.net.URL; 047 import java.util.Date; 048 049 import org.deegree.datatypes.xlink.SimpleLink; 050 import org.deegree.framework.log.ILogger; 051 import org.deegree.framework.log.LoggerFactory; 052 import org.deegree.framework.xml.NamespaceContext; 053 import org.deegree.framework.xml.XMLParsingException; 054 import org.deegree.framework.xml.XMLTools; 055 import org.deegree.model.metadata.iso19115.Address; 056 import org.deegree.model.metadata.iso19115.Keywords; 057 import org.deegree.model.metadata.iso19115.Phone; 058 import org.deegree.model.spatialschema.Envelope; 059 import org.deegree.ogcbase.CommonNamespaces; 060 import org.deegree.ogcwebservices.getcapabilities.DCPType; 061 import org.deegree.ogcwebservices.getcapabilities.HTTP; 062 import org.deegree.ogcwebservices.getcapabilities.MetadataURL; 063 import org.deegree.ogcwebservices.getcapabilities.Operation; 064 import org.deegree.ogcwebservices.getcapabilities.ServiceIdentification; 065 import org.deegree.ogcwebservices.getcapabilities.ServiceProvider; 066 import org.deegree.ogcwebservices.wmps.capabilities.WMPSCapabilities; 067 import org.deegree.ogcwebservices.wmps.capabilities.WMPSCapabilitiesDocument; 068 import org.deegree.ogcwebservices.wmps.capabilities.WMPSOperationsMetadata; 069 import org.deegree.ogcwebservices.wmps.operation.PrintMapResponse; 070 import org.deegree.ogcwebservices.wmps.operation.PrintMapResponseDocument; 071 import org.deegree.ogcwebservices.wms.capabilities.Attribution; 072 import org.deegree.ogcwebservices.wms.capabilities.AuthorityURL; 073 import org.deegree.ogcwebservices.wms.capabilities.DataURL; 074 import org.deegree.ogcwebservices.wms.capabilities.Dimension; 075 import org.deegree.ogcwebservices.wms.capabilities.Extent; 076 import org.deegree.ogcwebservices.wms.capabilities.FeatureListURL; 077 import org.deegree.ogcwebservices.wms.capabilities.Identifier; 078 import org.deegree.ogcwebservices.wms.capabilities.Layer; 079 import org.deegree.ogcwebservices.wms.capabilities.LayerBoundingBox; 080 import org.deegree.ogcwebservices.wms.capabilities.LegendURL; 081 import org.deegree.ogcwebservices.wms.capabilities.LogoURL; 082 import org.deegree.ogcwebservices.wms.capabilities.ScaleHint; 083 import org.deegree.ogcwebservices.wms.capabilities.Style; 084 import org.deegree.ogcwebservices.wms.capabilities.StyleSheetURL; 085 import org.deegree.ogcwebservices.wms.capabilities.StyleURL; 086 import org.deegree.ogcwebservices.wms.capabilities.UserDefinedSymbolization; 087 import org.deegree.owscommon.OWSDomainType; 088 import org.w3c.dom.Element; 089 import org.w3c.dom.Node; 090 import org.xml.sax.SAXException; 091 092 /** 093 * Helper class to create WMPS responses. 094 * 095 * @author <a href="mailto:deshmukh@lat-lon.de">Anup Deshmukh</a> 096 * @version 2.0 097 * 098 */ 099 public class XMLFactory extends org.deegree.owscommon.XMLFactory { 100 101 private static final ILogger LOG = LoggerFactory.getLogger( XMLFactory.class ); 102 103 private static NamespaceContext nsContext = CommonNamespaces.getNamespaceContext(); 104 105 /** 106 * Exports a <code>WMPSCapabilities</code> instance to a <code>WMPSCapabilitiesDocument</code>. 107 * 108 * @param capabilities 109 * @return DOM representation of the <code>WMPSCapabilities</code> 110 * @throws IOException 111 * if XML template could not be loaded 112 */ 113 public static WMPSCapabilitiesDocument export( WMPSCapabilities capabilities ) 114 throws IOException { 115 116 WMPSCapabilitiesDocument capabilitiesDocument = new WMPSCapabilitiesDocument(); 117 try { 118 capabilitiesDocument.createEmptyDocument(); 119 Element root = capabilitiesDocument.getRootElement(); 120 root.setAttribute( "version", capabilities.getVersion() ); 121 122 appendService( root, capabilities.getServiceIdentification(), capabilities.getServiceProvider() ); 123 124 String xPath = "./Capability"; 125 appendUserDefinedSymbolization( (Element) XMLTools.getNode( root, xPath, nsContext ), 126 capabilities.getUserDefinedSymbolization() ); 127 128 appendCapabilityRequests( root, (WMPSOperationsMetadata) capabilities.getOperationMetadata() ); 129 130 appendCapabilityLayer( (Element) XMLTools.getNode( root, "./Capability", nsContext ), 131 capabilities.getLayer() ); 132 133 } catch ( SAXException e ) { 134 LOG.logError( e.getMessage(), e ); 135 } catch ( XMLParsingException e ) { 136 LOG.logError( e.getMessage(), e ); 137 } 138 139 return capabilitiesDocument; 140 } 141 142 /** 143 * Append User defined symbolization. 144 * 145 * @param root 146 * @param uds 147 */ 148 protected static void appendUserDefinedSymbolization( Element root, UserDefinedSymbolization uds ) { 149 150 Element elem = XMLTools.appendElement( root, null, "UserDefinedSymbolization" ); 151 elem.setAttribute( "SupportSLD", Boolean.toString( uds.isSldSupported() ) ); 152 elem.setAttribute( "UserLayer", Boolean.toString( uds.isUserLayerSupported() ) ); 153 elem.setAttribute( "UserStyle", Boolean.toString( uds.isUserStyleSupported() ) ); 154 elem.setAttribute( "RemoteWFS", Boolean.toString( uds.isRemoteWFSSupported() ) ); 155 156 } 157 158 /** 159 * Append service element 160 * 161 * @param root 162 * @param identification 163 * @param provider 164 * @throws XMLParsingException 165 */ 166 protected static void appendService( Element root, ServiceIdentification identification, ServiceProvider provider ) 167 throws XMLParsingException { 168 169 root = (Element) XMLTools.getRequiredNode( root, "./Service", nsContext ); 170 171 Node node = XMLTools.getRequiredNode( root, "./Name", nsContext ); 172 XMLTools.setNodeValue( (Element) node, identification.getTitle() ); 173 174 node = XMLTools.getRequiredNode( root, "./Title", nsContext ); 175 XMLTools.setNodeValue( (Element) node, identification.getTitle() ); 176 177 String serviceAbstract = identification.getAbstract(); 178 if ( serviceAbstract != null ) { 179 XMLTools.appendElement( root, null, "Abstract", serviceAbstract ); 180 } 181 182 Keywords[] keywords = identification.getKeywords(); 183 if ( keywords.length > 0 ) { 184 String[] kw = keywords[0].getKeywords(); 185 Element kwl = XMLTools.appendElement( root, null, "KeywordList" ); 186 for ( int i = 0; i < kw.length; i++ ) { 187 XMLTools.appendElement( kwl, null, "Keyword", kw[i] ); 188 } 189 } 190 191 node = XMLTools.getRequiredNode( root, "./OnlineResource", nsContext ); 192 SimpleLink sLink = provider.getProviderSite(); 193 ( (Element) node ).setAttribute( "xlink:href", sLink.getHref().toASCIIString() ); 194 195 appendContactInformation( root, provider ); 196 197 if ( identification.getFees() != null ) { 198 XMLTools.appendElement( root, null, "Fees", identification.getFees() ); 199 } else { 200 XMLTools.appendElement( root, null, "Fees", "none" ); 201 } 202 203 if ( identification.getAccessConstraints().length > 0 ) { 204 XMLTools.appendElement( root, null, "AccessConstraints", identification.getAccessConstraints()[0] ); 205 } else { 206 XMLTools.appendElement( root, null, "AccessConstraints", "none" ); 207 } 208 209 } 210 211 /** 212 * Append contact information 213 * 214 * @param root 215 * @param provider 216 */ 217 protected static void appendContactInformation( Element root, ServiceProvider provider ) { 218 219 Element ciNode = XMLTools.appendElement( root, null, "ContactInformation" ); 220 Element cppNode = XMLTools.appendElement( ciNode, null, "ContactPersonPrimary" ); 221 if ( provider.getIndividualName() != null ) { 222 XMLTools.appendElement( cppNode, null, "ContactPerson", provider.getIndividualName() ); 223 } 224 if ( provider.getProviderName() != null ) { 225 XMLTools.appendElement( cppNode, null, "ContactOrganization", provider.getProviderName() ); 226 } 227 if ( provider.getPositionName() != null ) { 228 XMLTools.appendElement( ciNode, null, "ContactPosition", provider.getPositionName() ); 229 } 230 Element caNode = XMLTools.appendElement( ciNode, null, "ContactAddress" ); 231 232 XMLTools.appendElement( caNode, null, "AddressType", "postal" ); 233 234 Address addr = provider.getContactInfo().getAddress(); 235 String[] dp = addr.getDeliveryPoint(); 236 if ( dp.length > 0 ) { 237 XMLTools.appendElement( caNode, null, "Address", dp[0] ); 238 } 239 if ( addr.getCity() != null ) { 240 XMLTools.appendElement( caNode, null, "City", addr.getCity() ); 241 } 242 if ( addr.getAdministrativeArea() != null ) { 243 XMLTools.appendElement( caNode, null, "StateOrProvince", addr.getAdministrativeArea() ); 244 } 245 if ( addr.getPostalCode() != null ) { 246 XMLTools.appendElement( caNode, null, "PostCode", addr.getPostalCode() ); 247 } 248 if ( addr.getCountry() != null ) { 249 XMLTools.appendElement( caNode, null, "Country", addr.getCountry() ); 250 } 251 Phone phone = provider.getContactInfo().getPhone(); 252 if ( phone.getVoice().length > 0 ) { 253 XMLTools.appendElement( ciNode, null, "ContactVoiceTelephone", phone.getVoice()[0] ); 254 } 255 if ( phone.getFacsimile().length > 0 ) { 256 XMLTools.appendElement( ciNode, null, "ContactFacsimileTelephone", phone.getFacsimile()[0] ); 257 } 258 if ( addr.getElectronicMailAddress().length > 0 ) { 259 XMLTools.appendElement( ciNode, null, "ContactElectronicMailAddress", addr.getElectronicMailAddress()[0] ); 260 } 261 262 } 263 264 /** 265 * Append capability element. 266 * 267 * @param root 268 * @param operationsMetadata 269 * @throws XMLParsingException 270 */ 271 protected static void appendCapabilityRequests( Element root, WMPSOperationsMetadata operationsMetadata ) 272 throws XMLParsingException { 273 274 root = (Element) XMLTools.getRequiredNode( root, "./Capability/Request", nsContext ); 275 276 Operation[] ops = operationsMetadata.getOperations(); 277 for ( int i = 0; i < ops.length; i++ ) { 278 if ( ops[i] != null ) { 279 appendOperation( root, ops[i] ); 280 } 281 } 282 283 } 284 285 /** 286 * Append Operations. 287 * 288 * @param root 289 * @param operation 290 */ 291 protected static void appendOperation( Element root, Operation operation ) { 292 293 String name = operation.getName(); 294 root = XMLTools.appendElement( root, null, name ); 295 296 OWSDomainType odt = operation.getParameter( "Format" ); 297 String[] values = odt.getValues(); 298 for ( int i = 0; i < values.length; i++ ) { 299 XMLTools.appendElement( root, null, "Format", values[i] ); 300 } 301 302 DCPType[] dcps = operation.getDCPs(); 303 for ( int i = 0; i < dcps.length; i++ ) { 304 Element http = XMLTools.appendElement( root, null, "DCPType" ); 305 http = XMLTools.appendElement( http, null, "HTTP" ); 306 HTTP ht = (HTTP) dcps[i].getProtocol(); 307 URL[] urls = ht.getGetOnlineResources(); 308 appendURLs( http, urls, "Get" ); 309 urls = ht.getPostOnlineResources(); 310 appendURLs( http, urls, "Post" ); 311 } 312 313 } 314 315 /** 316 * Append URLs 317 * 318 * @param http 319 * @param urls 320 * @param type 321 */ 322 protected static void appendURLs( Element http, URL[] urls, String type ) { 323 for ( int j = 0; j < urls.length; j++ ) { 324 Element olr = XMLTools.appendElement( http, null, type ); 325 appendOnlineResource( olr, urls[j] ); 326 } 327 } 328 329 /** 330 * Append capability layer 331 * 332 * @param root 333 * @param layer 334 * @throws XMLParsingException 335 */ 336 protected static void appendCapabilityLayer( Element root, Layer layer ) 337 throws XMLParsingException { 338 339 root = XMLTools.appendElement( root, null, "Layer" ); 340 root.setAttribute( "queryable", Boolean.toString( layer.isQueryable() ) ); 341 root.setAttribute( "cascaded", Integer.toString( layer.getCascaded() ) ); 342 root.setAttribute( "opaque", Boolean.toString( layer.isOpaque() ) ); 343 root.setAttribute( "noSubsets", Boolean.toString( layer.hasNoSubsets() ) ); 344 if ( layer.getFixedWidth() > 0 ) { 345 root.setAttribute( "fixedWidth", Integer.toString( layer.getFixedWidth() ) ); 346 } 347 if ( layer.getFixedHeight() > 0 ) { 348 root.setAttribute( "fixedHeight", Integer.toString( layer.getFixedHeight() ) ); 349 } 350 351 if ( layer.getName() != null ) { 352 XMLTools.appendElement( root, null, "Name", layer.getName() ); 353 } 354 XMLTools.appendElement( root, null, "Title", layer.getTitle() ); 355 356 if ( layer.getAbstract() != null ) { 357 XMLTools.appendElement( root, null, "Abstract", layer.getAbstract() ); 358 } 359 360 String[] keywords = layer.getKeywordList(); 361 if ( keywords.length > 0 ) { 362 Element elem = XMLTools.appendElement( root, null, "KeywordList" ); 363 for ( int i = 0; i < keywords.length; i++ ) { 364 XMLTools.appendElement( elem, null, "Keyword", keywords[i] ); 365 } 366 } 367 368 String[] srs = layer.getSrs(); 369 for ( int i = 0; i < srs.length; i++ ) { 370 XMLTools.appendElement( root, null, "SRS", srs[i] ); 371 } 372 373 Envelope llBox = layer.getLatLonBoundingBox(); 374 appendLatLonBoundingBox( root, llBox ); 375 376 LayerBoundingBox[] lBoxes = layer.getBoundingBoxes(); 377 for ( int i = 0; i < lBoxes.length; i++ ) { 378 appendLayerBoundingBox( root, lBoxes[i] ); 379 } 380 381 Dimension[] dims = layer.getDimension(); 382 for ( int i = 0; i < dims.length; i++ ) { 383 appendDimension( root, dims[i] ); 384 } 385 386 Extent[] extents = layer.getExtent(); 387 for ( int i = 0; i < extents.length; i++ ) { 388 appendExtent( root, extents[i] ); 389 } 390 391 Attribution attr = layer.getAttribution(); 392 if ( attr != null ) { 393 appendAttribution( root, attr ); 394 } 395 396 AuthorityURL[] authorityURLs = layer.getAuthorityURL(); 397 for ( int i = 0; i < authorityURLs.length; i++ ) { 398 appendAuthorityURL( root, authorityURLs[i] ); 399 } 400 401 Identifier[] identifiers = layer.getIdentifier(); 402 for ( int i = 0; i < identifiers.length; i++ ) { 403 appendIdentifier( root, identifiers[i] ); 404 } 405 406 MetadataURL[] metadataURLs = layer.getMetadataURL(); 407 for ( int i = 0; i < metadataURLs.length; i++ ) { 408 appendMetadataURL( root, metadataURLs[i] ); 409 } 410 411 DataURL[] dataURLs = layer.getDataURL(); 412 for ( int i = 0; i < dataURLs.length; i++ ) { 413 appendDataURL( root, dataURLs[i] ); 414 } 415 416 FeatureListURL[] featureListURLs = layer.getFeatureListURL(); 417 for ( int i = 0; i < featureListURLs.length; i++ ) { 418 appendFeatureListURL( root, featureListURLs[i] ); 419 } 420 421 Style[] styles = layer.getStyles(); 422 for ( int i = 0; i < styles.length; i++ ) { 423 appendStyle( root, styles[i] ); 424 } 425 426 ScaleHint scaleHint = layer.getScaleHint(); 427 Element elem = XMLTools.appendElement( root, null, "ScaleHint" ); 428 elem.setAttribute( "min", "" + scaleHint.getMin() ); 429 elem.setAttribute( "max", "" + scaleHint.getMax() ); 430 431 Layer[] layers = layer.getLayer(); 432 for ( int i = 0; i < layers.length; i++ ) { 433 appendCapabilityLayer( root, layers[i] ); 434 } 435 436 } 437 438 /** 439 * Append style 440 * 441 * @param root 442 * @param style 443 */ 444 protected static void appendStyle( Element root, Style style ) { 445 446 root = XMLTools.appendElement( root, null, "Style" ); 447 XMLTools.appendElement( root, null, "Name", style.getName() ); 448 if ( style.getTitle() != null ) { 449 XMLTools.appendElement( root, null, "Title", style.getTitle() ); 450 } 451 if ( style.getAbstract() != null ) { 452 XMLTools.appendElement( root, null, "Abstract", style.getAbstract() ); 453 } 454 LegendURL[] legendURLs = style.getLegendURL(); 455 for ( int i = 0; i < legendURLs.length; i++ ) { 456 appendLegendURL( root, legendURLs[i] ); 457 } 458 459 StyleSheetURL styleSheetURL = style.getStyleSheetURL(); 460 if ( styleSheetURL != null ) { 461 appendStyleSheetURL( root, styleSheetURL ); 462 } 463 464 StyleURL styleURL = style.getStyleURL(); 465 if ( styleURL != null ) { 466 appendStyleURL( root, styleURL ); 467 } 468 469 } 470 471 /** 472 * Append Style URL 473 * 474 * @param root 475 * @param styleURL 476 * 477 */ 478 protected static void appendStyleURL( Element root, StyleURL styleURL ) { 479 Element elem = XMLTools.appendElement( root, null, "StyleURL" ); 480 XMLTools.appendElement( elem, null, "Format", styleURL.getFormat() ); 481 appendOnlineResource( elem, styleURL.getOnlineResource() ); 482 } 483 484 /** 485 * Append Style sheet. 486 * 487 * @param root 488 * @param styleSheetURL 489 */ 490 protected static void appendStyleSheetURL( Element root, StyleSheetURL styleSheetURL ) { 491 Element elem = XMLTools.appendElement( root, null, "StyleSheetURL" ); 492 XMLTools.appendElement( elem, null, "Format", styleSheetURL.getFormat() ); 493 appendOnlineResource( elem, styleSheetURL.getOnlineResource() ); 494 } 495 496 /** 497 * Append legend url. 498 * 499 * @param root 500 * @param legendURL 501 */ 502 protected static void appendLegendURL( Element root, LegendURL legendURL ) { 503 Element elem = XMLTools.appendElement( root, null, "LegendURL" ); 504 elem.setAttribute( "width", "" + legendURL.getWidth() ); 505 elem.setAttribute( "height", "" + legendURL.getWidth() ); 506 XMLTools.appendElement( elem, null, "Format", legendURL.getFormat() ); 507 508 appendOnlineResource( elem, legendURL.getOnlineResource() ); 509 } 510 511 /** 512 * Append feature list url. 513 * 514 * @param root 515 * @param featureListURL 516 */ 517 protected static void appendFeatureListURL( Element root, FeatureListURL featureListURL ) { 518 Element elem = XMLTools.appendElement( root, null, "FeatureListURL" ); 519 XMLTools.appendElement( elem, null, "Format", featureListURL.getFormat() ); 520 appendOnlineResource( elem, featureListURL.getOnlineResource() ); 521 } 522 523 /** 524 * Append data url. 525 * 526 * @param root 527 * @param dataURL 528 */ 529 protected static void appendDataURL( Element root, DataURL dataURL ) { 530 Element elem = XMLTools.appendElement( root, null, "DataURL" ); 531 XMLTools.appendElement( elem, null, "Format", dataURL.getFormat() ); 532 appendOnlineResource( elem, dataURL.getOnlineResource() ); 533 } 534 535 /** 536 * Append metadata url. 537 * 538 * @param root 539 * @param metadataURL 540 */ 541 protected static void appendMetadataURL( Element root, MetadataURL metadataURL ) { 542 Element elem = XMLTools.appendElement( root, null, "MetadataURL" ); 543 elem.setAttribute( "type", metadataURL.getType() ); 544 XMLTools.appendElement( elem, null, "Format", metadataURL.getFormat() ); 545 appendOnlineResource( elem, metadataURL.getOnlineResource() ); 546 } 547 548 /** 549 * Append identifiers. 550 * 551 * @param root 552 * @param identifier 553 */ 554 protected static void appendIdentifier( Element root, Identifier identifier ) { 555 Element elem = XMLTools.appendElement( root, null, "Identifier" ); 556 elem.setAttribute( "authority", identifier.getAuthority() ); 557 XMLTools.setNodeValue( elem, identifier.getValue() ); 558 } 559 560 /** 561 * Append authority url. 562 * 563 * @param root 564 * @param authorityURL 565 */ 566 protected static void appendAuthorityURL( Element root, AuthorityURL authorityURL ) { 567 Element elem = XMLTools.appendElement( root, null, "AuthorityURL" ); 568 elem.setAttribute( "name", authorityURL.getName() ); 569 appendOnlineResource( elem, authorityURL.getOnlineResource() ); 570 } 571 572 /** 573 * Append attribution url. 574 * 575 * @param root 576 * @param attr 577 */ 578 protected static void appendAttribution( Element root, Attribution attr ) { 579 Element elem = XMLTools.appendElement( root, null, "Attribution" ); 580 XMLTools.appendElement( elem, null, "Title", attr.getTitle() ); 581 appendOnlineResource( elem, attr.getOnlineResource() ); 582 LogoURL logoURL = attr.getLogoURL(); 583 if ( logoURL != null ) { 584 elem = XMLTools.appendElement( elem, null, "LogoURL" ); 585 elem.setAttribute( "width", "" + logoURL.getWidth() ); 586 elem.setAttribute( "height", "" + logoURL.getHeight() ); 587 XMLTools.appendElement( elem, null, "Format", logoURL.getFormat() ); 588 appendOnlineResource( elem, logoURL.getOnlineResource() ); 589 } 590 } 591 592 /** 593 * Append online resource. 594 * 595 * @param root 596 * @param url 597 */ 598 protected static void appendOnlineResource( Element root, URL url ) { 599 Element olr = XMLTools.appendElement( root, null, "OnlineResource" ); 600 olr.setAttribute( "xlink:type", "simple" ); 601 olr.setAttribute( "xlink:href", url.toExternalForm() ); 602 } 603 604 /** 605 * Apppend extent. 606 * 607 * @param root 608 * @param extent 609 */ 610 protected static void appendExtent( Element root, Extent extent ) { 611 Element exNode = XMLTools.appendElement( root, null, "Extent" ); 612 exNode.setAttribute( "name", extent.getName() ); 613 exNode.setAttribute( "default", extent.getDefault() ); 614 exNode.setAttribute( "nearestValue", Boolean.toString( extent.useNearestValue() ) ); 615 XMLTools.setNodeValue( exNode, extent.getValue() ); 616 } 617 618 /** 619 * Append dimension. 620 * 621 * @param root 622 * @param dim 623 */ 624 protected static void appendDimension( Element root, Dimension dim ) { 625 Element dimNode = XMLTools.appendElement( root, null, "Dimension" ); 626 dimNode.setAttribute( "name", dim.getName() ); 627 dimNode.setAttribute( "units", dim.getUnits() ); 628 dimNode.setAttribute( "unitSymbol", dim.getUnitSymbol() ); 629 } 630 631 /** 632 * Append layer bounding box. 633 * 634 * @param root 635 * @param lBox 636 */ 637 protected static void appendLayerBoundingBox( Element root, LayerBoundingBox lBox ) { 638 Element bbNode = XMLTools.appendElement( root, null, "BoundingBox" ); 639 bbNode.setAttribute( "minx", "" + lBox.getMin().getX() ); 640 bbNode.setAttribute( "miny", "" + lBox.getMin().getY() ); 641 bbNode.setAttribute( "maxx", "" + lBox.getMax().getX() ); 642 bbNode.setAttribute( "maxy", "" + lBox.getMax().getY() ); 643 bbNode.setAttribute( "resx", "" + lBox.getResx() ); 644 bbNode.setAttribute( "resy", "" + lBox.getResy() ); 645 bbNode.setAttribute( "SRS", "" + lBox.getSRS() ); 646 } 647 648 /** 649 * Append lat-lon bounding box. 650 * 651 * @param root 652 * @param llBox 653 */ 654 protected static void appendLatLonBoundingBox( Element root, Envelope llBox ) { 655 Element bbNode = XMLTools.appendElement( root, null, "LatLonBoundingBox" ); 656 bbNode.setAttribute( "minx", "" + llBox.getMin().getX() ); 657 bbNode.setAttribute( "miny", "" + llBox.getMin().getY() ); 658 bbNode.setAttribute( "maxx", "" + llBox.getMax().getX() ); 659 bbNode.setAttribute( "maxy", "" + llBox.getMax().getY() ); 660 } 661 662 /** 663 * Export the print map initial response document. 664 * 665 * @param response 666 * @return PrintMapResponseDocument 667 * @throws XMLParsingException 668 * 669 */ 670 public static PrintMapResponseDocument export( PrintMapResponse response ) 671 throws XMLParsingException { 672 673 PrintMapResponseDocument document = new PrintMapResponseDocument( null ); 674 try { 675 document.createEmptyDocument(); 676 Element root = document.getRootElement(); 677 root.setAttribute( "id", response.getId() ); 678 appendEmailAddress( root, response.getEmailAddress() ); 679 appendTimeStamp( root, response.getTimeStamp() ); 680 String exception = response.getException(); 681 String message = response.getMessage(); 682 if ( exception != null ) { 683 message = message + " " + exception; 684 } 685 appendMessage( root, message ); 686 appendExpectedTime( root, response.getExpectedTime() ); 687 } catch ( SAXException e ) { 688 LOG.logError( e.getMessage(), e ); 689 } catch ( IOException e ) { 690 LOG.logError( e.getMessage(), e ); 691 } 692 693 return document; 694 695 } 696 697 /** 698 * Append email address. 699 * 700 * @param root 701 * @param emailAddress 702 * @throws XMLParsingException 703 */ 704 private static void appendEmailAddress( Element root, String emailAddress ) 705 throws XMLParsingException { 706 707 Node node; 708 try { 709 node = XMLTools.getRequiredNode( root, "deegreewmps:EmailAddress", nsContext ); 710 } catch ( XMLParsingException e ) { 711 throw new XMLParsingException( "Error getting node 'deegreewmps:EmailAddress'. " 712 + "Please check the WMPSInitialResponseTemplate " 713 + "to confirm its presence." ); 714 } 715 XMLTools.setNodeValue( (Element) node, emailAddress ); 716 717 } 718 719 /** 720 * Append expected processing time. 721 * 722 * @param root 723 * @param expectedTime 724 * @throws XMLParsingException 725 */ 726 private static void appendExpectedTime( Element root, Date expectedTime ) 727 throws XMLParsingException { 728 729 Node node; 730 try { 731 node = XMLTools.getRequiredNode( root, "deegreewmps:ExpectedProcessingTime", nsContext ); 732 } catch ( XMLParsingException e ) { 733 throw new XMLParsingException( "Error getting node " + "'deegreewmps:expectedProcessingTime'. " 734 + "Please check the WMPSInitialResponseTemplate " 735 + "to confirm its presence." ); 736 737 } 738 XMLTools.setNodeValue( (Element) node, expectedTime.toString() ); 739 740 } 741 742 /** 743 * Append message to be displayed to the user. 744 * 745 * @param root 746 * @param message 747 * @throws XMLParsingException 748 */ 749 private static void appendMessage( Element root, String message ) 750 throws XMLParsingException { 751 752 Node node; 753 try { 754 node = XMLTools.getRequiredNode( root, "deegreewmps:Message", nsContext ); 755 } catch ( XMLParsingException e ) { 756 throw new XMLParsingException( "Error getting node 'deegreewmps:message'. " 757 + "Please check the WMPSInitialResponseTemplate " 758 + "to confirm its presence." ); 759 760 } 761 XMLTools.setNodeValue( (Element) node, message ); 762 763 } 764 765 /** 766 * Append time stamp. 767 * 768 * @param root 769 * @param timeStamp 770 * @throws XMLParsingException 771 */ 772 private static void appendTimeStamp( Element root, Date timeStamp ) 773 throws XMLParsingException { 774 775 Node node; 776 try { 777 node = XMLTools.getRequiredNode( root, "deegreewmps:Timestamp", nsContext ); 778 } catch ( XMLParsingException e ) { 779 throw new XMLParsingException( "Error getting node 'deegreewmps:timestamp'. " 780 + "Please check the WMPSInitialResponseTemplate " 781 + "to confirm its presence." ); 782 } 783 XMLTools.setNodeValue( (Element) node, timeStamp.toString() ); 784 785 } 786 787 }