001 // $HeadURL: 002 // /cvsroot/deegree/src/org/deegree/ogcwebservices/wcs/WCSServiceFactory.java,v 003 // 1.4 2004/06/18 15:50:30 tf Exp $ 004 /*---------------------------------------------------------------------------- 005 This file is part of deegree, http://deegree.org/ 006 Copyright (C) 2001-2009 by: 007 Department of Geography, University of Bonn 008 and 009 lat/lon GmbH 010 011 This library is free software; you can redistribute it and/or modify it under 012 the terms of the GNU Lesser General Public License as published by the Free 013 Software Foundation; either version 2.1 of the License, or (at your option) 014 any later version. 015 This library is distributed in the hope that it will be useful, but WITHOUT 016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 018 details. 019 You should have received a copy of the GNU Lesser General Public License 020 along with this library; if not, write to the Free Software Foundation, Inc., 021 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 022 023 Contact information: 024 025 lat/lon GmbH 026 Aennchenstr. 19, 53177 Bonn 027 Germany 028 http://lat-lon.de/ 029 030 Department of Geography, University of Bonn 031 Prof. Dr. Klaus Greve 032 Postfach 1147, 53001 Bonn 033 Germany 034 http://www.geographie.uni-bonn.de/deegree/ 035 036 e-mail: info@deegree.org 037 ----------------------------------------------------------------------------*/ 038 package org.deegree.ogcwebservices.wms; 039 040 import java.io.IOException; 041 import java.net.URL; 042 043 import org.deegree.framework.log.ILogger; 044 import org.deegree.framework.log.LoggerFactory; 045 import org.deegree.i18n.Messages; 046 import org.deegree.ogcwebservices.wcs.configuration.InvalidConfigurationException; 047 import org.deegree.ogcwebservices.wms.configuration.WMSConfigurationDocument; 048 import org.deegree.ogcwebservices.wms.configuration.WMSConfigurationDocument_1_3_0; 049 import org.deegree.ogcwebservices.wms.configuration.WMSConfigurationType; 050 051 /** 052 * 053 * 054 * 055 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a> 056 * @author last edited by: $Author: mschneider $ 057 * 058 * @version 1.0. $Revision: 18195 $, $Date: 2009-06-18 17:55:39 +0200 (Do, 18 Jun 2009) $ 059 * 060 * @since 2.0 061 * 062 */ 063 public final class WMServiceFactory { 064 065 private static WMSConfigurationType CONFIG; 066 067 private static final ILogger LOG = LoggerFactory.getLogger( WMServiceFactory.class ); 068 069 private WMServiceFactory() { 070 CONFIG = null; 071 } 072 073 /** 074 * Creates a new WMS service instance configured with the given configuration. 075 * 076 * @param config 077 * @return a new service instance 078 */ 079 public static WMService getWMSInstance( WMSConfigurationType config ) { 080 return new WMService( config ); 081 } 082 083 /** 084 * Sets the default configuration by value. 085 * 086 * @param wmsConfiguration 087 */ 088 public static void setConfiguration( WMSConfigurationType wmsConfiguration ) { 089 CONFIG = wmsConfiguration; 090 // if service instance are already created 091 // destroy all instances 092 // create new service instances and put in pool 093 094 LOG.logInfo( CONFIG.getServiceIdentification().getTitle() + " (" + CONFIG.getVersion() 095 + ") service pool initialized." ); 096 } 097 098 /** 099 * Sets the default configuration by URL. 100 * 101 * @param serviceConfigurationUrl 102 * @throws InvalidConfigurationException 103 */ 104 @SuppressWarnings("null") // the method was designed to play with fire 105 public static void setConfiguration( URL serviceConfigurationUrl ) 106 throws InvalidConfigurationException { 107 108 try { 109 WMSConfigurationDocument doc = new WMSConfigurationDocument(); 110 WMSConfigurationDocument_1_3_0 doc130 = new WMSConfigurationDocument_1_3_0(); 111 112 // changes start here 113 int dc = 50; 114 boolean configured = false; 115 while ( !configured ) { 116 try { 117 doc.load( serviceConfigurationUrl ); 118 119 if ( "1.3.0".equals( doc.getRootElement().getAttribute( "version" ) ) ) { 120 LOG.logInfo( Messages.getMessage( "WMS_VERSION130" ) ); 121 doc130.load( serviceConfigurationUrl ); 122 doc = null; 123 } else { 124 LOG.logInfo( Messages.getMessage( "WMS_VERSIONDEFAULT" ) ); 125 doc130 = null; 126 } 127 128 configured = true; 129 } catch ( IOException ioe ) { 130 if ( serviceConfigurationUrl.getProtocol().startsWith( "http" ) && dc > 0 ) { 131 LOG.logWarning( "No successful connection to the WMS-Configuration-URL, " 132 + "trying again in 10 seconds. Will try " + dc + " more times to connect." ); 133 Thread.sleep( 10000 ); 134 dc--; 135 } else { 136 throw ( ioe ); 137 } 138 } 139 } 140 // changes end here 141 142 WMSConfigurationType conf; 143 144 if ( doc != null ) { 145 conf = doc.parseConfiguration(); 146 } else { 147 conf = doc130.parseConfiguration(); 148 } 149 150 WMServiceFactory.setConfiguration( conf ); 151 152 } catch ( Exception e ) { 153 LOG.logError( e.getMessage(), e ); 154 throw new InvalidConfigurationException( "WMServiceFactory", e.getMessage() ); 155 } 156 157 } 158 159 /** 160 * Returns a new WMS service instance configured with a previously set default configuration. 161 * 162 * @return a new service instance 163 */ 164 public static WMService getService() { 165 return WMServiceFactory.getWMSInstance( CONFIG ); 166 } 167 168 }