001 /*---------------- FILE HEADER ------------------------------------------
002
003 This file is part of deegree.
004 Copyright (C) 2001-2007 by:
005 lat/lon GmbH
006 http://www.lat-lon.de
007
008 This library is free software; you can redistribute it and/or
009 modify it under the terms of the GNU Lesser General Public
010 License as published by the Free Software Foundation; either
011 version 2.1 of the License, or (at your option) any later version.
012
013 This library is distributed in the hope that it will be useful,
014 but WITHOUT ANY WARRANTY; without even the implied warranty of
015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
016 Lesser General Public License for more details.
017
018 You should have received a copy of the GNU Lesser General Public
019 License along with this library; if not, write to the Free Software
020 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
021
022 Contact:
023
024 Andreas Poth
025 lat/lon GmbH
026 Aennchenstr. 19
027 53115 Bonn
028 Germany
029 E-Mail: poth@lat-lon.de
030
031 ---------------------------------------------------------------------------*/
032 package org.deegree.model.crs;
033
034 import java.io.InputStream;
035 import java.net.URL;
036 import java.util.HashMap;
037 import java.util.Map;
038 import java.util.Properties;
039
040 import org.deegree.framework.log.ILogger;
041 import org.deegree.framework.log.LoggerFactory;
042 import org.deegree.model.crs.CSAccess;
043
044 /**
045 *
046 *
047 *
048 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
049 * @author last edited by: $Author: poth $
050 *
051 * @version. $Revision: 1.2 $, $Date: 2007-06-11 11:33:58 $
052 */
053 public class CSAccessFactory {
054
055 private static final ILogger LOG = LoggerFactory.getLogger( CSAccessFactory.class );
056
057 /**
058 * access key to default CSAccess class
059 */
060 public static final String CSA_DEFAULT = "default";
061
062 public static final String CSA_DEEGREE_OLD = "deegree_old";
063
064 public static final String CSA_DEEGREE_NEW = "deegree_new";
065
066 private static final String CSACCESS_RESOURCE = "csaccessfactory.properties";
067
068 private static Map<String, CSAccess> csAccess = new HashMap<String, CSAccess>();
069
070 /**
071 * returns an instance of the default CSAccess class (default CSAccess assigend to key
072 * 'deegree_new')
073 *
074 * @return instance of the default CSAccess class
075 */
076 public static CSAccess getCSAccess() {
077 return getCSAccess( CSA_DEFAULT );
078 }
079
080 /**
081 * returns an instance of the CSAccess class assigend to the passed key
082 *
083 * @param csAccessKey
084 * @return instance of the CSAccess class assigend to the passed key
085 */
086 public static CSAccess getCSAccess( String csAccessKey ) {
087
088 if ( csAccess.get( csAccessKey ) == null ) {
089 initialCSAccess( csAccessKey );
090 }
091 return csAccess.get( csAccessKey );
092 }
093
094 /**
095 * creates an instance of the CSAccess class assigend to the passed key and writes it into the
096 * caching map
097 *
098 * @param csAccessKey
099 */
100 private static void initialCSAccess( String csAccessKey ) {
101
102 URL url = CSAccessFactory.class.getResource( CSACCESS_RESOURCE );
103 Properties props = new Properties();
104 try {
105 InputStream is = url.openStream();
106 props.load( is );
107 is.close();
108 } catch ( Exception e ) {
109 LOG.logError( e.getMessage(), e );
110 throw new CSAccessFactoryException( "could not load csaccess resource: " + CSACCESS_RESOURCE );
111 }
112 String clzzName = props.getProperty( csAccessKey );
113
114 if ( clzzName == null ) {
115 throw new CSAccessFactoryException( "no CSAccess class defined for key: " + csAccessKey );
116 }
117
118 try {
119 csAccess.put( csAccessKey, (CSAccess) Class.forName( clzzName ).newInstance() );
120 } catch ( InstantiationException e ) {
121 LOG.logError( e.getMessage(), e );
122 throw new CSAccessFactoryException( "could not initialize: " + clzzName );
123 } catch ( IllegalAccessException e ) {
124 LOG.logError( e.getMessage(), e );
125 throw new CSAccessFactoryException( "the current process is not allowed to access: " + clzzName );
126 } catch ( ClassNotFoundException e ) {
127 LOG.logError( e.getMessage(), e );
128 throw new CSAccessFactoryException( "class: " + clzzName + " has not been found in classpath" );
129 }
130
131 }
132
133 }