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