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    }