1 /**
2 * Copyright 2003-2006 Greg Luck
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 package net.sf.ehcache.config;
18
19 import net.sf.ehcache.ObjectExistsException;
20
21 import java.util.HashMap;
22 import java.util.Map;
23 import java.util.Set;
24
25 /**
26 * A bean, used by BeanUtils, to set configuration from an XML configuration file.
27 * @author <a href="mailto:gluck@thoughtworks.com">Greg Luck</a>
28 * @version $Id: Configuration.java 52 2006-04-24 14:50:03Z gregluck $
29 */
30 public final class Configuration {
31
32 private DiskStoreConfiguration diskStoreConfiguration;
33 private CacheConfiguration defaultCacheConfiguration;
34 private FactoryConfiguration cacheManagerPeerProviderFactoryConfiguration;
35 private FactoryConfiguration cacheManagerPeerListenerFactoryConfiguration;
36 private FactoryConfiguration cacheManagerEventListenerFactoryConfiguration;
37 private final Map cacheConfigurations = new HashMap();
38 private String configurationSource;
39
40 /**
41 * Empty constructor, which is used by {@link ConfigurationFactory}, and can be also sued programmatically.
42 * <p/>
43 * If you are using it programmtically you need to call the relevant add and setter methods in this class to
44 * populate everything.
45 */
46 public Configuration() { }
47
48
49 /**
50 * Allows {@link BeanHandler} to add disk store location to the configuration.
51 */
52 public final void addDiskStore(DiskStoreConfiguration diskStoreConfigurationParameter) throws ObjectExistsException {
53 if (diskStoreConfiguration != null) {
54 throw new ObjectExistsException("The Disk Store has already been configured");
55 }
56 diskStoreConfiguration = diskStoreConfigurationParameter;
57 }
58
59 /**
60 * Allows {@link BeanHandler} to add the CacheManagerEventListener to the configuration.
61 */
62 public final void addCacheManagerEventListenerFactory(FactoryConfiguration
63 cacheManagerEventListenerFactoryConfiguration) throws ObjectExistsException {
64 if (this.cacheManagerEventListenerFactoryConfiguration == null) {
65 this.cacheManagerEventListenerFactoryConfiguration = cacheManagerEventListenerFactoryConfiguration;
66 }
67 }
68
69 /**
70 * Adds a CachePeerProviderFactoryConfiguration.
71 */
72 public final void addCacheManagerPeerProviderFactory(FactoryConfiguration factory) {
73 if (cacheManagerPeerProviderFactoryConfiguration == null) {
74 cacheManagerPeerProviderFactoryConfiguration = factory;
75 }
76 }
77
78 /**
79 * Adds a CachePeerProviderFactoryConfiguration.
80 * cachePeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
81 * properties="hostName=localhost, port=5000"
82 */
83 public final void addCacheManagerPeerListenerFactory(FactoryConfiguration factory) {
84 if (cacheManagerPeerListenerFactoryConfiguration == null) {
85 cacheManagerPeerListenerFactoryConfiguration = factory;
86 }
87 }
88
89
90 /**
91 * Allows {@link BeanHandler} to add a default configuration to the configuration.
92 */
93 public final void addDefaultCache(CacheConfiguration defaultCacheConfiguration) throws ObjectExistsException {
94 if (this.defaultCacheConfiguration != null) {
95 throw new ObjectExistsException("The Default Cache has already been configured");
96 }
97 this.defaultCacheConfiguration = defaultCacheConfiguration;
98 }
99
100 /**
101 * Allows {@link BeanHandler} to add Cache Configurations to the configuration.
102 */
103 public final void addCache(CacheConfiguration cacheConfiguration) throws ObjectExistsException {
104 if (cacheConfigurations.get(cacheConfiguration.name) != null) {
105 throw new ObjectExistsException("Cannot create cache: " + cacheConfiguration.name
106 + " with the same name as an existing one.");
107 }
108 if (cacheConfiguration.name.equalsIgnoreCase(net.sf.ehcache.Cache.DEFAULT_CACHE_NAME)) {
109 throw new ObjectExistsException("The Default Cache has already been configured");
110 }
111
112 cacheConfigurations.put(cacheConfiguration.name, cacheConfiguration);
113 }
114
115 /**
116 * Gets a Map of cacheConfigurations.
117 */
118 public final Set getCacheConfigurationsKeySet() {
119 return cacheConfigurations.keySet();
120 }
121
122 /**
123 * @return the configuration's default cache configuration
124 */
125 public final CacheConfiguration getDefaultCacheConfiguration() {
126 return defaultCacheConfiguration;
127 }
128
129 /**
130 *
131 * @param defaultCacheConfiguration
132 */
133 public final void setDefaultCacheConfiguration(CacheConfiguration defaultCacheConfiguration) {
134 this.defaultCacheConfiguration = defaultCacheConfiguration;
135 }
136
137
138 /**
139 * Gets the disk store configuration.
140 */
141 public final DiskStoreConfiguration getDiskStoreConfiguration() {
142 return diskStoreConfiguration;
143 }
144
145 /**
146 * Gets the CacheManagerPeerProvider factory configuration.
147 */
148 public final FactoryConfiguration getCacheManagerPeerProviderFactoryConfiguration() {
149 return cacheManagerPeerProviderFactoryConfiguration;
150 }
151
152 /**
153 * Gets the CacheManagerPeerListener factory configuration.
154 */
155 public final FactoryConfiguration getCacheManagerPeerListenerFactoryConfiguration() {
156 return cacheManagerPeerListenerFactoryConfiguration;
157 }
158
159 /**
160 * Gets the CacheManagerEventListener factory configuration.
161 */
162 public final FactoryConfiguration getCacheManagerEventListenerFactoryConfiguration() {
163 return cacheManagerEventListenerFactoryConfiguration;
164 }
165
166 /**
167 * Gets a Map of cache configurations, keyed by name.
168 */
169 public final Map getCacheConfigurations() {
170 return cacheConfigurations;
171 }
172
173 /**
174 * Sets the configuration source.
175 * @param configurationSource an informative description of the source, preferably
176 * including the resource name and location.
177 */
178 public final void setSource(String configurationSource) {
179 this.configurationSource = configurationSource;
180 }
181
182 /**
183 * Gets a description of the source from which this configuration was created.
184 */
185 public final String getConfigurationSource() {
186 return configurationSource;
187 }
188 }