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.apache.jk;
018
019 import java.io.Serializable;
020 import java.util.ArrayList;
021 import java.util.List;
022 import java.util.Map;
023 import javax.portlet.ActionResponse;
024 import javax.portlet.PortletRequest;
025 import javax.portlet.PortletSession;
026 import org.apache.geronimo.console.MultiPageAbstractHandler;
027 import org.apache.geronimo.console.MultiPageModel;
028 import org.apache.geronimo.console.util.PortletManager;
029 import org.apache.geronimo.kernel.repository.Artifact;
030 import org.apache.geronimo.gbean.AbstractName;
031
032 /**
033 * The base class for all handlers for this portlet
034 *
035 * @version $Rev: 560981 $ $Date: 2007-07-30 09:54:48 -0400 (Mon, 30 Jul 2007) $
036 */
037 public abstract class BaseApacheHandler extends MultiPageAbstractHandler {
038 protected static final String INDEX_MODE = "index";
039 protected static final String BASIC_CONFIG_MODE = "basic";
040 protected static final String AJP_MODE = "ajp";
041 protected static final String WEB_APP_MODE = "webapp";
042 protected static final String RESULTS_MODE = "results";
043
044 protected BaseApacheHandler(String mode, String viewName) {
045 super(mode, viewName);
046 }
047
048 public final static class WebAppData implements Serializable {
049 private String parentConfigId;
050 private String childName;
051 private String moduleBeanName;
052 private boolean enabled;
053 private String dynamicPattern;
054 private boolean serveStaticContent;
055 private String contextRoot;
056 private String webAppDir;
057
058 public WebAppData(Artifact parentConfigId, String childName, AbstractName moduleBeanName, boolean enabled, String dynamicPattern, boolean serveStaticContent) {
059 this.parentConfigId = parentConfigId.toString();
060 this.enabled = enabled;
061 this.dynamicPattern = dynamicPattern;
062 this.serveStaticContent = serveStaticContent;
063 this.moduleBeanName = moduleBeanName == null ? null : moduleBeanName.toString();
064 this.childName = childName;
065 }
066
067 public WebAppData(PortletRequest request, String prefix) {
068 parentConfigId = request.getParameter(prefix+"configId");
069 childName = request.getParameter(prefix+"childName");
070 moduleBeanName = request.getParameter(prefix+"moduleBeanName");
071 dynamicPattern = request.getParameter(prefix+"dynamicPattern");
072 String test = request.getParameter(prefix+"enabled");
073 enabled = test != null && !test.equals("") && !test.equals("false");
074 test = request.getParameter(prefix+"serveStaticContent");
075 serveStaticContent = test != null && !test.equals("") && !test.equals("false");
076 contextRoot = request.getParameter(prefix+"contextRoot");
077 webAppDir = request.getParameter(prefix+"webAppDir");
078 }
079
080 public void save(ActionResponse response, String prefix) {
081 response.setRenderParameter(prefix+"configId", parentConfigId);
082 response.setRenderParameter(prefix+"moduleBeanName", moduleBeanName);
083 response.setRenderParameter(prefix+"dynamicPattern", dynamicPattern);
084 response.setRenderParameter(prefix+"enabled", Boolean.toString(enabled));
085 response.setRenderParameter(prefix+"serveStaticContent", Boolean.toString(serveStaticContent));
086 if(!isEmpty(contextRoot)) response.setRenderParameter(prefix+"contextRoot", contextRoot);
087 if(!isEmpty(webAppDir)) response.setRenderParameter(prefix+"webAppDir", webAppDir);
088 if(!isEmpty(childName)) response.setRenderParameter(prefix+"childName", childName);
089 }
090
091 public boolean isEnabled() {
092 return enabled;
093 }
094
095 public void setEnabled(boolean enabled) {
096 this.enabled = enabled;
097 }
098
099 public String getParentConfigId() {
100 return parentConfigId;
101 }
102
103 public void setParentConfigId(String parentConfigId) {
104 this.parentConfigId = parentConfigId;
105 }
106
107 public String getDynamicPattern() {
108 return dynamicPattern;
109 }
110
111 public void setDynamicPattern(String dynamicPattern) {
112 this.dynamicPattern = dynamicPattern;
113 }
114
115 public boolean isServeStaticContent() {
116 return serveStaticContent;
117 }
118
119 public void setServeStaticContent(boolean serveStaticContent) {
120 this.serveStaticContent = serveStaticContent;
121 }
122
123 public String getContextRoot() {
124 return contextRoot;
125 }
126
127 public void setContextRoot(String contextRoot) {
128 this.contextRoot = contextRoot;
129 }
130
131 public String getWebAppDir() {
132 return webAppDir;
133 }
134
135 public void setWebAppDir(String webAppDir) {
136 this.webAppDir = webAppDir;
137 }
138
139 public String getChildName() {
140 return childName;
141 }
142
143 public String getModuleBeanName() {
144 return moduleBeanName;
145 }
146
147 public String getName() {
148 return isEmpty(childName) ? parentConfigId : childName;
149 }
150
151 public boolean isRunning() {
152 return webAppDir != null;
153 }
154 }
155
156 public final static class ApacheModel implements MultiPageModel {
157 public final static String WEB_APP_SESSION_KEY = "console.apache.jk.WebApps";
158 private String os;
159 private Integer addAjpPort;
160 private String logFilePath;
161 private String workersPath;
162 private List webApps = new ArrayList();
163 // list of encodings for special chars
164 private String[][] ENCODINGS = {{":", "0x0"},{"\\", "0x1"}};
165
166 public ApacheModel(PortletRequest request) {
167 Map map = request.getParameterMap();
168 os = request.getParameter("os");
169 // logFilePath and workersPath need to be encoded before saving
170 // and decoded after fetching
171 logFilePath = encodePath(request.getParameter("logFilePath"));
172 if(logFilePath == null) {
173 logFilePath = encodePath(PortletManager.getCurrentServer(request).getServerInfo().resolve("var/log/apache_mod_jk.log").getPath());
174 }
175 workersPath = encodePath(request.getParameter("workersPath"));
176 if(workersPath == null) {
177 workersPath = encodePath(PortletManager.getCurrentServer(request).getServerInfo().resolve("var/config/workers.properties").getPath());
178 }
179 String ajp = request.getParameter("addAjpPort");
180 if(!isEmpty(ajp)) addAjpPort = new Integer(ajp);
181 int index = 0;
182 boolean found = false;
183 while(true) {
184 String key = "webapp."+(index++)+".";
185 if(!map.containsKey(key+"configId")) {
186 break;
187 }
188 found = true;
189 WebAppData data = new WebAppData(request, key);
190 webApps.add(data);
191 }
192 if(!found) {
193 List list = (List) request.getPortletSession(true).getAttribute(WEB_APP_SESSION_KEY);
194 if(list != null) {
195 webApps = list;
196 }
197 }
198 }
199
200 public void save(ActionResponse response, PortletSession session) {
201 if(!isEmpty(os)) response.setRenderParameter("os", os);
202 if(!isEmpty(logFilePath)) response.setRenderParameter("logFilePath", logFilePath);
203 if(!isEmpty(workersPath)) response.setRenderParameter("workersPath", workersPath);
204 if(addAjpPort != null) response.setRenderParameter("addAjpPort", addAjpPort.toString());
205 if(webApps.size() > 0) {
206 session.setAttribute(WEB_APP_SESSION_KEY, webApps);
207 }
208 }
209
210 private String encodePath(String value) {
211 if(value == null) {
212 return value;
213 }
214 for(int i = 0; i < ENCODINGS.length; i++) {
215 if(value.contains(ENCODINGS[i][0])) {
216 value = value.replace(ENCODINGS[i][0], ENCODINGS[i][1]);
217 }
218 }
219 return value;
220 }
221
222 private String decodePath(String value) {
223 if(value == null) {
224 return value;
225 }
226 for(int i = 0; i < ENCODINGS.length; i++) {
227 if(value.contains(ENCODINGS[i][1])) {
228 value = value.replace(ENCODINGS[i][1], ENCODINGS[i][0]);
229 }
230 }
231 return value;
232 }
233
234 public String getOs() {
235 return os;
236 }
237
238 public void setOs(String os) {
239 this.os = os;
240 }
241
242 public Integer getAddAjpPort() {
243 return addAjpPort;
244 }
245
246 public void setAddAjpPort(Integer addAjpPort) {
247 this.addAjpPort = addAjpPort;
248 }
249
250 public String getLogFilePath() {
251 return decodePath(logFilePath);
252 }
253
254 public void setLogFilePath(String logFilePath) {
255 this.logFilePath = logFilePath;
256 }
257
258 public String getWorkersPath() {
259 return decodePath(workersPath);
260 }
261
262 public void setWorkersPath(String workersPath) {
263 this.workersPath = workersPath;
264 }
265
266 public List getWebApps() {
267 return webApps;
268 }
269
270 public void setWebApps(List webApps) {
271 this.webApps = webApps;
272 }
273 }
274 }