001: /**
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */package org.apache.geronimo.kernel.config;
017:
018: import java.util.Iterator;
019: import java.util.LinkedHashSet;
020: import java.util.Map;
021: import java.util.Set;
022: import java.util.TreeMap;
023: import java.util.List;
024: import java.util.ArrayList;
025:
026: import org.apache.geronimo.kernel.repository.Artifact;
027:
028: /**
029: * @version $Rev: 476049 $ $Date: 2006-11-16 20:35:17 -0800 (Thu, 16 Nov 2006) $
030: */
031: public class ConfigurationModel {
032: private final Map configurations = new TreeMap();
033:
034: public void addConfiguation(Artifact configurationId,
035: Set loadParentIds, Set startParentIds)
036: throws NoSuchConfigException {
037: Set startParents = getStatuses(startParentIds);
038:
039: // load parents are a superset of start parents
040: Set loadParents = new LinkedHashSet(startParents);
041: loadParents.addAll(getStatuses(loadParentIds));
042:
043: ConfigurationStatus configurationStatus = new ConfigurationStatus(
044: configurationId, loadParents, startParents);
045: configurations.put(configurationId, configurationStatus);
046: }
047:
048: private Set getStatuses(Set configurationIds)
049: throws NoSuchConfigException {
050: LinkedHashSet statuses = new LinkedHashSet(configurationIds
051: .size());
052: for (Iterator iterator = configurationIds.iterator(); iterator
053: .hasNext();) {
054: Artifact configurationId = (Artifact) iterator.next();
055: ConfigurationStatus configurationStatus = (ConfigurationStatus) configurations
056: .get(configurationId);
057: if (configurationStatus == null) {
058: throw new NoSuchConfigException(configurationId);
059: }
060:
061: statuses.add(configurationStatus);
062: }
063: return statuses;
064: }
065:
066: public void removeConfiguration(Artifact configurationId)
067: throws NoSuchConfigException {
068: ConfigurationStatus configurationStatus = (ConfigurationStatus) configurations
069: .get(configurationId);
070: if (configurationStatus == null) {
071: throw new NoSuchConfigException(configurationId);
072: }
073: configurationStatus.destroy();
074: configurations.remove(configurationId);
075: }
076:
077: public boolean containsConfiguration(Artifact configurationId) {
078: return configurations.containsKey(configurationId);
079: }
080:
081: public void upgradeConfiguration(Artifact existingId,
082: Artifact newId, Set newLoadParentIds, Set newStartParentIds)
083: throws NoSuchConfigException {
084: Set newStartParents = getStatuses(newStartParentIds);
085:
086: // load parents are a superset of start parents
087: Set newLoadParents = new LinkedHashSet(newStartParents);
088: newLoadParents.addAll(getStatuses(newLoadParentIds));
089:
090: ConfigurationStatus configurationStatus = (ConfigurationStatus) configurations
091: .remove(existingId);
092: if (configurationStatus == null) {
093: throw new NoSuchConfigException(existingId);
094: }
095: configurations.put(newId, configurationStatus);
096: configurationStatus.upgrade(newId, newLoadParents,
097: newStartParents);
098: }
099:
100: public boolean isLoaded(Artifact configurationId) {
101: ConfigurationStatus configurationStatus = (ConfigurationStatus) configurations
102: .get(configurationId);
103: if (configurationStatus != null) {
104: return configurationStatus.isLoaded();
105: }
106: return false;
107: }
108:
109: public Artifact[] getLoaded(Artifact query) {
110: List results = new ArrayList();
111: for (Iterator it = configurations.entrySet().iterator(); it
112: .hasNext();) {
113: Map.Entry entry = (Map.Entry) it.next();
114: Artifact test = (Artifact) entry.getKey();
115: ConfigurationStatus status = (ConfigurationStatus) entry
116: .getValue();
117: if (query.matches(test) && status.isLoaded()) {
118: results.add(test);
119: }
120: }
121: return (Artifact[]) results
122: .toArray(new Artifact[results.size()]);
123: }
124:
125: public boolean isStarted(Artifact configurationId) {
126: ConfigurationStatus configurationStatus = (ConfigurationStatus) configurations
127: .get(configurationId);
128: if (configurationStatus != null) {
129: return configurationStatus.isStarted();
130: }
131: return false;
132: }
133:
134: public Artifact[] getStarted(Artifact query) {
135: List results = new ArrayList();
136: for (Iterator it = configurations.entrySet().iterator(); it
137: .hasNext();) {
138: Map.Entry entry = (Map.Entry) it.next();
139: Artifact test = (Artifact) entry.getKey();
140: ConfigurationStatus status = (ConfigurationStatus) entry
141: .getValue();
142: if (query.matches(test) && status.isStarted()) {
143: results.add(test);
144: }
145: }
146: return (Artifact[]) results
147: .toArray(new Artifact[results.size()]);
148: }
149:
150: public LinkedHashSet load(Artifact configurationId)
151: throws NoSuchConfigException {
152: ConfigurationStatus configurationStatus = (ConfigurationStatus) configurations
153: .get(configurationId);
154: if (configurationStatus == null) {
155: throw new NoSuchConfigException(configurationId);
156: }
157: return configurationStatus.load();
158: }
159:
160: public LinkedHashSet start(Artifact configurationId)
161: throws NoSuchConfigException {
162: ConfigurationStatus configurationStatus = (ConfigurationStatus) configurations
163: .get(configurationId);
164: if (configurationStatus == null) {
165: throw new NoSuchConfigException(configurationId);
166: }
167: return configurationStatus.start();
168: }
169:
170: public LinkedHashSet stop(Artifact configurationId)
171: throws NoSuchConfigException {
172: return stop(configurationId, true);
173: }
174:
175: public LinkedHashSet stop(Artifact configurationId, boolean gc)
176: throws NoSuchConfigException {
177: ConfigurationStatus configurationStatus = (ConfigurationStatus) configurations
178: .get(configurationId);
179: if (configurationStatus == null) {
180: throw new NoSuchConfigException(configurationId);
181: }
182: return configurationStatus.stop(gc);
183: }
184:
185: public LinkedHashSet restart(Artifact configurationId)
186: throws NoSuchConfigException {
187: ConfigurationStatus configurationStatus = (ConfigurationStatus) configurations
188: .get(configurationId);
189: if (configurationStatus == null) {
190: throw new NoSuchConfigException(configurationId);
191: }
192: return configurationStatus.restart();
193: }
194:
195: public LinkedHashSet unload(Artifact configurationId)
196: throws NoSuchConfigException {
197: return unload(configurationId, true);
198: }
199:
200: public LinkedHashSet unload(Artifact configurationId, boolean gc)
201: throws NoSuchConfigException {
202: ConfigurationStatus configurationStatus = (ConfigurationStatus) configurations
203: .get(configurationId);
204: if (configurationStatus == null) {
205: throw new NoSuchConfigException(configurationId);
206: }
207: return configurationStatus.unload(gc);
208: }
209:
210: public LinkedHashSet reload(Artifact existingConfigurationId)
211: throws NoSuchConfigException {
212: ConfigurationStatus configurationStatus = (ConfigurationStatus) configurations
213: .get(existingConfigurationId);
214: if (configurationStatus == null) {
215: return new LinkedHashSet();
216: }
217: return configurationStatus.reload();
218: }
219:
220: public Set getLoaded() {
221: Set result = new LinkedHashSet();
222: for (Iterator iterator = configurations.values().iterator(); iterator
223: .hasNext();) {
224: ConfigurationStatus status = (ConfigurationStatus) iterator
225: .next();
226: if (status.isLoaded()) {
227: result.add(status.getConfigurationId());
228: }
229: }
230: return result;
231: }
232:
233: public Set getStarted() {
234: Set result = new LinkedHashSet();
235: for (Iterator iterator = configurations.values().iterator(); iterator
236: .hasNext();) {
237: ConfigurationStatus status = (ConfigurationStatus) iterator
238: .next();
239: if (status.isStarted()) {
240: result.add(status.getConfigurationId());
241: }
242: }
243: return result;
244: }
245:
246: public Set getUserLoaded() {
247: Set result = new LinkedHashSet();
248: for (Iterator iterator = configurations.values().iterator(); iterator
249: .hasNext();) {
250: ConfigurationStatus status = (ConfigurationStatus) iterator
251: .next();
252: if (status.isUserLoaded()) {
253: result.add(status.getConfigurationId());
254: }
255: }
256: return result;
257: }
258:
259: public Set getUserStarted() {
260: Set result = new LinkedHashSet();
261: for (Iterator iterator = configurations.values().iterator(); iterator
262: .hasNext();) {
263: ConfigurationStatus status = (ConfigurationStatus) iterator
264: .next();
265: if (status.isUserStarted()) {
266: result.add(status.getConfigurationId());
267: }
268: }
269: return result;
270: }
271: }
|