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