| 182 | | private static String getCapabilitiesHeader() { |
| 183 | | return "<WMT_MS_Capabilities version=\"1.1.1\" updateSequence=\"0\">\n" |
| 184 | | + "<VendorSpecificCapabilities>"; |
| 185 | | } |
| 186 | | |
| 187 | | private static String getCapabilitiesFooter() { |
| 188 | | return "\n</VendorSpecificCapabilities>" + "\n</WMT_MS_Capabilities>"; |
| 189 | | } |
| 190 | | |
| | 194 | private String getCapabilitiesHeader() { |
| | 195 | String wms = fetchOrigionalWMSCapabilitiesDocument(); |
| | 196 | int split = wms.indexOf("<VendorSpecificCapabilities/>"); |
| | 197 | if( split != -1 ){ |
| | 198 | // we have an empty VendorSpecificCapabilities to fill in... |
| | 199 | String header = wms.substring(0,split); |
| | 200 | return header+"\n<VendorSpecificCapabilities>"; |
| | 201 | } |
| | 202 | split = wms.indexOf("</VendorSpecificCapabilities>"); |
| | 203 | if( split != -1 ){ |
| | 204 | // we have an existing VendorSpecificCapabilities to add to |
| | 205 | String header = wms.substring(0,split); |
| | 206 | } |
| | 207 | // look for <UserDefinedSymbolization .. VendorSpecificCapabilities goes before this element |
| | 208 | split = wms.indexOf("<UserDefinedSymbolization"); |
| | 209 | if( split ==-1 ){ |
| | 210 | // look for <Layer> ... VendorSpecificParameters goes before this element |
| | 211 | split = wms.indexOf("<Layer"); |
| | 212 | } |
| | 213 | String header = wms.substring(0,split); |
| | 214 | |
| | 215 | return header +"\n<VendorSpecificCapabilities>"; |
| | 216 | } |
| | 217 | |
| | 218 | private String getCapabilitiesFooter() { |
| | 219 | //return "\n</VendorSpecificCapabilities>" + "\n</WMT_MS_Capabilities>"; |
| | 220 | String wms = fetchOrigionalWMSCapabilitiesDocument(); |
| | 221 | int split = wms.indexOf("<VendorSpecificCapabilities/>"); |
| | 222 | if( split != -1 ){ |
| | 223 | // we have an empty VendorSpecificCapabilities to fill in... |
| | 224 | String footer = wms.substring(split+29); |
| | 225 | return "\n</VendorSpecificCapabilities>" + footer; |
| | 226 | } |
| | 227 | split = wms.indexOf("<VendorSpecificCapabilities/>"); |
| | 228 | if( split != -1 ){ |
| | 229 | // we have an existing VendorSpecificCapabilities to add to |
| | 230 | String footer = wms.substring(split+28); |
| | 231 | return "\n</VendorSpecificCapabilities>" + footer; |
| | 232 | } |
| | 233 | // look for <UserDefinedSymbolization .. VendorSpecificCapabilities goes before this element |
| | 234 | split = wms.indexOf("<UserDefinedSymbolization"); |
| | 235 | if( split ==-1 ){ |
| | 236 | // look for <Layer> ... VendorSpecificParameters goes before this element |
| | 237 | split = wms.indexOf("<Layer"); |
| | 238 | } |
| | 239 | String footer = wms.substring(split); |
| | 240 | return "\n</VendorSpecificCapabilities>" + footer; |
| | 241 | } |
| | 242 | |
| | 243 | /** |
| | 244 | * Fetch the original WMS capabilities document (we will add our vendor specific |
| | 245 | * parameters here). |
| | 246 | * <p> |
| | 247 | * Currently this is returned as a String; in the future we can make use of |
| | 248 | * the GeoTools WMSCapabilities data structure (and strip out any |
| | 249 | * layers that are not mentioned explicitly). |
| | 250 | * |
| | 251 | * @return The origional WMS capabilities document prior to processing |
| | 252 | */ |
| | 253 | synchronized String fetchOrigionalWMSCapabilitiesDocument(){ |
| | 254 | if( caps != null ){ |
| | 255 | return caps; |
| | 256 | } |
| | 257 | StringBuffer buf = new StringBuffer(); |
| | 258 | if (configs == null ){ |
| | 259 | return "sad"; |
| | 260 | } |
| | 261 | Iterator configIter = configs.iterator(); |
| | 262 | CONFIG: while (configIter.hasNext()) { |
| | 263 | Map<String, TileLayer> configLayers = null; |
| | 264 | Configuration config = (Configuration) configIter.next(); |
| | 265 | try { |
| | 266 | configLayers = config.getTileLayers(); |
| | 267 | } catch (GeoWebCacheException gwce) { |
| | 268 | log.error(gwce.getMessage()); |
| | 269 | log.error("Failed to add layers from "+ config.getIdentifier()); |
| | 270 | } |
| | 271 | if (configLayers != null && configLayers.size() > 0) { |
| | 272 | LAYER: for( TileLayer layer : configLayers.values() ){ |
| | 273 | if( !(layer instanceof WMSLayer)){ |
| | 274 | continue; // skip! |
| | 275 | } |
| | 276 | WMSLayer wmsLayer = (WMSLayer) layer; |
| | 277 | WMSURL: for( String url : wmsLayer.getWMSurl() ){ |
| | 278 | try { |
| | 279 | URL capabilitiesURL = new URL( url+"?REQUEST=GetCapabilities&SERVICE=WMS&VESION=1.1.0"); |
| | 280 | URLConnection connection = capabilitiesURL.openConnection(); |
| | 281 | InputStream input = connection.getInputStream(); |
| | 282 | InputStreamReader reader = new InputStreamReader( input ); |
| | 283 | BufferedReader process = new BufferedReader( reader ); |
| | 284 | |
| | 285 | buf = new StringBuffer(); |
| | 286 | String line; |
| | 287 | while( (line = process.readLine()) != null ){ |
| | 288 | buf.append( line ); |
| | 289 | buf.append("\n"); |
| | 290 | } |
| | 291 | if( buf.length() != 0 ){ |
| | 292 | break CONFIG; // we managed to read a capabilities into buf |
| | 293 | } |
| | 294 | /* |
| | 295 | // TODO only use the parts of the capabilities file that |
| | 296 | // are mentioned in our configuration! |
| | 297 | |
| | 298 | WebMapServer wms = new WebMapServer(capabilitiesURL); |
| | 299 | WMSCapabilities capabilities = wms.getCapabilities(); |
| | 300 | */ |
| | 301 | } |
| | 302 | catch( Throwable notConnected ){ |
| | 303 | // continue WMSURL |
| | 304 | } |
| | 305 | } |
| | 306 | } |
| | 307 | } else { |
| | 308 | log.error("Configuration " + config.getIdentifier()+ " contained no layers."); |
| | 309 | } |
| | 310 | } |
| | 311 | caps = buf.toString(); |
| | 312 | return caps; |
| | 313 | } |
| | 314 | |
| | 315 | public void setConfig(List configs) { |
| | 316 | this.configs = configs; |
| | 317 | } |