1 17 package org.apache.geronimo.console.car; 18 19 import java.io.IOException ; 20 import java.io.BufferedReader ; 21 import java.io.StringReader ; 22 import java.util.List ; 23 import java.util.ArrayList ; 24 import java.net.URL ; 25 import java.net.MalformedURLException ; 26 import javax.portlet.ActionRequest; 27 import javax.portlet.ActionResponse; 28 import javax.portlet.PortletException; 29 import javax.portlet.RenderRequest; 30 import javax.portlet.RenderResponse; 31 import org.apache.commons.logging.Log; 32 import org.apache.commons.logging.LogFactory; 33 import org.apache.geronimo.console.MultiPageModel; 34 import org.apache.geronimo.console.util.PortletManager; 35 import org.apache.geronimo.kernel.repository.Artifact; 36 import org.apache.geronimo.system.plugin.PluginMetadata; 37 38 43 public class ExportConfigHandler extends BaseImportExportHandler { 44 private final static Log log = LogFactory.getLog(ExportConfigHandler.class); 45 46 public ExportConfigHandler() { 47 super(CONFIGURE_EXPORT_MODE, "/WEB-INF/view/car/pluginParams.jsp"); 48 } 49 50 public String actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException { 51 String configId = request.getParameter("configId"); 52 if(configId != null) { 53 response.setRenderParameter("configId", configId); 54 } 55 return getMode(); 56 } 57 58 public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model) throws PortletException, IOException { 59 String configId = request.getParameter("configId"); 60 PluginMetadata data = PortletManager.getCurrentServer(request).getPluginInstaller().getPluginMetadata(Artifact.create(configId)); 61 request.setAttribute("configId", data.getModuleId()); 62 request.setAttribute("name", data.getName()); 63 request.setAttribute("repository", combine(data.getRepositories())); 64 request.setAttribute("category", data.getCategory()); 65 request.setAttribute("url", data.getPluginURL()); 66 request.setAttribute("author", data.getAuthor()); 67 request.setAttribute("description", data.getDescription()); 68 PluginMetadata.License[] licenses = data.getLicenses(); 69 if(licenses != null && licenses.length > 0) { 70 request.setAttribute("license", licenses[0].getName()); 71 if(licenses[0].isOsiApproved()) { 72 request.setAttribute("licenseOSI", "true"); 73 } 74 if(licenses.length > 1) { 75 log.warn("Unable to edit plugin metadata containing more than one license! Additional license data will not be editable."); 76 } 77 } 78 request.setAttribute("gerVersions", combine(data.getGeronimoVersions())); 79 request.setAttribute("jvmVersions", combine(data.getJvmVersions())); 80 request.setAttribute("dependencies", combine(data.getDependencies())); 81 request.setAttribute("obsoletes", combine(data.getObsoletes())); 82 PluginMetadata.Prerequisite[] reqs = data.getPrerequisites(); 83 if(reqs != null && reqs.length > 0) { 84 for (int i = 0; i < reqs.length; i++) { 85 PluginMetadata.Prerequisite req = reqs[i]; 86 String prefix = "prereq" + (i+1); 87 request.setAttribute(prefix, req.getModuleId().toString()); 88 request.setAttribute(prefix +"type", req.getResourceType()); 89 request.setAttribute(prefix +"desc", req.getDescription()); 90 } 91 if(reqs.length > 3) { 92 log.warn("Unable to edit plugin metadata containing more than three prerequisites! Additional prereqs will not be editable."); 93 } 94 } 95 } 96 97 public String actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException { 98 String configId = request.getParameter("configId"); 99 String name = request.getParameter("name"); 100 String repo = request.getParameter("repository"); 101 String category = request.getParameter("category"); 102 String url = request.getParameter("url"); 103 String author = request.getParameter("author"); 104 String description = request.getParameter("description"); 105 String license = request.getParameter("license"); 106 String osi = request.getParameter("licenseOSI"); 107 String gers = request.getParameter("gerVersions"); 108 String jvms = request.getParameter("jvmVersions"); 109 String deps = request.getParameter("dependencies"); 110 String obsoletes = request.getParameter("obsoletes"); 111 PluginMetadata data = PortletManager.getCurrentServer(request).getPluginInstaller().getPluginMetadata(Artifact.create(configId)); 112 PluginMetadata metadata = new PluginMetadata(name, data.getModuleId(), 113 category, description, url, author, null, true, false); 114 metadata.setDependencies(split(deps)); 115 metadata.setGeronimoVersions(split(gers)); 116 metadata.setJvmVersions(split(jvms)); 117 metadata.setObsoletes(split(obsoletes)); 118 List licenses = new ArrayList (); 119 if(license != null && !license.trim().equals("")) { 120 licenses.add(new PluginMetadata.License(license.trim(), osi != null && !osi.equals(""))); 121 } 122 for (int i = 1; i < data.getLicenses().length; i++) { 123 licenses.add(data.getLicenses()[i]); 124 } 125 metadata.setLicenses((PluginMetadata.License[]) licenses.toArray(new PluginMetadata.License[licenses.size()])); 126 List prereqs = new ArrayList (); 127 int counter = 1; 128 while(true) { 129 String prefix = "prereq" + counter; 130 ++counter; 131 String id = request.getParameter(prefix); 132 if(id == null || id.trim().equals("")) { 133 break; 134 } 135 String type = request.getParameter(prefix+"type"); 136 String desc = request.getParameter(prefix+"desc"); 137 if(type != null && type.trim().equals("")) { 138 type = null; 139 } 140 if(desc != null && desc.trim().equals("")) { 141 desc = null; 142 } 143 prereqs.add(new PluginMetadata.Prerequisite(Artifact.create(id), false, type, desc)); 144 } 145 for (int i = 3; i < data.getPrerequisites().length; i++) { 146 PluginMetadata.Prerequisite req = data.getPrerequisites()[i]; 147 prereqs.add(req); 148 } 149 metadata.setPrerequisites((PluginMetadata.Prerequisite[]) prereqs.toArray(new PluginMetadata.Prerequisite[prereqs.size()])); 150 URL [] backupURLs = splitURLs(repo); 151 metadata.setRepositories(backupURLs); 152 153 metadata.setForceStart(data.getForceStart()); 155 metadata.setFilesToCopy(data.getFilesToCopy()); 156 metadata.setConfigXmls(data.getConfigXmls()); 157 PortletManager.getCurrentServer(request).getPluginInstaller().updatePluginMetadata(metadata); 159 160 response.setRenderParameter("configId", configId); 161 response.setRenderParameter("name", name); 162 163 return CONFIRM_EXPORT_MODE+BEFORE_ACTION; 164 } 165 166 private URL [] splitURLs(String backups) throws MalformedURLException { 167 String [] strings = split(backups); 168 URL [] result = new URL [strings.length]; 169 for (int i = 0; i < result.length; i++) { 170 result[i] = new URL (strings[i]); 171 } 172 return result; 173 } 174 175 176 private String [] split(String deps) { 177 if(deps == null || deps.equals("")) { 178 return new String [0]; 179 } 180 List list = new ArrayList (); 181 BufferedReader in = new BufferedReader (new StringReader (deps)); 182 String line; 183 try { 184 while((line = in.readLine()) != null) { 185 line = line.trim(); 186 if(!line.equals("")) { 187 list.add(line); 188 } 189 } 190 in.close(); 191 } catch (IOException e) { 192 log.error("Unable to parse request arguments", e); 193 } 194 return (String []) list.toArray(new String [list.size()]); 195 } 196 197 private String combine(String [] strings) { 198 if(strings == null || strings.length == 0) { 199 return null; 200 } 201 StringBuffer buf = new StringBuffer (); 202 for (int i = 0; i < strings.length; i++) { 203 String string = strings[i]; 204 if(i > 0) { 205 buf.append("\n"); 206 } 207 buf.append(string); 208 } 209 return buf.toString(); 210 } 211 212 private String combine(URL [] urls) { 213 if(urls == null || urls.length == 0) { 214 return null; 215 } 216 StringBuffer buf = new StringBuffer (); 217 for (int i = 0; i < urls.length; i++) { 218 URL url = urls[i]; 219 if(i > 0) { 220 buf.append("\n"); 221 } 222 buf.append(url.toString()); 223 } 224 return buf.toString(); 225 } 226 } 227 | Popular Tags |