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    /*----------------    FILE HEADER  ------------------------------------------
005    
006     This file is part of deegree.
007     Copyright (C) 2001-2006 by:
008     EXSE, Department of Geography, University of Bonn
009     http://www.giub.uni-bonn.de/deegree/
010     lat/lon GmbH
011     http://www.lat-lon.de
012    
013     This library is free software; you can redistribute it and/or
014     modify it under the terms of the GNU Lesser General Public
015     License as published by the Free Software Foundation; either
016     version 2.1 of the License, or (at your option) any later version.
017    
018     This library is distributed in the hope that it will be useful,
019     but WITHOUT ANY WARRANTY; without even the implied warranty of
020     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
021     Lesser General Public License for more details.
022    
023     You should have received a copy of the GNU Lesser General Public
024     License along with this library; if not, write to the Free Software
025     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
026    
027     Contact:
028    
029     Andreas Poth
030     lat/lon GmbH
031     Aennchenstr. 19
032     53115 Bonn
033     Germany
034     E-Mail: poth@lat-lon.de
035    
036     Prof. Dr. Klaus Greve
037     Department of Geography
038     University of Bonn
039     Meckenheimer Allee 166
040     53115 Bonn
041     Germany
042     E-Mail: greve@giub.uni-bonn.de
043    
044     
045     ---------------------------------------------------------------------------*/
046    package org.deegree.ogcwebservices.wms;
047    
048    import java.io.IOException;
049    import java.net.URL;
050    
051    import org.deegree.framework.log.ILogger;
052    import org.deegree.framework.log.LoggerFactory;
053    import org.deegree.i18n.Messages;
054    import org.deegree.ogcwebservices.wcs.configuration.InvalidConfigurationException;
055    import org.deegree.ogcwebservices.wms.configuration.WMSConfigurationDocument;
056    import org.deegree.ogcwebservices.wms.configuration.WMSConfigurationDocument_1_3_0;
057    import org.deegree.ogcwebservices.wms.configuration.WMSConfigurationType;
058    
059    /**
060     * 
061     *
062     * 
063     * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
064     * @author last edited by: $Author: bezema $
065     *
066     * @version 1.0. $Revision: 6259 $, $Date: 2007-03-20 10:15:15 +0100 (Di, 20 Mär 2007) $
067     *
068     * @since 2.0
069     * 
070     */
071    public final class WMServiceFactory {
072    
073        private static WMSConfigurationType CONFIG;
074    
075        private static final ILogger LOG = LoggerFactory.getLogger( WMServiceFactory.class );
076    
077        private WMServiceFactory() {
078            CONFIG = null;
079        }
080    
081        /**
082         * Creates a new WMS service instance configured with the given configuration.
083         * 
084         * @param config
085         * @return a new service instance
086         */
087        public static WMService getWMSInstance( WMSConfigurationType config ) {
088            return new WMService( config );
089        }
090    
091        /**
092         * Sets the default configuration by value.
093         * 
094         * @param wmsConfiguration
095         */
096        public static void setConfiguration( WMSConfigurationType wmsConfiguration ) {
097            CONFIG = wmsConfiguration;
098            // if service instance are already created
099            // destroy all instances
100            // create new service instances and put in pool
101    
102            LOG.logInfo( CONFIG.getServiceIdentification().getTitle() + " (" + CONFIG.getVersion()
103                         + ") service pool initialized." );
104        }
105    
106        /**
107         * Sets the default configuration by URL.
108         * 
109         * @param serviceConfigurationUrl
110         * @throws InvalidConfigurationException
111         */
112        public static void setConfiguration( URL serviceConfigurationUrl )
113                                throws InvalidConfigurationException {
114    
115            try {
116                WMSConfigurationDocument doc = new WMSConfigurationDocument();
117                WMSConfigurationDocument_1_3_0 doc130 = new WMSConfigurationDocument_1_3_0();
118    
119                // changes start here
120                int dc = 50;
121                boolean configured = false;
122                while ( !configured ) {
123                    try {
124                        doc.load( serviceConfigurationUrl );
125    
126                        if ( "1.3.0".equals( doc.getRootElement().getAttribute( "version" ) ) ) {
127                            LOG.logInfo( Messages.getMessage( "WMS_VERSION130" ) );
128                            doc130.load( serviceConfigurationUrl );
129                            doc = null;
130                        } else {
131                            LOG.logInfo( Messages.getMessage( "WMS_VERSIONDEFAULT" ) );
132                            doc130 = null;
133                        }
134    
135                        configured = true;
136                    } catch ( IOException ioe ) {
137                        if ( serviceConfigurationUrl.getProtocol().startsWith( "http" ) && dc > 0 ) {
138                            LOG.logWarning( "No successful connection to the WMS-Configuration-URL, "
139                                            + "trying again in 10 seconds. Will try " + dc
140                                            + " more times to connect." );
141                            Thread.sleep( 10000 );
142                            dc--;
143                        } else {
144                            throw ( ioe );
145                        }
146                    }
147                }
148                // changes end here
149    
150                WMSConfigurationType conf;
151    
152                if ( doc != null ) {
153                    conf = doc.parseConfiguration();
154                } else {
155                    conf = doc130.parseConfiguration();
156                }
157    
158                WMServiceFactory.setConfiguration( conf );
159    
160            } catch ( Exception e ) {
161                LOG.logError( e.getMessage(), e );
162                throw new InvalidConfigurationException( "WMServiceFactory", e.getMessage() );
163            }
164    
165        }
166    
167        /**
168         * Returns a new WMS service instance configured with a previously set default
169         * configuration.
170         * 
171         * @return a new service instance
172         */
173        public static WMService getService() {
174            return WMServiceFactory.getWMSInstance( CONFIG );
175        }
176    
177    }/* ********************************************************************
178     Changes to this class. What the people have been up to:
179     $Log$
180     Revision 1.18  2006/11/29 13:00:36  schmitz
181     Cleaned up WMS messages.
182    
183     Revision 1.17  2006/11/24 09:33:12  schmitz
184     Fixed a bug concerning layer specific scale hints.
185     Using the central i18n mechanism.
186     Changed the localwfs mechanism to just use one WFS and not recreate them.
187    
188     Revision 1.16  2006/10/27 12:23:24  schmitz
189     Formatting changes.
190    
191     Revision 1.15  2006/09/08 08:42:01  schmitz
192     Updated the WMS to be 1.1.1 conformant once again.
193     Cleaned up the WMS code.
194     Added cite WMS test data.
195    
196     Revision 1.14  2006/07/28 08:01:27  schmitz
197     Updated the WMS for 1.1.1 compliance.
198     Fixed some documentation.
199    
200     Revision 1.13  2006/07/12 14:46:17  poth
201     comment footer added
202    
203     ********************************************************************** */