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.BufferedReader; 021 import java.io.StringReader; 022 import java.util.List; 023 import java.util.ArrayList; 024 import java.net.URL; 025 import java.net.MalformedURLException; 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 import org.apache.commons.logging.Log; 032 import org.apache.commons.logging.LogFactory; 033 import org.apache.geronimo.console.MultiPageModel; 034 import org.apache.geronimo.console.util.PortletManager; 035 import org.apache.geronimo.kernel.repository.Artifact; 036 import org.apache.geronimo.system.plugin.PluginMetadata; 037 038 /** 039 * Handler for the screen where you configure plugin data before exporting 040 * 041 * @version $Rev: 555767 $ $Date: 2007-07-12 17:07:21 -0400 (Thu, 12 Jul 2007) $ 042 */ 043 public class ExportConfigHandler extends BaseImportExportHandler { 044 private final static Log log = LogFactory.getLog(ExportConfigHandler.class); 045 046 public ExportConfigHandler() { 047 super(CONFIGURE_EXPORT_MODE, "/WEB-INF/view/car/pluginParams.jsp"); 048 } 049 050 public String actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException { 051 String configId = request.getParameter("configId"); 052 if(configId != null) { 053 response.setRenderParameter("configId", configId); 054 } 055 return getMode(); 056 } 057 058 public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model) throws PortletException, IOException { 059 String configId = request.getParameter("configId"); 060 PluginMetadata data = PortletManager.getCurrentServer(request).getPluginInstaller().getPluginMetadata(Artifact.create(configId)); 061 request.setAttribute("configId", data.getModuleId()); 062 request.setAttribute("name", data.getName()); 063 request.setAttribute("repository", combine(data.getRepositories())); 064 request.setAttribute("category", data.getCategory()); 065 request.setAttribute("url", data.getPluginURL()); 066 request.setAttribute("author", data.getAuthor()); 067 request.setAttribute("description", data.getDescription()); 068 PluginMetadata.License[] licenses = data.getLicenses(); 069 if(licenses != null && licenses.length > 0) { 070 request.setAttribute("license", licenses[0].getName()); 071 if(licenses[0].isOsiApproved()) { 072 request.setAttribute("licenseOSI", "true"); 073 } 074 if(licenses.length > 1) { 075 log.warn("Unable to edit plugin metadata containing more than one license! Additional license data will not be editable."); 076 } 077 } 078 //Choose the first geronimo-versions element and set the config version element to that version number. 079 PluginMetadata.geronimoVersions[] gerVers = data.getGeronimoVersions(); 080 if(gerVers != null && gerVers.length > 0) { 081 request.setAttribute("geronimoVersion",gerVers[0].getVersion()); 082 } 083 request.setAttribute("jvmVersions", combine(data.getJvmVersions())); 084 request.setAttribute("dependencies", combine(data.getDependencies())); 085 request.setAttribute("obsoletes", combine(data.getObsoletes())); 086 PluginMetadata.Prerequisite[] reqs = data.getPrerequisites(); 087 if(reqs != null && reqs.length > 0) { 088 for (int i = 0; i < reqs.length; i++) { 089 PluginMetadata.Prerequisite req = reqs[i]; 090 String prefix = "prereq" + (i+1); 091 request.setAttribute(prefix, req.getModuleId().toString()); 092 request.setAttribute(prefix +"type", req.getResourceType()); 093 request.setAttribute(prefix +"desc", req.getDescription()); 094 } 095 if(reqs.length > 3) { 096 log.warn("Unable to edit plugin metadata containing more than three prerequisites! Additional prereqs will not be editable."); 097 } 098 } 099 } 100 101 public String actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException { 102 String configId = request.getParameter("configId"); 103 String name = request.getParameter("name"); 104 String repo = request.getParameter("repository"); 105 String category = request.getParameter("category"); 106 String url = request.getParameter("url"); 107 String author = request.getParameter("author"); 108 String description = request.getParameter("description"); 109 String license = request.getParameter("license"); 110 String osi = request.getParameter("licenseOSI"); 111 String jvms = request.getParameter("jvmVersions"); 112 String deps = request.getParameter("dependencies"); 113 String obsoletes = request.getParameter("obsoletes"); 114 PluginMetadata data = PortletManager.getCurrentServer(request).getPluginInstaller().getPluginMetadata(Artifact.create(configId)); 115 PluginMetadata metadata = new PluginMetadata(name, data.getModuleId(), 116 category, description, url, author, null, true, false); 117 metadata.setDependencies(split(deps)); 118 metadata.setJvmVersions(split(jvms)); 119 metadata.setObsoletes(split(obsoletes)); 120 List licenses = new ArrayList(); 121 if(license != null && !license.trim().equals("")) { 122 licenses.add(new PluginMetadata.License(license.trim(), osi != null && !osi.equals(""))); 123 } 124 for (int i = 1; i < data.getLicenses().length; i++) { 125 licenses.add(data.getLicenses()[i]); 126 } 127 metadata.setLicenses((PluginMetadata.License[]) licenses.toArray(new PluginMetadata.License[licenses.size()])); 128 //Take the geronimo version and throw it into a geronimo-versions element and then add it to the metadata object. 129 PluginMetadata.geronimoVersions geronimoVersion = null; 130 String version = request.getParameter("geronimoVersion"); 131 List gerVersions = new ArrayList(); 132 gerVersions.add(new PluginMetadata.geronimoVersions(version,null,null,null)); 133 metadata.setGeronimoVersions((PluginMetadata.geronimoVersions[])gerVersions.toArray(new PluginMetadata.geronimoVersions[gerVersions.size()])); 134 List prereqs = new ArrayList(); 135 int counter = 1; 136 while(true) { 137 String prefix = "prereq" + counter; 138 ++counter; 139 String id = request.getParameter(prefix); 140 if(id == null || id.trim().equals("")) { 141 break; 142 } 143 String type = request.getParameter(prefix+"type"); 144 String desc = request.getParameter(prefix+"desc"); 145 if(type != null && type.trim().equals("")) { 146 type = null; 147 } 148 if(desc != null && desc.trim().equals("")) { 149 desc = null; 150 } 151 prereqs.add(new PluginMetadata.Prerequisite(Artifact.create(id), false, type, desc)); 152 } 153 for (int i = 3; i < data.getPrerequisites().length; i++) { 154 PluginMetadata.Prerequisite req = data.getPrerequisites()[i]; 155 prereqs.add(req); 156 } 157 metadata.setPrerequisites((PluginMetadata.Prerequisite[]) prereqs.toArray(new PluginMetadata.Prerequisite[prereqs.size()])); 158 URL[] backupURLs = splitURLs(repo); 159 metadata.setRepositories(backupURLs); 160 161 // TODO: Fields not yet handled by the UI 162 metadata.setForceStart(data.getForceStart()); 163 metadata.setFilesToCopy(data.getFilesToCopy()); 164 metadata.setConfigXmls(data.getConfigXmls()); 165 // Save updated metadata 166 PortletManager.getCurrentServer(request).getPluginInstaller().updatePluginMetadata(metadata); 167 168 response.setRenderParameter("configId", configId); 169 response.setRenderParameter("name", name); 170 171 return CONFIRM_EXPORT_MODE+BEFORE_ACTION; 172 } 173 174 private URL[] splitURLs(String backups) throws MalformedURLException { 175 String[] strings = split(backups); 176 URL[] result = new URL[strings.length]; 177 for (int i = 0; i < result.length; i++) { 178 result[i] = new URL(strings[i]); 179 } 180 return result; 181 } 182 183 184 private String[] split(String deps) { 185 if(deps == null || deps.equals("")) { 186 return new String[0]; 187 } 188 List list = new ArrayList(); 189 BufferedReader in = new BufferedReader(new StringReader(deps)); 190 String line; 191 try { 192 while((line = in.readLine()) != null) { 193 line = line.trim(); 194 if(!line.equals("")) { 195 list.add(line); 196 } 197 } 198 in.close(); 199 } catch (IOException e) { 200 log.error("Unable to parse request arguments", e); 201 } 202 return (String[]) list.toArray(new String[list.size()]); 203 } 204 205 private String combine(String[] strings) { 206 if(strings == null || strings.length == 0) { 207 return null; 208 } 209 StringBuffer buf = new StringBuffer(); 210 for (int i = 0; i < strings.length; i++) { 211 String string = strings[i]; 212 if(i > 0) { 213 buf.append("\n"); 214 } 215 buf.append(string); 216 } 217 return buf.toString(); 218 } 219 220 private String combine(URL[] urls) { 221 if(urls == null || urls.length == 0) { 222 return null; 223 } 224 StringBuffer buf = new StringBuffer(); 225 for (int i = 0; i < urls.length; i++) { 226 URL url = urls[i]; 227 if(i > 0) { 228 buf.append("\n"); 229 } 230 buf.append(url.toString()); 231 } 232 return buf.toString(); 233 } 234 }