001: /*
002: * Copyright 2002-2006 the original author or authors.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: package org.springframework.jdbc.datasource.lookup;
018:
019: import java.util.Collections;
020: import java.util.HashMap;
021: import java.util.Map;
022:
023: import javax.sql.DataSource;
024:
025: import org.springframework.util.Assert;
026:
027: /**
028: * Simple {@link DataSourceLookup} implementation that relies on a map for doing lookups.
029: *
030: * <p>Useful for testing environments or applications that need to match arbitrary
031: * {@link String} names to target {@link DataSource} objects.
032: *
033: * @author Costin Leau
034: * @author Juergen Hoeller
035: * @author Rick Evans
036: * @since 2.0
037: */
038: public class MapDataSourceLookup implements DataSourceLookup {
039:
040: private final Map dataSources = new HashMap(4);
041:
042: /**
043: * Create a new instance of the {@link MapDataSourceLookup} class.
044: */
045: public MapDataSourceLookup() {
046: }
047:
048: /**
049: * Create a new instance of the {@link MapDataSourceLookup} class.
050: * @param dataSources the {@link Map} of {@link DataSource DataSources}; the keys
051: * are {@link String Strings}, the values are actual {@link DataSource} instances.
052: */
053: public MapDataSourceLookup(Map dataSources) {
054: setDataSources(dataSources);
055: }
056:
057: /**
058: * Create a new instance of the {@link MapDataSourceLookup} class.
059: * @param dataSourceName the name under which the supplied {@link DataSource} is to be added
060: * @param dataSource the {@link DataSource} to be added
061: */
062: public MapDataSourceLookup(String dataSourceName,
063: DataSource dataSource) {
064: addDataSource(dataSourceName, dataSource);
065: }
066:
067: /**
068: * Set the {@link Map} of {@link DataSource DataSources}; the keys
069: * are {@link String Strings}, the values are actual {@link DataSource} instances.
070: * <p>If the supplied {@link Map} is <code>null</code>, then this method
071: * call effectively has no effect.
072: * @param dataSources said {@link Map} of {@link DataSource DataSources}
073: */
074: public void setDataSources(Map dataSources) {
075: if (dataSources != null) {
076: this .dataSources.putAll(dataSources);
077: }
078: }
079:
080: /**
081: * Get the {@link Map} of {@link DataSource DataSources} maintained by this object.
082: * <p>The returned {@link Map} is {@link Collections#unmodifiableMap(java.util.Map) unmodifiable}.
083: * @return said {@link Map} of {@link DataSource DataSources} (never <code>null</code>)
084: */
085: public Map getDataSources() {
086: return Collections.unmodifiableMap(this .dataSources);
087: }
088:
089: /**
090: * Add the supplied {@link DataSource} to the map of {@link DataSource DataSources}
091: * maintained by this object.
092: * @param dataSourceName the name under which the supplied {@link DataSource} is to be added
093: * @param dataSource the {@link DataSource} to be so added
094: */
095: public void addDataSource(String dataSourceName,
096: DataSource dataSource) {
097: Assert.notNull(dataSourceName,
098: "DataSource name must not be null");
099: Assert.notNull(dataSource, "DataSource must not be null");
100: this .dataSources.put(dataSourceName, dataSource);
101: }
102:
103: public DataSource getDataSource(String dataSourceName)
104: throws DataSourceLookupFailureException {
105: Assert.notNull(dataSourceName,
106: "DataSource name must not be null");
107: Object value = this .dataSources.get(dataSourceName);
108: if (value == null) {
109: throw new DataSourceLookupFailureException(
110: "No DataSource with name '" + dataSourceName
111: + "' registered");
112: }
113: if (!(value instanceof DataSource)) {
114: throw new DataSourceLookupFailureException(
115: "The object ["
116: + value
117: + "] with name '"
118: + dataSourceName
119: + "' in the DataSource map is not a [javax.sql.DataSource]");
120: }
121: return (DataSource) value;
122: }
123:
124: }
|