KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > geronimo > console > logmanager > WebAccessLogViewerPortlet


1 /**
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */

17
18 package org.apache.geronimo.console.logmanager;
19
20 import org.apache.commons.logging.Log;
21 import org.apache.commons.logging.LogFactory;
22 import org.apache.geronimo.console.BasePortlet;
23 import org.apache.geronimo.console.util.PortletManager;
24 import org.apache.geronimo.gbean.AbstractName;
25 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
26 import org.apache.geronimo.management.geronimo.WebAccessLog;
27 import org.apache.geronimo.management.geronimo.WebContainer;
28 import org.apache.geronimo.management.geronimo.WebManager;
29
30 import javax.portlet.ActionRequest;
31 import javax.portlet.ActionResponse;
32 import javax.portlet.PortletConfig;
33 import javax.portlet.PortletContext;
34 import javax.portlet.PortletException;
35 import javax.portlet.PortletRequestDispatcher;
36 import javax.portlet.RenderRequest;
37 import javax.portlet.RenderResponse;
38 import javax.portlet.WindowState;
39 import java.io.IOException JavaDoc;
40 import java.util.Calendar JavaDoc;
41 import java.util.LinkedHashMap JavaDoc;
42 import java.util.Map JavaDoc;
43
44 public class WebAccessLogViewerPortlet extends BasePortlet {
45     private final static Log log = LogFactory.getLog(WebAccessLogViewerPortlet.class);
46
47     protected PortletRequestDispatcher searchView;
48
49     protected PortletRequestDispatcher helpView;
50
51     protected void doHelp(RenderRequest renderRequest,
52             RenderResponse renderRespose) throws PortletException, IOException JavaDoc {
53         helpView.include(renderRequest, renderRespose);
54     }
55
56     protected void doView(RenderRequest renderRequest,
57             RenderResponse renderRespose) throws PortletException, IOException JavaDoc {
58         if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) {
59             return;
60         }
61
62         WebManager[] managers = PortletManager.getCurrentServer(renderRequest).getWebManagers();
63
64         //todo: new
65
Map JavaDoc products = new LinkedHashMap JavaDoc();
66         String JavaDoc chosen = renderRequest.getParameter("selectedContainer");
67         if(chosen != null) { // Carry on to render the results with the right selection
68
renderRequest.setAttribute("selectedContainer", chosen);
69         }
70         WebAccessLog chosenLog = null;
71         if(managers != null) {
72             for (int i = 0; i < managers.length; i++) {
73                 WebManager manager = managers[i];
74                 AbstractName managerName = PortletManager.getNameFor(renderRequest, manager);
75                 WebContainer[] containers = (WebContainer[]) manager.getContainers();
76                 if (containers != null) {
77                     for (int j = 0; j < containers.length; j++) {
78                         WebContainer container = containers[j];
79                         AbstractName containerName = PortletManager.getNameFor(renderRequest, container);
80                         String JavaDoc combined = managerName+"%"+containerName;
81                         if(containers.length == 1) {
82                             products.put(manager.getProductName(), combined);
83                         } else {
84                             products.put(manager.getProductName()+" ("+containerName.getName().get(NameFactory.J2EE_NAME)+")", combined);
85                         }
86                         if(chosenLog == null) { // will pick the correct match, or the first if no selection is specified
87
if(chosen == null || chosen.equals(combined)) {
88                                 chosenLog = PortletManager.getWebAccessLog(renderRequest, managerName, containerName);
89                             }
90                         }
91                     }
92                 } else {
93                     log.error("No web containers found for manager "+manager.getProductName());
94                 }
95             }
96         } else {
97             log.error("No web managers found!");
98         }
99         renderRequest.setAttribute("webContainers", products);
100         final String JavaDoc[] logNames = chosenLog.getLogNames();
101         renderRequest.setAttribute("webLogs", logNames);
102         String JavaDoc logToSearch = renderRequest.getParameter("selectedLog");
103         if(logToSearch == null) {
104             logToSearch = logNames[0];
105         } else { //what if the log options for Jetty were showing, but the user picked Tomcat to search? todo: fix this with some AJAX to repopulate the form when container is changed
106
boolean found = false;
107             for (int i = 0; i < logNames.length; i++) {
108                 String JavaDoc test = logNames[i];
109                 if(test.equals(logToSearch)) {
110                     found = true;
111                     break;
112                 }
113             }
114             if(!found) { // Must has been for the other container -- make it work.
115
logToSearch = logNames[0];
116             }
117         }
118
119         String JavaDoc action = renderRequest.getParameter("action");
120         if ("refresh".equals(action)) {
121             //todo: currently refreshes on every request; that's pretty slow.
122
}
123
124
125         //todo: completely revamp this argument processing
126
String JavaDoc startDate = (String JavaDoc) renderRequest.getParameter("startDate");
127         String JavaDoc startMonth = (String JavaDoc) renderRequest.getParameter("startMonth");
128         String JavaDoc startYear = (String JavaDoc) renderRequest.getParameter("startYear");
129         String JavaDoc endDate = (String JavaDoc) renderRequest.getParameter("endDate");
130         String JavaDoc endMonth = (String JavaDoc) renderRequest.getParameter("endMonth");
131         String JavaDoc endYear = (String JavaDoc) renderRequest.getParameter("endYear");
132
133         Calendar JavaDoc cal1 = Calendar.getInstance(), cal2 = Calendar.getInstance();
134         // If not all dates were passed we assume than no fields were passed and just
135
// filter on the current date.
136
if (startDate == null || startMonth == null || startYear == null
137                 || endDate == null || endMonth == null || endYear == null) {
138             // just keep the month date and year
139
cal1.set(Calendar.MILLISECOND, 0);
140             cal1.set(Calendar.MINUTE, 0);
141             cal1.set(Calendar.SECOND, 0);
142             cal1.set(Calendar.HOUR_OF_DAY, 0);
143
144             cal2.set(Calendar.HOUR_OF_DAY, cal2.getMaximum(Calendar.HOUR_OF_DAY));
145             cal2.set(Calendar.MINUTE, cal2.getMaximum(Calendar.MINUTE));
146             cal2.set(Calendar.SECOND, cal2.getMaximum(Calendar.SECOND));
147             cal2.set(Calendar.MILLISECOND, cal2.getMaximum(Calendar.MILLISECOND));
148
149             WebAccessLog.SearchResults matchingItems = chosenLog.getMatchingItems(logToSearch,
150                                         null, null, null, null, cal1.getTime(), cal2.getTime(), null, null);
151             renderRequest.setAttribute("logs", matchingItems.getResults());
152             renderRequest.setAttribute("logLength", new Integer JavaDoc(matchingItems.getLineCount()));
153         } else {
154             cal1.clear();
155             cal2.clear();
156             // get the requested start date (defaults to 00:00:00:000 for time
157
cal1.set(Calendar.DATE, Integer.parseInt(startDate));
158             cal1.set(Calendar.MONTH, Integer.parseInt(startMonth));
159             cal1.set(Calendar.YEAR, Integer.parseInt(startYear));
160             // get the requested end date - Note: must set time to end of day
161
cal2.set(Calendar.DATE, Integer.parseInt(endDate));
162             cal2.set(Calendar.MONTH, Integer.parseInt(endMonth));
163             cal2.set(Calendar.YEAR, Integer.parseInt(endYear));
164             cal2.set(Calendar.HOUR_OF_DAY, cal2.getMaximum(Calendar.HOUR_OF_DAY));
165             cal2.set(Calendar.MINUTE, cal2.getMaximum(Calendar.MINUTE));
166             cal2.set(Calendar.SECOND, cal2.getMaximum(Calendar.SECOND));
167             cal2.set(Calendar.MILLISECOND, cal2.getMaximum(Calendar.MILLISECOND));
168             // Get other search criteria
169
String JavaDoc requestHost = (String JavaDoc) renderRequest.getParameter("requestHost");
170             String JavaDoc authUser = (String JavaDoc) renderRequest.getParameter("authUser");
171             String JavaDoc requestMethod = (String JavaDoc) renderRequest.getParameter("requestMethod");
172             String JavaDoc requestedURI = (String JavaDoc) renderRequest.getParameter("requestedURI");
173             boolean ignoreDates = renderRequest.getParameter("ignoreDates") != null;
174             if (ignoreDates) {
175                 WebAccessLog.SearchResults matchingItems = chosenLog.getMatchingItems(logToSearch,
176                                                 requestHost, authUser, requestMethod, requestedURI, null, null, null, null);
177                 renderRequest.setAttribute("logs", matchingItems.getResults());
178                 renderRequest.setAttribute("logLength", new Integer JavaDoc(matchingItems.getLineCount()));
179             } else {
180                 WebAccessLog.SearchResults matchingItems = chosenLog.getMatchingItems(logToSearch,
181                                                 requestHost, authUser, requestMethod, requestedURI, cal1.getTime(), cal2.getTime(), null, null);
182                 renderRequest.setAttribute("logs", matchingItems.getResults());
183                 renderRequest.setAttribute("logLength", new Integer JavaDoc(matchingItems.getLineCount()));
184             }
185             if (ignoreDates) renderRequest.setAttribute("ignoreDates", new Boolean JavaDoc(ignoreDates));
186             renderRequest.setAttribute("requestHost", requestHost);
187             renderRequest.setAttribute("authUser", authUser);
188             renderRequest.setAttribute("requestMethod", requestMethod);
189             renderRequest.setAttribute("requestedURI", requestedURI);
190
191         }
192         renderRequest.setAttribute("toDate", cal2.getTime());
193         renderRequest.setAttribute("fromDate", cal1.getTime());
194         searchView.include(renderRequest, renderRespose);
195     }
196
197     public void init(PortletConfig portletConfig) throws PortletException {
198         PortletContext pc = portletConfig.getPortletContext();
199         searchView = pc.getRequestDispatcher("/WEB-INF/view/webaccesslogmanager/view.jsp");
200         helpView = pc.getRequestDispatcher("/WEB-INF/view/webaccesslogmanager/help.jsp");
201         super.init(portletConfig);
202     }
203
204     public void processAction(ActionRequest actionRequest,
205             ActionResponse actionResponse) throws PortletException, IOException JavaDoc {
206         //todo: according to portlet spec, all forms should submit to Action not Render
207
}
208
209 }
210
Popular Tags