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    
018    package org.apache.geronimo.kernel.config;
019    
020    import java.io.File;
021    import java.io.IOException;
022    import java.io.OutputStream;
023    import java.net.MalformedURLException;
024    import java.net.URL;
025    import java.util.List;
026    import java.util.Set;
027    
028    import org.apache.geronimo.kernel.repository.Artifact;
029    import org.apache.geronimo.gbean.AbstractName;
030    
031    /**
032     * Interface to a store for Configurations.
033     *
034     * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
035     */
036    public interface ConfigurationStore {
037        
038        /**
039         * Determines if the identified configuration is an in-place one. This 
040         * means that the configuration store only stores some meta-data and the 
041         * actual content of the configuration is rooted somewhere else.
042         * 
043         * @param configId the unique ID of the configuration, which must be fully
044         *                 resolved (isResolved() == true)
045         *
046         * @return true if the identified configuration is an in-place one.
047         *
048         * @throws NoSuchConfigException if the configuration is not contained in
049         *                               the store
050         * @throws IOException If the store cannot be read.
051         */
052        boolean isInPlaceConfiguration(Artifact configId) throws NoSuchConfigException, IOException;
053        
054        /**
055         * Move the unpacked configuration directory into this store
056         *
057         * @param configurationData the configuration data
058         * @throws IOException if the direcotyr could not be moved into the store
059         * @throws InvalidConfigException if there is a configuration problem within the source direcotry
060         */
061        void install(ConfigurationData configurationData) throws IOException, InvalidConfigException;
062    
063        /**
064         * Removes a configuration from the store
065         *
066         * @param configId the id of the configuration to remove, which must be
067         *                 fully resolved (isResolved() == true)
068         *
069         * @throws NoSuchConfigException if the configuration is not contained in the store
070         * @throws IOException if a problem occurs during the removal
071         */
072        void uninstall(Artifact configId) throws NoSuchConfigException, IOException;
073    
074        /**
075         * Loads the specified configuration into the kernel
076         *
077         * @param configId the id of the configuration to load, which must be fully
078         *                 resolved (isResolved() == true)
079         *
080         * @return the the configuration object
081         *
082         * @throws NoSuchConfigException if the configuration is not contained in the kernel
083         * @throws IOException if a problem occurs loading the configuration from the store
084         * @throws InvalidConfigException if the configuration is corrupt
085         */
086        ConfigurationData loadConfiguration(Artifact configId) throws NoSuchConfigException, IOException, InvalidConfigException;
087    
088        /**
089         * Determines if the store contains a configuration with the specified ID.
090         * The configuration need not be loaded or running, this just checks
091         * whether the configuration store has the data for it.
092         *
093         * @param configId the unique ID of the configuration, which must be fully
094         *                 resolved (isResolved() == true)
095         *
096         * @return true if the store contains the configuration
097         */
098        boolean containsConfiguration(Artifact configId);
099    
100        /**
101         * Return the object name for the store.
102         *
103         * @return the object name for the store
104         */
105        String getObjectName();
106    
107        /**
108         * Return the object name for the store.
109         *
110         * @return the object name for the store
111         */
112        AbstractName getAbstractName();
113    
114        /**
115         * Return the configurations in the store
116         *
117         * @return a List (with entries of type ConfigurationInfo) of all the
118         *         configurations contained in this configuration store
119         */
120        List<ConfigurationInfo> listConfigurations();
121    
122        /**
123         * Creates an empty directory for a new configuration with the specified configId
124         *
125         * @param configId the unique ID of the configuration, which must be fully
126         *                 resolved (isResolved() == true)
127         *
128         * @return the location of the new directory
129         * 
130         * @throws ConfigurationAlreadyExistsException if the configuration already exists in this store
131         */
132        File createNewConfigurationDir(Artifact configId) throws ConfigurationAlreadyExistsException;
133    
134        /**
135         * Locate the physical locations which match the supplied path in the given
136         * artifact/module.  The path may be an Ant-style pattern.
137         *
138         * @param configId    the artifact to search, which must be fully resolved
139         *                    (isResolved() == true)
140         * @param moduleName  the module name or null to search in the top-level
141         *                    artifact location
142         * @param path        the pattern to search for within the artifact/module,
143         *                    which may also be null to identify the artifact or
144         *                    module base path
145         *
146         * @return a Set (with entries of type URL) of the matching locations
147         */
148        Set<URL> resolve(Artifact configId, String moduleName, String path) throws NoSuchConfigException, MalformedURLException;
149    
150        /**
151         * Exports a configuration as a ZIP file.
152         *
153         * @param configId  The unique ID of the configuration to export, which
154         *                  must be fully resolved (isResolved() == true)
155         * @param output    The stream to write the ZIP content to
156         */
157        void exportConfiguration(Artifact configId, OutputStream output) throws IOException, NoSuchConfigException;
158    }