001: //$HeadURL: svn+ssh://mschneider@svn.wald.intevation.org/deegree/base/trunk/resources/eclipse/svn_classfile_header_template.xml $
002: /*---------------- FILE HEADER ------------------------------------------
003: This file is part of deegree.
004: Copyright (C) 2001-2008 by:
005: Department of Geography, University of Bonn
006: http://www.giub.uni-bonn.de/deegree/
007: lat/lon GmbH
008: http://www.lat-lon.de
009:
010: This library is free software; you can redistribute it and/or
011: modify it under the terms of the GNU Lesser General Public
012: License as published by the Free Software Foundation; either
013: version 2.1 of the License, or (at your option) any later version.
014: This library is distributed in the hope that it will be useful,
015: but WITHOUT ANY WARRANTY; without even the implied warranty of
016: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
017: Lesser General Public License for more details.
018: You should have received a copy of the GNU Lesser General Public
019: License along with this library; if not, write to the Free Software
020: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
021: Contact:
022:
023: Andreas Poth
024: lat/lon GmbH
025: Aennchenstr. 19
026: 53177 Bonn
027: Germany
028: E-Mail: poth@lat-lon.de
029:
030: Prof. Dr. Klaus Greve
031: Department of Geography
032: University of Bonn
033: Meckenheimer Allee 166
034: 53115 Bonn
035: Germany
036: E-Mail: greve@giub.uni-bonn.de
037: ---------------------------------------------------------------------------*/
038:
039: package org.deegree.io.datastore.wfs;
040:
041: import java.io.File;
042: import java.net.MalformedURLException;
043: import java.net.URL;
044: import java.util.List;
045:
046: import org.deegree.framework.xml.XMLParsingException;
047: import org.deegree.framework.xml.XMLTools;
048: import org.deegree.framework.xml.XSLTDocument;
049: import org.deegree.io.datastore.AnnotationDocument;
050: import org.w3c.dom.Element;
051: import org.w3c.dom.Node;
052:
053: /**
054: * Handles the annotation parsing for datastores that cascade remote WFS.
055: *
056: * @author <a href="mailto:schneider@lat-lon.de">Markus Schneider </a>
057: * @author last edited by: $Author:$
058: *
059: * @version $Revision:$, $Date:$
060: */
061: public class CascadingWFSAnnotationDocument extends AnnotationDocument {
062:
063: private static final long serialVersionUID = -2801053207484913910L;
064:
065: @Override
066: public CascadingWFSDatastoreConfiguration parseDatastoreConfiguration()
067: throws XMLParsingException {
068: Element appinfoElement = (Element) XMLTools
069: .getRequiredNode(getRootElement(),
070: "xs:annotation/xs:appinfo", nsContext);
071: List<Node> list = XMLTools.getRequiredNodes(appinfoElement,
072: "deegreewfs:Url", nsContext);
073:
074: WFSDescription[] wfs = new WFSDescription[list.size()];
075:
076: String tmp = null;
077: try {
078: for (int i = 0; i < wfs.length; i++) {
079: Node node = list.get(i);
080: tmp = XMLTools.getStringValue(node);
081: URL url = new URL(tmp);
082:
083: String xPath = "./@inFilter";
084: XSLTDocument inFilter = readFilter(node, xPath);
085:
086: xPath = "./@outFilter";
087: XSLTDocument outFilter = readFilter(node, xPath);
088:
089: xPath = "./@timeout";
090: int timeout = XMLTools.getNodeAsInt(node, xPath,
091: nsContext, 5000);
092:
093: wfs[i] = new WFSDescription(url, inFilter, outFilter,
094: timeout);
095: }
096: } catch (MalformedURLException e) {
097: throw new XMLParsingException(tmp + " is not a valid URL.",
098: e);
099: }
100: return new CascadingWFSDatastoreConfiguration(wfs);
101: }
102:
103: /**
104: * reads and parses optional filter attributes for a WFS
105: *
106: * @param node
107: * @param xPath
108: * @return XSLT script if a filter as been defined otherwise <code>null</code>
109: * will be returned
110: * @throws XMLParsingException
111: */
112: private XSLTDocument readFilter(Node node, String xPath)
113: throws XMLParsingException {
114:
115: XSLTDocument filter = null;
116: String tmp = XMLTools.getNodeAsString(node, xPath, nsContext,
117: null);
118: try {
119: if (tmp != null) {
120: File file = new File(tmp);
121: URL u = null;
122: if (!file.isAbsolute()) {
123: u = this .resolve(tmp);
124: }
125: filter = new XSLTDocument(u);
126: }
127: } catch (Exception e) {
128: throw new XMLParsingException(e.getMessage(), e);
129: }
130: return filter;
131: }
132: }
|