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: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
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
164 public ApacheModel(PortletRequest request) {
165 Map map = request.getParameterMap();
166 os = request.getParameter("os");
167 // logFilePath and workersPath need to be encoded before saving
168 // and decoded after fetching
169 logFilePath = request.getParameter("logFilePath");
170 if(logFilePath == null) {
171 logFilePath = PortletManager.getCurrentServer(request).getServerInfo().resolve("var/log/apache_mod_jk.log").getPath();
172 }
173 workersPath = request.getParameter("workersPath");
174 if(workersPath == null) {
175 workersPath = PortletManager.getCurrentServer(request).getServerInfo().resolve("var/config/workers.properties").getPath();
176 }
177 String ajp = request.getParameter("addAjpPort");
178 if(!isEmpty(ajp)) addAjpPort = new Integer(ajp);
179 int index = 0;
180 boolean found = false;
181 while(true) {
182 String key = "webapp."+(index++)+".";
183 if(!map.containsKey(key+"configId")) {
184 break;
185 }
186 found = true;
187 WebAppData data = new WebAppData(request, key);
188 webApps.add(data);
189 }
190 if(!found) {
191 List list = (List) request.getPortletSession(true).getAttribute(WEB_APP_SESSION_KEY);
192 if(list != null) {
193 webApps = list;
194 }
195 }
196 }
197
198 public void save(ActionResponse response, PortletSession session) {
199 if(!isEmpty(os)) response.setRenderParameter("os", os);
200 if(!isEmpty(logFilePath)) response.setRenderParameter("logFilePath", logFilePath);
201 if(!isEmpty(workersPath)) response.setRenderParameter("workersPath", workersPath);
202 if(addAjpPort != null) response.setRenderParameter("addAjpPort", addAjpPort.toString());
203 if(webApps.size() > 0) {
204 session.setAttribute(WEB_APP_SESSION_KEY, webApps);
205 }
206 }
207
208 public String getOs() {
209 return os;
210 }
211
212 public void setOs(String os) {
213 this.os = os;
214 }
215
216 public Integer getAddAjpPort() {
217 return addAjpPort;
218 }
219
220 public void setAddAjpPort(Integer addAjpPort) {
221 this.addAjpPort = addAjpPort;
222 }
223
224 public String getLogFilePath() {
225 return logFilePath;
226 }
227
228 public void setLogFilePath(String logFilePath) {
229 this.logFilePath = logFilePath;
230 }
231
232 public String getWorkersPath() {
233 return workersPath;
234 }
235
236 public void setWorkersPath(String workersPath) {
237 this.workersPath = workersPath;
238 }
239
240 public List getWebApps() {
241 return webApps;
242 }
243
244 public void setWebApps(List webApps) {
245 this.webApps = webApps;
246 }
247 }
248 }