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     */
017    package org.apache.geronimo.deployment;
018    
019    import java.util.Collection;
020    import java.util.List;
021    import java.util.LinkedHashSet;
022    import java.util.Map;
023    import java.util.Iterator;
024    import java.util.Collections;
025    import java.util.Arrays;
026    import java.io.IOException;
027    
028    import org.apache.geronimo.kernel.config.SimpleConfigurationManager;
029    import org.apache.geronimo.kernel.config.ConfigurationManager;
030    import org.apache.geronimo.kernel.config.ConfigurationStore;
031    import org.apache.geronimo.kernel.config.NoSuchStoreException;
032    import org.apache.geronimo.kernel.config.Configuration;
033    import org.apache.geronimo.kernel.config.LifecycleResults;
034    import org.apache.geronimo.kernel.config.NoSuchConfigException;
035    import org.apache.geronimo.kernel.config.LifecycleException;
036    import org.apache.geronimo.kernel.config.LifecycleMonitor;
037    import org.apache.geronimo.kernel.config.ConfigurationData;
038    import org.apache.geronimo.kernel.config.InvalidConfigException;
039    import org.apache.geronimo.kernel.repository.ArtifactResolver;
040    import org.apache.geronimo.kernel.repository.Artifact;
041    import org.apache.geronimo.kernel.repository.Version;
042    import org.apache.geronimo.gbean.AbstractName;
043    
044    /**
045     * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
046     */
047    public class DeploymentConfigurationManager extends SimpleConfigurationManager {
048        private final ConfigurationManager configurationManager;
049    
050        public DeploymentConfigurationManager(ConfigurationManager configurationManager, Collection repositories) {
051            super(Arrays.asList(configurationManager.getStores()), configurationManager.getArtifactResolver(), repositories);
052            this.configurationManager = configurationManager;
053        }
054    
055        //
056        // GENERAL DATA
057        //
058    
059        public synchronized boolean isInstalled(Artifact configId) {
060            return super.isInstalled(configId);
061        }
062    
063        public synchronized boolean isLoaded(Artifact configId) {
064            return configurationManager.isLoaded(configId) || super.isLoaded(configId);
065        }
066    
067        public synchronized boolean isRunning(Artifact configId) {
068            return configurationManager.isRunning(configId) || super.isRunning(configId);
069        }
070    
071        public boolean isConfiguration(Artifact artifact) {
072            return configurationManager.isConfiguration(artifact) || super.isConfiguration(artifact);
073        }
074    
075        public synchronized Configuration getConfiguration(Artifact configurationId) {
076            Configuration configuration = configurationManager.getConfiguration(configurationId);
077            if (configuration == null) {
078                configuration = super.getConfiguration(configurationId);
079            }
080            return configuration;
081        }
082    
083        public ArtifactResolver getArtifactResolver() {
084            return super.getArtifactResolver();
085        }
086    
087        /**
088         * This configuration manager never starts any configurations
089         * @return false
090         */
091        public boolean isOnline() {
092            return false;
093        }
094    
095        public void setOnline(boolean online) {
096        }
097    
098        //
099        // LOAD
100        //
101    
102        public synchronized LifecycleResults loadConfiguration(Artifact configurationId) throws NoSuchConfigException, LifecycleException {
103            return super.loadConfiguration(configurationId);
104        }
105    
106        public synchronized LifecycleResults loadConfiguration(Artifact configurationId, LifecycleMonitor monitor) throws NoSuchConfigException, LifecycleException {
107            return super.loadConfiguration(configurationId, monitor);
108        }
109    
110        public synchronized LifecycleResults loadConfiguration(ConfigurationData configurationData) throws NoSuchConfigException, LifecycleException {
111            return super.loadConfiguration(configurationData);
112        }
113    
114        public synchronized LifecycleResults loadConfiguration(ConfigurationData configurationData, LifecycleMonitor monitor) throws NoSuchConfigException, LifecycleException {
115            return super.loadConfiguration(configurationData, monitor);
116        }
117    
118        protected Configuration load(ConfigurationData configurationData, LinkedHashSet resolvedParentIds, Map loadedConfigurations) throws InvalidConfigException {
119            return super.load(configurationData, resolvedParentIds, loadedConfigurations);
120        }
121    
122        protected void load(Artifact configurationId) throws NoSuchConfigException {
123            if (configurationModel.containsConfiguration(configurationId)) {
124                super.load(configurationId);
125            }
126        }
127    
128        protected void addNewConfigurationToModel(Configuration configuration) throws NoSuchConfigException {
129            LinkedHashSet loadParents = getLoadParents(configuration);
130            for (Iterator iterator = loadParents.iterator(); iterator.hasNext();) {
131                Configuration loadParent= (Configuration) iterator.next();
132                if (!configurationModel.containsConfiguration(loadParent.getId())) {
133                    configurationModel.addConfiguation(loadParent.getId(), Collections.EMPTY_SET, Collections.EMPTY_SET);
134                    configurationModel.load(loadParent.getId());
135                }
136            }
137            LinkedHashSet startParents = getStartParents(configuration);
138            for (Iterator iterator = startParents.iterator(); iterator.hasNext();) {
139                Configuration startParent = (Configuration) iterator.next();
140                if (!configurationModel.containsConfiguration(startParent.getId())) {
141                    configurationModel.addConfiguation(startParent.getId(), Collections.EMPTY_SET, Collections.EMPTY_SET);
142                    configurationModel.load(startParent.getId());
143                }
144            }
145            super.addNewConfigurationToModel(configuration);
146        }
147    
148        //
149        // UNLOAD
150        //
151    
152        public synchronized LifecycleResults unloadConfiguration(Artifact id) throws NoSuchConfigException {
153            return super.unloadConfiguration(id);
154        }
155    
156        public synchronized LifecycleResults unloadConfiguration(Artifact id, LifecycleMonitor monitor) throws NoSuchConfigException {
157            return super.unloadConfiguration(id, monitor);
158        }
159    
160        protected void unload(Configuration configuration) {
161            super.unload(configuration);
162        }
163    
164        //
165        // STOP.. used by unload
166        //
167        protected void stop(Configuration configuration) {
168            super.stop(configuration);
169        }
170    
171    
172        //
173        // UNSUPPORTED
174        //
175    
176        public Artifact[] getInstalled(Artifact query) {
177            throw new UnsupportedOperationException();
178        }
179    
180        public Artifact[] getLoaded(Artifact query) {
181            throw new UnsupportedOperationException();
182        }
183    
184        public Artifact[] getRunning(Artifact query) {
185            throw new UnsupportedOperationException();
186        }
187    
188        public List listStores() {
189            throw new UnsupportedOperationException();
190        }
191    
192        public ConfigurationStore[] getStores() {
193            throw new UnsupportedOperationException();
194        }
195    
196        public List listConfigurations() {
197            throw new UnsupportedOperationException();
198        }
199    
200        public ConfigurationStore getStoreForConfiguration(Artifact configId) {
201            throw new UnsupportedOperationException();
202        }
203    
204        public List listConfigurations(AbstractName storeName) throws NoSuchStoreException {
205            throw new UnsupportedOperationException();
206        }
207    
208        public synchronized LifecycleResults startConfiguration(Artifact id) throws NoSuchConfigException, LifecycleException {
209            throw new UnsupportedOperationException();
210        }
211    
212        public synchronized LifecycleResults startConfiguration(Artifact id, LifecycleMonitor monitor) throws NoSuchConfigException, LifecycleException {
213            throw new UnsupportedOperationException();
214        }
215    
216        protected void start(Configuration configuration) throws Exception {
217            throw new UnsupportedOperationException();
218        }
219    
220        public synchronized LifecycleResults stopConfiguration(Artifact id) throws NoSuchConfigException {
221            throw new UnsupportedOperationException();
222        }
223    
224        public synchronized LifecycleResults stopConfiguration(Artifact id, LifecycleMonitor monitor) throws NoSuchConfigException {
225            throw new UnsupportedOperationException();
226        }
227    
228        public synchronized LifecycleResults restartConfiguration(Artifact id) throws NoSuchConfigException, LifecycleException {
229            throw new UnsupportedOperationException();
230        }
231    
232        public synchronized LifecycleResults restartConfiguration(Artifact id, LifecycleMonitor monitor) throws NoSuchConfigException, LifecycleException {
233            throw new UnsupportedOperationException();
234        }
235    
236        public synchronized LifecycleResults reloadConfiguration(Artifact id) throws NoSuchConfigException, LifecycleException {
237            throw new UnsupportedOperationException();
238        }
239    
240        public synchronized LifecycleResults reloadConfiguration(Artifact id, LifecycleMonitor monitor) throws NoSuchConfigException, LifecycleException {
241            throw new UnsupportedOperationException();
242        }
243    
244        public synchronized LifecycleResults reloadConfiguration(Artifact id, Version version) throws NoSuchConfigException, LifecycleException {
245            throw new UnsupportedOperationException();
246        }
247    
248        public synchronized LifecycleResults reloadConfiguration(Artifact id, Version version, LifecycleMonitor monitor) throws NoSuchConfigException, LifecycleException {
249            throw new UnsupportedOperationException();
250        }
251    
252        public LifecycleResults reloadConfiguration(ConfigurationData configurationData) throws LifecycleException, NoSuchConfigException {
253            throw new UnsupportedOperationException();
254        }
255    
256        public LifecycleResults reloadConfiguration(ConfigurationData configurationData, LifecycleMonitor monitor) throws LifecycleException, NoSuchConfigException {
257            throw new UnsupportedOperationException();
258        }
259    
260        public synchronized void uninstallConfiguration(Artifact configurationId) throws IOException, NoSuchConfigException {
261            throw new UnsupportedOperationException();
262        }
263    }