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.console.car;
018    
019    import java.io.IOException;
020    import java.io.Serializable;
021    import java.util.ArrayList;
022    import java.util.List;
023    
024    
025    
026    import javax.portlet.ActionRequest;
027    import javax.portlet.ActionResponse;
028    import javax.portlet.PortletException;
029    import javax.portlet.RenderRequest;
030    import javax.portlet.RenderResponse;
031    
032    
033    import org.apache.geronimo.console.car.ManagementHelper;
034    import org.apache.geronimo.system.plugin.PluginInstallerGBean;
035    import org.apache.geronimo.console.MultiPageModel;
036    import org.apache.geronimo.kernel.repository.Artifact;
037    import org.apache.geronimo.system.plugin.DownloadResults;
038    import org.apache.geronimo.system.plugin.PluginInstaller;
039    
040    /**
041     * Handler for the initial download screen.
042     *
043     * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
044     */
045    public class DownloadStatusHandler extends BaseImportExportHandler {
046        public DownloadStatusHandler() {
047            super(DOWNLOAD_STATUS_MODE, "/WEB-INF/view/car/downloadStatus.jsp");
048        }
049    
050        public String actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
051            return getMode();
052            
053        }
054    
055        public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model) throws PortletException, IOException {
056            String[] configId = request.getParameterValues("configIds");
057            String repo = request.getParameter("repository");
058            String user = request.getParameter("repo-user");
059            String pass = request.getParameter("repo-pass");
060            String downloadKey = request.getParameter("downloadKey");
061            
062            request.setAttribute("repository", repo);
063            request.setAttribute("repouser", user);
064            request.setAttribute("repopass", pass);
065            request.setAttribute("downloadKey", downloadKey);
066            request.setAttribute("configIds", configId);
067            
068        }
069    
070        public String actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
071            PluginInstallerGBean pluginInstaller = (PluginInstallerGBean) ManagementHelper.getManagementHelper(request).getPluginInstaller();
072            String[] configId = request.getParameterValues("configId");
073            String repo = request.getParameter("repository");
074            String user = request.getParameter("repo-user");
075            String pass = request.getParameter("repo-pass");
076            int downloadKey = Integer.parseInt(request.getParameter("download-key"));
077            DownloadResults results = pluginInstaller.checkOnInstall(downloadKey, true);
078    
079            List<InstallResults> dependencies = new ArrayList<InstallResults>();
080            if (results != null) {
081                if(results.isFailed()) {
082                    //TODO is this an appropriate way to explain failure?
083                    throw new PortletException("Unable to install configuration", results.getFailure());
084                }
085                for (Artifact uri: results.getDependenciesInstalled()) {
086                    dependencies.add(new InstallResults(uri.toString(), "installed"));
087                }
088                for (Artifact uri: results.getDependenciesPresent()) {
089                    dependencies.add(new InstallResults(uri.toString(), "already present"));
090                }
091            }
092            request.getPortletSession(true).setAttribute("car.install.results", dependencies);
093            response.setRenderParameter("configId", configId);
094            response.setRenderParameter("repository", repo);
095            if(!isEmpty(user)) response.setRenderParameter("repo-user", user);
096            if(!isEmpty(pass)) response.setRenderParameter("repo-pass", pass);
097            return RESULTS_MODE+BEFORE_ACTION;
098        }
099    
100        public static class InstallResults implements Serializable {
101            private static final long serialVersionUID = -3745382506085182610L;
102            private String name;
103            private String action;
104    
105            public InstallResults(String name, String action) {
106                this.name = name;
107                this.action = action;
108            }
109    
110            public String getName() {
111                return name;
112            }
113    
114            public String getAction() {
115                return action;
116            }
117        }
118    }