001 //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/tags/2.1/src/org/deegree/ogcwebservices/OWSUtils.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 53177 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; 044 045 import java.net.URL; 046 import java.util.List; 047 048 import org.deegree.datatypes.QualifiedName; 049 import org.deegree.ogcwebservices.getcapabilities.GetCapabilities; 050 import org.deegree.ogcwebservices.getcapabilities.OGCCapabilities; 051 import org.deegree.ogcwebservices.wfs.capabilities.WFSCapabilities; 052 import org.deegree.ogcwebservices.wfs.capabilities.WFSOperationsMetadata; 053 import org.deegree.ogcwebservices.wfs.operation.GetFeature; 054 import org.deegree.ogcwebservices.wfs.operation.GetFeatureWithLock; 055 import org.deegree.ogcwebservices.wfs.operation.Lock; 056 import org.deegree.ogcwebservices.wfs.operation.transaction.Transaction; 057 import org.deegree.ogcwebservices.wms.capabilities.WMSCapabilities; 058 import org.deegree.ogcwebservices.wms.operation.GetFeatureInfo; 059 import org.deegree.ogcwebservices.wms.operation.GetLegendGraphic; 060 import org.deegree.ogcwebservices.wms.operation.GetMap; 061 import org.deegree.owscommon_new.DCP; 062 import org.deegree.owscommon_new.HTTP; 063 import org.deegree.owscommon_new.Operation; 064 import org.deegree.owscommon_new.OperationsMetadata; 065 066 /** 067 * 068 * 069 * 070 * @version $Revision: 6692 $ 071 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a> 072 * @author last edited by: $Author: apoth $ 073 * 074 * @version 1.0. $Revision: 6692 $, $Date: 2007-04-25 14:55:52 +0200 (Mi, 25 Apr 2007) $ 075 * 076 * @since 2.0 077 */ 078 public class OWSUtils { 079 080 /** 081 * according to OGC WMS 1.3 Testsuite a URL to a service operation via HTTPGet must end with '?' 082 * or '&' 083 * 084 * @param href 085 * @return the parameter, changed to fulfill the spec 086 */ 087 public static String validateHTTPGetBaseURL( String href ) { 088 if ( !href.endsWith( "/" ) ) { 089 if ( href.indexOf( '?' ) < 0 ) { 090 href = href + '?'; 091 } else if ( !href.endsWith( "&" ) && !href.endsWith( "?" ) ) { 092 href = href + '&'; 093 } 094 } 095 return href; 096 } 097 098 /** 099 * the method return the first HTTPGet URL for a Operation within the pass capabilities 100 * document. If No URL can be found (e.g. the service does not support the operation via HTTP 101 * Get) <code>null</code> will be returned 102 * 103 * @param capabilities 104 * @param clss 105 * @return see above 106 */ 107 public synchronized static URL getHTTPGetOperationURL( OGCCapabilities capabilities, Class clss ) { 108 URL url = null; 109 if ( capabilities instanceof WMSCapabilities ) { 110 url = getHTTPGetOperationURL( (WMSCapabilities) capabilities, clss ); 111 } else if ( capabilities instanceof WFSCapabilities ) { 112 url = getHTTPGetOperationURL( (WFSCapabilities) capabilities, clss ); 113 } else { 114 // TODO 115 // support more service types 116 // possibly use generic base capabilities to extract it 117 } 118 return url; 119 120 } 121 122 /** 123 * @see #getHTTPGetOperationURL(OGCCapabilities, Class) 124 * @param capabilities 125 * @param clss 126 * @return the first operation URL 127 */ 128 private synchronized static URL getHTTPGetOperationURL( WMSCapabilities capabilities, Class clss ) { 129 130 OperationsMetadata om = capabilities.getOperationMetadata(); 131 List<DCP> dcps = null; 132 if ( clss.equals( GetMap.class ) ) { 133 Operation op = om.getOperation( new QualifiedName( "GetMap" ) ); 134 if ( op == null ) { 135 op = om.getOperation( new QualifiedName( "map" ) ); 136 } 137 dcps = op.getDCP(); 138 } else if ( clss.equals( GetCapabilities.class ) ) { 139 Operation op = om.getOperation( new QualifiedName( "GetCapabilities" ) ); 140 if ( op == null ) { 141 op = om.getOperation( new QualifiedName( "capabilities" ) ); 142 } 143 dcps = op.getDCP(); 144 } else if ( clss.equals( GetFeatureInfo.class ) ) { 145 Operation op = om.getOperation( new QualifiedName( "GetFeatureInfo" ) ); 146 dcps = op.getDCP(); 147 } else if ( clss.equals( GetLegendGraphic.class ) ) { 148 Operation op = om.getOperation( new QualifiedName( "GetLegendGraphic" ) ); 149 dcps = op.getDCP(); 150 } 151 152 // search for the first HTTP Get link 153 if ( dcps == null ) { 154 return null; 155 } 156 for ( DCP dcp : dcps ) { 157 if ( dcp instanceof HTTP ) { 158 HTTP http = (HTTP) dcp; 159 List<URL> urls = http.getGetOnlineResources(); 160 if ( urls.size() > 0 ) { 161 return urls.get( 0 ); 162 } 163 } 164 } 165 166 return null; 167 168 } 169 170 /** 171 * @see #getHTTPGetOperationURL(OGCCapabilities, Class) 172 * @param capabilities 173 * @param clss 174 * @return the first operation URL 175 */ 176 private synchronized static URL getHTTPGetOperationURL( WFSCapabilities capabilities, Class clss ) { 177 178 URL url = null; 179 WFSOperationsMetadata om = (WFSOperationsMetadata) capabilities.getOperationsMetadata(); 180 if ( clss.equals( GetCapabilities.class ) ) { 181 org.deegree.ogcwebservices.getcapabilities.HTTP http = (org.deegree.ogcwebservices.getcapabilities.HTTP) om.getGetCapabilitiesOperation().getDCPs()[0].getProtocol(); 182 url = http.getGetOnlineResources()[0]; 183 } else if ( clss.equals( GetFeature.class ) ) { 184 org.deegree.ogcwebservices.getcapabilities.HTTP http = (org.deegree.ogcwebservices.getcapabilities.HTTP) om.getGetFeature().getDCPs()[0].getProtocol(); 185 url = http.getGetOnlineResources()[0]; 186 } else if ( clss.equals( GetFeatureWithLock.class ) ) { 187 org.deegree.ogcwebservices.getcapabilities.HTTP http = (org.deegree.ogcwebservices.getcapabilities.HTTP) om.getGetFeatureWithLock().getDCPs()[0].getProtocol(); 188 url = http.getGetOnlineResources()[0]; 189 } else if ( clss.equals( Lock.class ) ) { 190 org.deegree.ogcwebservices.getcapabilities.HTTP http = (org.deegree.ogcwebservices.getcapabilities.HTTP) om.getLockFeature().getDCPs()[0].getProtocol(); 191 url = http.getGetOnlineResources()[0]; 192 } else if ( clss.equals( Transaction.class ) ) { 193 org.deegree.ogcwebservices.getcapabilities.HTTP http = (org.deegree.ogcwebservices.getcapabilities.HTTP) om.getTransaction().getDCPs()[0].getProtocol(); 194 url = http.getGetOnlineResources()[0]; 195 } 196 return url; 197 } 198 199 /** 200 * the method return the first HTTPPost URL for a Operation within the pass capabilities 201 * document. If No URL can be found (e.g. the service does not support the operation via HTTP 202 * Get) <code>null</code> will be returned 203 * 204 * @param capabilities 205 * @param clss 206 * @return the first HTTPPost URL for a Operation within the pass capabilities document. If No 207 * URL can be found (e.g. the service does not support the operation via HTTP Get) 208 * <code>null</code> will be returned 209 */ 210 public synchronized static URL getHTTPPostOperationURL( OGCCapabilities capabilities, Class clss ) { 211 URL url = null; 212 if ( capabilities instanceof WFSCapabilities ) { 213 url = getHTTPPostOperationURL( (WFSCapabilities) capabilities, clss ); 214 } else { 215 // TODO 216 // support more service types 217 // possibly use generic base capabilities to extract it 218 } 219 return url; 220 } 221 222 /** 223 * @see #getHTTPPostOperationURL(OGCCapabilities, Class) 224 * @param capabilities 225 * @param clss 226 * @return the first operation URL 227 */ 228 private synchronized static URL getHTTPPostOperationURL( WFSCapabilities capabilities, 229 Class clss ) { 230 231 URL url = null; 232 WFSOperationsMetadata om = (WFSOperationsMetadata) capabilities.getOperationsMetadata(); 233 if ( clss.equals( GetCapabilities.class ) ) { 234 org.deegree.ogcwebservices.getcapabilities.HTTP http = (org.deegree.ogcwebservices.getcapabilities.HTTP) om.getGetCapabilitiesOperation().getDCPs()[0].getProtocol(); 235 url = http.getPostOnlineResources()[0]; 236 } else if ( clss.equals( GetFeature.class ) ) { 237 org.deegree.ogcwebservices.getcapabilities.HTTP http = (org.deegree.ogcwebservices.getcapabilities.HTTP) om.getGetFeature().getDCPs()[0].getProtocol(); 238 url = http.getPostOnlineResources()[0]; 239 } else if ( clss.equals( GetFeatureWithLock.class ) ) { 240 org.deegree.ogcwebservices.getcapabilities.HTTP http = (org.deegree.ogcwebservices.getcapabilities.HTTP) om.getGetFeatureWithLock().getDCPs()[0].getProtocol(); 241 url = http.getPostOnlineResources()[0]; 242 } else if ( clss.equals( Lock.class ) ) { 243 org.deegree.ogcwebservices.getcapabilities.HTTP http = (org.deegree.ogcwebservices.getcapabilities.HTTP) om.getLockFeature().getDCPs()[0].getProtocol(); 244 url = http.getPostOnlineResources()[0]; 245 } else if ( clss.equals( Transaction.class ) ) { 246 org.deegree.ogcwebservices.getcapabilities.HTTP http = (org.deegree.ogcwebservices.getcapabilities.HTTP) om.getTransaction().getDCPs()[0].getProtocol(); 247 url = http.getPostOnlineResources()[0]; 248 } 249 return url; 250 } 251 252 } 253 254 /*************************************************************************************************** 255 * <code> 256 Changes to this class. What the people have been up to: 257 258 $Log$ 259 Revision 1.2 2007/02/27 13:46:11 wanhoff 260 fixed Javadoc @return tag and footer 261 262 Revision 1.1 2006/10/17 20:31:19 poth 263 *** empty log message *** 264 265 Revision 1.5 2006/09/08 16:25:33 poth 266 method for getting post addresses from OWS capabilities initialized / two method that do not has to be public set to private 267 268 Revision 1.4 2006/08/29 13:02:50 poth 269 code formating 270 271 Revision 1.3 2006/08/23 07:10:22 schmitz 272 Renamed the owscommon_neu package to owscommon_new. 273 274 Revision 1.2 2006/08/22 10:25:01 schmitz 275 Updated the WMS to use the new OWS common package. 276 Updated the rest of deegree to use the new data classes returned 277 by the updated WMS methods/capabilities. 278 279 Revision 1.1 2006/08/20 20:51:05 poth 280 initial check in 281 282 </code> 283 **************************************************************************************************/