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