001    //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.3_testing/src/org/deegree/ogcwebservices/wms/configuration/AbstractDataSource.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.wms.configuration;
037    
038    import java.net.URL;
039    import java.util.Map;
040    
041    import org.deegree.datatypes.QualifiedName;
042    import org.deegree.model.spatialschema.Geometry;
043    import org.deegree.ogcwebservices.OGCWebService;
044    import org.deegree.ogcwebservices.OGCWebServiceException;
045    import org.deegree.ogcwebservices.wms.capabilities.ScaleHint;
046    
047    /**
048     * name of the data source where the WMS can find the data of a layer. the filterServiceClassName element identifies the
049     * filter servive that's responsible for accessing the data.
050     *
051     * @author <a href="mailto:poth@lat-lon.de">Andreas Poth </a>
052     * @author <a href="mailto:mschneider@lat-lon.de">Markus Schneider </a>
053     * @version $Revision: 18195 $, $Date: 2009-06-18 17:55:39 +0200 (Do, 18. Jun 2009) $
054     */
055    public abstract class AbstractDataSource {
056    
057        /**
058         * A constant indicating a local wcs.
059         */
060        public static final int LOCALWCS = 0;
061    
062        /**
063         * A constant indicating a local wfs.
064         */
065        public static final int LOCALWFS = 1;
066    
067        /**
068         * A constant indicating a remote wms.
069         */
070        public static final int REMOTEWMS = 2;
071    
072        /**
073         * A constant indicating a remote wcs.
074         */
075        public static final int REMOTEWCS = 3;
076    
077        /**
078         * A constant indicating a remote wfs.
079         */
080        public static final int REMOTEWFS = 4;
081    
082        /**
083         * A constant indicating a database
084         */
085        public static final int DATABASE = 5;
086    
087        /**
088         * A constant indicating an external data access
089         */
090        public static final int EXTERNALDATAACCESS = 6;
091    
092        protected OGCWebService ows = null;
093    
094        private URL capabilitiesURL;
095    
096        private ScaleHint scaleHint = null;
097    
098        private QualifiedName name = null;
099    
100        private boolean queryable = false;
101    
102        private boolean failOnException = true;
103    
104        private URL featureInfoTransform = null;
105    
106        private Geometry validArea = null;
107    
108        private int reqTimeLimit = 30;
109    
110        private int type = 0;
111    
112        private URL featureInfoURL;
113    
114        private Map<String, String> dimProps;
115    
116        /**
117         * Creates a new DataSource object.
118         *
119         * @param queryable
120         * @param failOnException
121         * @param name
122         * @param type
123         * @param ows
124         * @param capabilitiesURL
125         * @param scaleHint
126         * @param featureInfoTransform
127         */
128        protected AbstractDataSource( boolean queryable, boolean failOnException, QualifiedName name, int type,
129                                      OGCWebService ows, URL capabilitiesURL, ScaleHint scaleHint, Geometry validArea,
130                                      URL featureInfoTransform, int reqTimeLimit, Map<String, String> dimProps ) {
131            this.scaleHint = scaleHint;
132            this.name = name;
133            this.type = type;
134            this.ows = ows;
135            this.capabilitiesURL = capabilitiesURL;
136            this.failOnException = failOnException;
137            this.queryable = queryable;
138            this.featureInfoTransform = featureInfoTransform;
139            this.validArea = validArea;
140            this.reqTimeLimit = reqTimeLimit;
141            this.dimProps = dimProps;
142        }
143    
144        /**
145         * @return the scale interval the data source is valid
146         */
147        public ScaleHint getScaleHint() {
148            return scaleHint;
149        }
150    
151        /**
152         * @return the name of the data source. The method may returns <tt>null</tt> if so no name is defined and a online
153         *         resource or WFS filter have shall be returned.
154         */
155        public QualifiedName getName() {
156            return name;
157        }
158    
159        /**
160         * @return an instance of the <tt>OGCWebService</tt> that represents the datasource. Notice: if more than one layer
161         *         uses data that are offered by the same OWS the deegree WMS shall just use one instance for accessing the
162         *         OWS
163         * @throws OGCWebServiceException
164         *
165         */
166        public abstract OGCWebService getOGCWebService()
167                                throws OGCWebServiceException;
168    
169        /**
170         * @return the type of the data source. possible values are:
171         *         <ul>
172         *         <li>LOCALWFS</li>
173         *         <li>LOCALWCS</li>
174         *         <li>REMOTEWFS</li>
175         *         <li>REMOTEWCS</li>
176         *         <li>REMOTEWMS</li>
177         *         </ul>
178         *         the values are defined as constants in <tt>DataSource</tt>
179         *
180         */
181        public int getType() {
182            return type;
183        }
184    
185        /**
186         * @return true if the requesting of the complete layer and so of the complete request shall fail if access a
187         *         datasource fails.
188         */
189        public boolean isFailOnException() {
190            return failOnException;
191        }
192    
193        /**
194         * @return true i a datasource is queryable (considered for GetFeatureInfo requests)
195         */
196        public boolean isQueryable() {
197            return queryable;
198        }
199    
200        /**
201         * @return the URL of the capabilities document describing access to a datasource
202         */
203        public URL getCapabilitiesURL() {
204            return capabilitiesURL;
205        }
206    
207        /**
208         * @return the URL of a XSLT script to transform the GML that internaly will be returned as result to a GetFeature
209         *         or cascaded GetFeatureInfo request. The return is null if no transformation shall be performed.
210         *
211         */
212        public URL getFeatureInfoTransform() {
213            return featureInfoTransform;
214        }
215    
216        /**
217         * @return the area a datasource is valid
218         */
219        public Geometry getValidArea() {
220            return validArea;
221        }
222    
223        /**
224         * @return the maximum time in seconds a datasource shall be able to return a result.
225         */
226        public int getRequestTimeLimit() {
227            return reqTimeLimit;
228        }
229    
230        /**
231         * @param url
232         */
233        public void setFeatureInfoURL( URL url ) {
234            featureInfoURL = url;
235        }
236    
237        /**
238         * @return the feature info URL or null, if not set
239         */
240        public URL getFeatureInfoURL() {
241            return featureInfoURL;
242        }
243    
244        @Override
245        public String toString() {
246            String ret = getClass().getName() + ":\n";
247            ret += ( "scaleHint = " + scaleHint + "\n" );
248            ret += ( "name = " + name + "\n" );
249            ret += ( "type = " + type + "\n" );
250            ret += ( "queryable = " + queryable + "\n" );
251            ret += ( "failOnException = " + failOnException + "\n" );
252            ret += ( "capabilitiesURL = " + capabilitiesURL + "\n" );
253            ret += ( "validArea = " + validArea + "\n" );
254            return ret;
255        }
256    
257        /**
258         * @return the dimProps
259         */
260        public Map<String, String> getDimProps() {
261            return dimProps;
262        }
263    
264    }