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 }