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.system.plugin;
018    
019    import java.io.IOException;
020    import java.io.File;
021    import java.net.URL;
022    import java.util.Map;
023    import javax.security.auth.login.FailedLoginException;
024    import org.apache.geronimo.kernel.repository.Artifact;
025    
026    /**
027     * Knows how to import and export configurations
028     *
029     * @version $Rev: 476049 $ $Date: 2006-11-16 23:35:17 -0500 (Thu, 16 Nov 2006) $
030     */
031    public interface PluginInstaller {
032        /**
033         * Lists the plugins available for download in a particular Geronimo repository.
034         *
035         * @param mavenRepository The base URL to the maven repository.  This must
036         *                        contain the file geronimo-plugins.xml
037         * @param username Optional username, if the maven repo uses HTTP Basic authentication.
038         *                 Set this to null if no authentication is required.
039         * @param password Optional password, if the maven repo uses HTTP Basic authentication.
040         *                 Set this to null if no authentication is required.
041         */
042        public PluginList listPlugins(URL mavenRepository, String username, String password) throws IOException, FailedLoginException;
043    
044        /**
045         * Lists the plugins installed in the local Geronimo server, by name and
046         * ID.
047         *
048         * @return A Map with key type String (plugin name) and value type Artifact
049         *         (config ID of the plugin).
050         */
051        public Map getInstalledPlugins();
052    
053        /**
054         * Gets a CofigurationMetadata for a configuration installed in the local
055         * server.  Should load a saved one if available, or else create a new
056         * default one to the best of its abilities.
057         *
058         * @param moduleId Identifies the configuration.  This must match a
059         *                 configuration currently installed in the local server.
060         *                 The configId must be fully resolved (isResolved() == true)
061         */
062        public PluginMetadata getPluginMetadata(Artifact moduleId);
063    
064        /**
065         * Saves a ConfigurationMetadata for a particular plugin, if the server is
066         * able to record it.  This can be used if you later re-export the plugin,
067         * or just want to review the information for a particular installed
068         * plugin.
069         *
070         * @param metadata The data to save.  The contained configId (which must
071         *                 be fully resolved) identifies the configuration to save
072         *                 this for.
073         */
074        public void updatePluginMetadata(PluginMetadata metadata);
075    
076        /**
077         * Installs a configuration from a remote repository into the local Geronimo server,
078         * including all its dependencies.  The caller will get the results when the
079         * operation completes.  Note that this method does not throw exceptions on failure,
080         * but instead sets the failure property of the DownloadResults.
081         *
082         * @param username         Optional username, if the maven repo uses HTTP Basic authentication.
083         *                         Set this to null if no authentication is required.
084         * @param password         Optional password, if the maven repo uses HTTP Basic authentication.
085         *                         Set this to null if no authentication is required.
086         * @param pluginsToInstall The list of configurations to install
087         */
088        public DownloadResults install(PluginList pluginsToInstall, String username, String password);
089    
090        /**
091         * Installs a configuration from a remote repository into the local Geronimo server,
092         * including all its dependencies.  The method blocks until the operation completes,
093         * but the caller will be notified of progress frequently along the way (using the
094         * supplied DownloadPoller).  Therefore the caller is meant to create the poller and
095         * then call this method in a background thread.  Note that this method does not
096         * throw exceptions on failure, but instead sets the failure property of the
097         * DownloadPoller.
098         *
099         * @param pluginsToInstall The list of configurations to install
100         * @param username         Optional username, if the maven repo uses HTTP Basic authentication.
101         *                         Set this to null if no authentication is required.
102         * @param password         Optional password, if the maven repo uses HTTP Basic authentication.
103         *                         Set this to null if no authentication is required.
104         * @param poller           Will be notified with status updates as the download proceeds
105         */
106        public void install(PluginList pluginsToInstall, String username, String password, DownloadPoller poller);
107    
108        /**
109         * Installs a configuration from a remote repository into the local Geronimo server,
110         * including all its dependencies.  The method returns immediately, providing a key
111         * that can be used to poll the status of the download operation.  Note that the
112         * installation does not throw exceptions on failure, but instead sets the failure
113         * property of the DownloadResults that the caller can poll for.
114         *
115         * @param pluginsToInstall The list of configurations to install
116         * @param username         Optional username, if the maven repo uses HTTP Basic authentication.
117         *                         Set this to null if no authentication is required.
118         * @param password         Optional password, if the maven repo uses HTTP Basic authentication.
119         *                         Set this to null if no authentication is required.
120         *
121         * @return A key that can be passed to checkOnInstall
122         */
123        public Object startInstall(PluginList pluginsToInstall, String username, String password);
124    
125        /**
126         * Installs a configuration downloaded from a remote repository into the local Geronimo
127         * server, including all its dependencies.  The method returns immediately, providing a
128         * key that can be used to poll the status of the download operation.  Note that the
129         * installation does not throw exceptions on failure, but instead sets the failure
130         * property of the DownloadResults that the caller can poll for.
131         *
132         * @param carFile   A CAR file downloaded from a remote repository.  This is a packaged
133         *                  configuration with included configuration information, but it may
134         *                  still have external dependencies that need to be downloaded
135         *                  separately.  The metadata in the CAR file includes a repository URL
136         *                  for these downloads, and the username and password arguments are
137         *                  used in conjunction with that.
138         * @param username  Optional username, if the maven repo uses HTTP Basic authentication.
139         *                  Set this to null if no authentication is required.
140         * @param password  Optional password, if the maven repo uses HTTP Basic authentication.
141         *                  Set this to null if no authentication is required.
142         *
143         * @return A key that can be passed to checkOnInstall
144         */
145        public Object startInstall(File carFile, String username, String password);
146    
147        /**
148         * Gets the current progress of a download operation.  Note that once the
149         * DownloadResults is returned for this operation shows isFinished = true,
150         * the operation will be forgotten, so the caller should be careful not to
151         * call this again after the download has finished.
152         *
153         * @param key Identifies the operation to check on
154         */
155        public DownloadResults checkOnInstall(Object key);
156    }