    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    }