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.monitoring.console;
018
019 import java.io.IOException;
020 import java.sql.Connection;
021 import java.sql.PreparedStatement;
022 import java.sql.ResultSet;
023 import java.sql.SQLException;
024 import java.sql.Statement;
025
026 import javax.portlet.ActionRequest;
027 import javax.portlet.ActionResponse;
028 import javax.portlet.GenericPortlet;
029 import javax.portlet.PortletConfig;
030 import javax.portlet.PortletException;
031 import javax.portlet.PortletRequestDispatcher;
032 import javax.portlet.RenderRequest;
033 import javax.portlet.RenderResponse;
034
035 import org.apache.geronimo.monitoring.console.util.DBManager;
036 import org.apache.geronimo.crypto.EncryptionManager;
037
038 /**
039 * STATS
040 */
041 public class MonitoringPortlet extends GenericPortlet {
042
043 private static final String NORMALVIEW_JSP = "/WEB-INF/view/monitoringNormal.jsp";
044
045 private static final String VIEWVIEWS_JSP = "/WEB-INF/view/monitoringViews.jsp";
046
047 private static final String VIEWSERVERS_JSP = "/WEB-INF/view/monitoringServers.jsp";
048
049 private static final String VIEWGRAPHS_JSP = "/WEB-INF/view/monitoringGraphs.jsp";
050
051 private static final String PAGEVIEW_JSP = "/WEB-INF/view/monitoringPage.jsp";
052
053 private static final String EDITVIEW_JSP = "/WEB-INF/view/monitoringEditView.jsp";
054
055 private static final String ADDVIEW_JSP = "/WEB-INF/view/monitoringAddView.jsp";
056
057 private static final String ADDGRAPH_JSP = "/WEB-INF/view/monitoringAddGraph.jsp";
058
059 private static final String EDITGRAPH_JSP = "/WEB-INF/view/monitoringEditGraph.jsp";
060
061 private static final String VIEWSERVER_JSP = "/WEB-INF/view/monitoringViewServer.jsp";
062
063 private static final String EDITSERVER_JSP = "/WEB-INF/view/monitoringEditServer.jsp";
064
065 private static final String ADDSERVER_JSP = "/WEB-INF/view/monitoringAddServer.jsp";
066
067 private static final String HELPVIEW_JSP = "/WEB-INF/view/monitoringHelp.jsp";
068
069 private static final String EDITNORMALVIEW_JSP = "/WEB-INF/view/monitoringEdit.jsp";
070
071 private PortletRequestDispatcher normalView;
072
073 private PortletRequestDispatcher viewViews;
074
075 private PortletRequestDispatcher viewServers;
076
077 private PortletRequestDispatcher viewGraphs;
078
079 private PortletRequestDispatcher pageView;
080
081 private PortletRequestDispatcher editView;
082
083 private PortletRequestDispatcher addView;
084
085 private PortletRequestDispatcher addGraph;
086
087 private PortletRequestDispatcher editGraph;
088
089 private PortletRequestDispatcher viewServer;
090
091 private PortletRequestDispatcher editServer;
092
093 private PortletRequestDispatcher addServer;
094
095 private PortletRequestDispatcher helpView;
096
097 private PortletRequestDispatcher editNormalView;
098
099 @Override
100 public void processAction(ActionRequest actionRequest,
101 ActionResponse actionResponse) throws PortletException, IOException {
102 String action = actionRequest.getParameter("action");
103 actionResponse.setRenderParameter("action", action);
104 if (action.equals("showView")) {
105 String view_id = actionRequest.getParameter("view_id");
106 actionResponse.setRenderParameter("view_id", view_id);
107 } else if (action.equals("showAllViews")) {
108 // no parameters needed to be redirected to doView()
109 } else if (action.equals("showAllServers")) {
110 // no parameters needed to be redirected to doView()
111 } else if (action.equals("showAllGraphs")) {
112 // no parameters needed to be redirected to doView()
113 } else if (action.equals("showEditView")) {
114 String view_id = actionRequest.getParameter("view_id");
115 actionResponse.setRenderParameter("view_id", view_id);
116 } else if (action.equals("saveEditView")) {
117 updateView(actionRequest, actionResponse);
118 } else if (action.equals("showAddView")) {
119 // no parameters needed to be redirected to doView()
120 } else if (action.equals("saveAddView")) {
121 addView(actionRequest, actionResponse);
122 } else if (action.equals("showAddGraph")) {
123 String server_id = actionRequest.getParameter("server_id");
124 if (server_id != null)
125 actionResponse.setRenderParameter("server_id", server_id);
126
127 String mbean = actionRequest.getParameter("mbean");
128 if (mbean != null)
129 actionResponse.setRenderParameter("mbean", mbean);
130
131 String dataname = actionRequest.getParameter("dataname");
132 if (dataname != null)
133 actionResponse.setRenderParameter("dataname", dataname);
134 } else if (action.equals("saveAddGraph")) {
135 addGraph(actionRequest, actionResponse);
136 } else if (action.equals("showEditGraph")) {
137 String graph_id = actionRequest.getParameter("graph_id");
138 actionResponse.setRenderParameter("graph_id", graph_id);
139 } else if (action.equals("saveEditGraph")) {
140 updateGraph(actionRequest, actionResponse);
141 } else if (action.equals("deleteGraph")) {
142 deleteGraph(actionRequest, actionResponse);
143 } else if (action.equals("deleteView")) {
144 deleteView(actionRequest, actionResponse);
145 } else if (action.equals("showServer")) {
146 String server_id = actionRequest.getParameter("server_id");
147 actionResponse.setRenderParameter("server_id", server_id);
148 } else if (action.equals("showEditServer")) {
149 String server_id = actionRequest.getParameter("server_id");
150 actionResponse.setRenderParameter("server_id", server_id);
151 } else if (action.equals("saveEditServer")) {
152 updateServer(actionRequest, actionResponse);
153 } else if (action.equals("showAddServer")) {
154 // no parameters needed to be redirected to doView()
155 } else if (action.equals("deleteServer")) {
156 deleteServer(actionRequest, actionResponse);
157 } else if (action.equals("saveAddServer")) {
158 addServer(actionRequest, actionResponse);
159 } else if (action.equals("startTrackingMbean")) {
160 String server_id = actionRequest.getParameter("server_id");
161 actionResponse.setRenderParameter("server_id", server_id);
162 String mbean = actionRequest.getParameter("mbean");
163 actionResponse.setRenderParameter("mbean", mbean);
164 } else if (action.equals("stopTrackingMbean")) {
165 String server_id = actionRequest.getParameter("server_id");
166 actionResponse.setRenderParameter("server_id", server_id);
167 String mbean = actionRequest.getParameter("mbean");
168 actionResponse.setRenderParameter("mbean", mbean);
169 } else if (action.equals("stopThread")
170 || action.equals("disableServerViewQuery")) {
171 String server_id = actionRequest.getParameter("server_id");
172 String message = stopThread(server_id);
173 actionResponse.setRenderParameter("server_id", server_id);
174 actionResponse.setRenderParameter("message", message);
175 } else if (action.equals("startThread")
176 || action.equals("enableServerViewQuery")) {
177 String server_id = actionRequest.getParameter("server_id");
178 String snapshotDuration = actionRequest
179 .getParameter("snapshotDuration");
180 String message = startThread(server_id, new Long(snapshotDuration));
181 actionResponse.setRenderParameter("message", message);
182 actionResponse.setRenderParameter("server_id", server_id);
183 actionResponse.setRenderParameter("snapshotDuration",
184 snapshotDuration);
185 } else if (action.equals("disableServer")
186 || action.equals("disableEditServer")) {
187 String server_id = actionRequest.getParameter("server_id");
188 actionResponse.setRenderParameter("server_id", server_id);
189 ;
190 actionResponse.setRenderParameter("message", alterServerState(
191 server_id, false));
192 } else if (action.equals("enableServer")
193 || action.equals("enableEditServer")) {
194 String server_id = actionRequest.getParameter("server_id");
195 actionResponse.setRenderParameter("message", alterServerState(
196 server_id, true));
197 actionResponse.setRenderParameter("server_id", server_id);
198 ;
199 } else if (action.equals("testAddServerConnection")) {
200 String name = actionRequest.getParameter("name");
201 String ip = actionRequest.getParameter("ip");
202 String username = actionRequest.getParameter("username");
203 String password = actionRequest.getParameter("password");
204 String password2 = actionRequest.getParameter("password2");
205 Integer port = Integer.parseInt(actionRequest.getParameter("port"));
206 Integer protocol = Integer.parseInt(actionRequest.getParameter("protocol"));
207 String message = testConnection(name, ip, username, password, port, protocol);
208 actionResponse.setRenderParameter("message", message);
209 actionResponse.setRenderParameter("name", name);
210 actionResponse.setRenderParameter("username", username);
211 actionResponse.setRenderParameter("ip", ip);
212 actionResponse.setRenderParameter("password", password);
213 actionResponse.setRenderParameter("password2", password2);
214 actionResponse.setRenderParameter("port", "" + port);
215 actionResponse.setRenderParameter("protocol", "" + protocol);
216 } else if (action.equals("testEditServerConnection")) {
217 String name = actionRequest.getParameter("name");
218 String ip = actionRequest.getParameter("ip");
219 String username = actionRequest.getParameter("username");
220 String password = actionRequest.getParameter("password");
221 String password2 = actionRequest.getParameter("password2");
222 String server_id = actionRequest.getParameter("server_id");
223 String snapshot = actionRequest.getParameter("snapshot");
224 String retention = actionRequest.getParameter("retention");
225 Integer port = Integer.parseInt(actionRequest.getParameter("port"));
226 Integer protocol = Integer.parseInt(actionRequest.getParameter("protocol"));
227 if(snapshot == null) {
228 snapshot = "";
229 }
230 if(retention == null) {
231 retention = "";
232 }
233 String message = testConnection(name, ip, username, password, port, protocol);
234 actionResponse.setRenderParameter("message", message);
235 actionResponse.setRenderParameter("name", name);
236 actionResponse.setRenderParameter("username", username);
237 actionResponse.setRenderParameter("ip", ip);
238 actionResponse.setRenderParameter("password", password);
239 actionResponse.setRenderParameter("password2", password2);
240 actionResponse.setRenderParameter("snapshot", snapshot);
241 actionResponse.setRenderParameter("server_id", server_id);
242 actionResponse.setRenderParameter("retention", retention);
243 actionResponse.setRenderParameter("port", "" + port);
244 actionResponse.setRenderParameter("protocol", "" + protocol);
245 }
246 }
247
248 private String testConnection(String name, String ip, String username,
249 String password, int port, int protocol) {
250 try {
251 MRCConnector mrc = new MRCConnector(ip, username, password, port, protocol);
252
253 return "<font color=\"green\"><strong><li>Connection was successfully established.</li></strong></font>";
254 } catch (Exception e) {
255 return "<font color=\"red\"><strong><li>Failed to create a connection to server.</li></strong></font>";
256 }
257 }
258
259 private String alterServerState(String server_id, boolean b) {
260 Connection conn = (new DBManager()).getConnection();
261 String message = "";
262 String name = "";
263 try {
264 PreparedStatement pStmt = conn
265 .prepareStatement("SELECT * FROM servers WHERE server_id="
266 + server_id);
267 ResultSet rs = pStmt.executeQuery();
268 if (rs.next()) {
269 name = rs.getString("name");
270 }
271 rs.close();
272 conn.close();
273 conn = (new DBManager()).getConnection();
274 Statement stmt = conn.createStatement();
275 if (!b) {
276 stmt
277 .executeUpdate("UPDATE SERVERS SET ENABLED = 0 WHERE SERVER_ID="
278 + server_id);
279 stmt
280 .executeUpdate("UPDATE GRAPHS SET ENABLED = 0 WHERE SERVER_ID="
281 + server_id);
282 message = "<font color=\"green\"><strong><li>Server " + name
283 + " was successfully disabled.</li></strong></font>";
284 } else {
285 stmt
286 .executeUpdate("UPDATE SERVERS SET ENABLED = 1 WHERE SERVER_ID="
287 + server_id);
288 stmt
289 .executeUpdate("UPDATE GRAPHS SET ENABLED = 1 WHERE SERVER_ID="
290 + server_id);
291 message = "<font color=\"green\"><strong><li>Server " + name
292 + " was successfully enabled.</li></strong></font>";
293 }
294 } catch (SQLException e) {
295 if (!b)
296 message = "<font color=\"red\"><strong><li>[ERROR] Server with server_id = "
297 + server_id
298 + " could not be disabled.</li></strong></font>";
299 else
300 message = "<font color=\"red\"><strong><li>[ERROR] Server with server_id = "
301 + server_id
302 + " could not be enabled.</li></strong></font>";
303 } finally {
304 if (conn != null) {
305 try {
306 conn.close();
307 } catch (Exception e) {
308
309 }
310 }
311 }
312 return message;
313 }
314
315 @Override
316 public void doView(RenderRequest request, RenderResponse response)
317 throws PortletException, IOException {
318 String action = request.getParameter("action");
319 if (action == null)
320 action = "showNormal";
321 if (action.equals("showView")) {
322 String view_id = request.getParameter("view_id");
323 request.setAttribute("view_id", view_id);
324 pageView.include(request, response);
325 } else if (action.equals("showAllViews")) {
326 request.setAttribute("message", "");
327 viewViews.include(request, response);
328 } else if (action.equals("showAllServers")) {
329 request.setAttribute("message", "");
330 viewServers.include(request, response);
331 } else if (action.equals("showAllGraphs")) {
332 request.setAttribute("message", "");
333 viewGraphs.include(request, response);
334 } else if (action.equals("showServer")) {
335 String server_id = request.getParameter("server_id");
336 request.setAttribute("server_id", server_id);
337 viewServer.include(request, response);
338 } else if (action.equals("startTrackingMbean")) {
339 String server_id = request.getParameter("server_id");
340 request.setAttribute("server_id", server_id);
341 String mbean = request.getParameter("mbean");
342 request.setAttribute("mbean", mbean);
343 String message = startTrackingMbean(server_id, mbean);
344 request.setAttribute("message", message);
345 viewServer.include(request, response);
346 } else if (action.equals("stopTrackingMbean")) {
347 String server_id = request.getParameter("server_id");
348 request.setAttribute("server_id", server_id);
349 String mbean = request.getParameter("mbean");
350 request.setAttribute("mbean", mbean);
351 String message = stopTrackingMbean(server_id, mbean);
352 request.setAttribute("message", message);
353 viewServer.include(request, response);
354 } else if (action.equals("stopThread")) {
355 String server_id = request.getParameter("server_id");
356 String message = request.getParameter("message");
357 request.setAttribute("message", message);
358 normalView.include(request, response);
359 } else if (action.equals("startThread")) {
360 String server_id = request.getParameter("server_id");
361 Long snapshotDuration = java.lang.Long.parseLong(
362 request.getParameter("snapshotDuration"));
363 String message = request.getParameter("message");
364 request.setAttribute("message", message);
365 normalView.include(request, response);
366 } else if (action.equals("disableServerViewQuery") || action.equals("enableServerViewQuery")) {
367 String server_id = request.getParameter("server_id");
368 String message = request.getParameter("message");
369 request.setAttribute("message", message);
370 request.setAttribute("server_id", server_id);
371 viewServer.include(request, response);
372 } else {
373 request.setAttribute("message", request.getParameter("message"));
374 normalView.include(request, response);
375 }
376 }
377
378 @Override
379 protected void doHelp(RenderRequest renderRequest,
380 RenderResponse renderResponse) throws PortletException, IOException {
381 helpView.include(renderRequest, renderResponse);
382 }
383
384 @Override
385 protected void doEdit(RenderRequest request, RenderResponse response)
386 throws PortletException, IOException {
387 String action = request.getParameter("action");
388 if (action == null)
389 action = "showNormal";
390 if (action.equals("showEditView")) {
391 String view_id = request.getParameter("view_id");
392 request.setAttribute("view_id", view_id);
393 editView.include(request, response);
394 } else if (action.equals("saveEditView")) {
395 String view_id = request.getParameter("view_id");
396 request.setAttribute("view_id", view_id);
397 String message = request.getParameter("message");
398 request.setAttribute("message", message);
399 editView.include(request, response);
400 } else if (action.equals("showAddView")) {
401 addView.include(request, response);
402 } else if (action.equals("saveAddView")) {
403 String message = request.getParameter("message");
404 request.setAttribute("message", message);
405 normalView.include(request, response);
406 } else if (action.equals("showAddGraph")) {
407 String server_id = request.getParameter("server_id");
408 request.setAttribute("server_id", server_id);
409 String mbean = request.getParameter("mbean");
410 request.setAttribute("mbean", mbean);
411 String dataname = request.getParameter("dataname");
412 request.setAttribute("dataname", dataname);
413 addGraph.include(request, response);
414 } else if (action.equals("saveAddGraph")) {
415 String message = request.getParameter("message");
416 request.setAttribute("message", message);
417 normalView.include(request, response);
418 } else if (action.equals("showEditGraph")) {
419 String graph_id = request.getParameter("graph_id");
420 request.setAttribute("graph_id", graph_id);
421 editGraph.include(request, response);
422 } else if (action.equals("saveEditGraph")) {
423 String graph_id = request.getParameter("graph_id");
424 request.setAttribute("graph_id", graph_id);
425 String message = request.getParameter("message");
426 request.setAttribute("message", message);
427 editGraph.include(request, response);
428 } else if (action.equals("deleteGraph")) {
429 String message = request.getParameter("message");
430 request.setAttribute("message", message);
431 normalView.include(request, response);
432 } else if (action.equals("deleteView")) {
433 String message = request.getParameter("message");
434 request.setAttribute("message", message);
435 normalView.include(request, response);
436 } else if (action.equals("showEditServer")) {
437 String server_id = request.getParameter("server_id");
438 request.setAttribute("server_id", server_id);
439 editServer.include(request, response);
440 } else if (action.equals("saveEditServer")) {
441 String server_id = request.getParameter("server_id");
442 request.setAttribute("server_id", server_id);
443 String message = request.getParameter("message");
444 request.setAttribute("message", message);
445 editServer.include(request, response);
446 } else if (action.equals("showAddServer")) {
447 addServer.include(request, response);
448 } else if (action.equals("saveAddServer")) {
449 String message = request.getParameter("message");
450 request.setAttribute("message", message);
451 normalView.include(request, response);
452 } else if (action.equals("deleteServer")) {
453 String message = request.getParameter("message");
454 request.setAttribute("message", message);
455 normalView.include(request, response);
456 } else if (action.equals("testAddServerConnection")) {
457 request.setAttribute("name", request.getParameter("name"));
458 request.setAttribute("ip", request.getParameter("ip"));
459 request.setAttribute("username", request.getParameter("username"));
460 request.setAttribute("password", request.getParameter("password"));
461 request
462 .setAttribute("password2", request
463 .getParameter("password2"));
464 request.setAttribute("message", request.getParameter("message"));
465 request.setAttribute("port", request.getParameter("port"));
466 addServer.include(request, response);
467 } else if (action.equals("testEditServerConnection")) {
468 request.setAttribute("name", request.getParameter("name"));
469 request.setAttribute("ip", request.getParameter("ip"));
470 request.setAttribute("port", request.getParameter("port"));
471 request.setAttribute("username", request.getParameter("username"));
472 request.setAttribute("password", request.getParameter("password"));
473 request
474 .setAttribute("password2", request
475 .getParameter("password2"));
476 request.setAttribute("message", request.getParameter("message"));
477 request
478 .setAttribute("server_id", request
479 .getParameter("server_id"));
480 request.setAttribute("snapshot", request.getParameter("snapshot"));
481 request
482 .setAttribute("retention", request
483 .getParameter("retention"));
484 editServer.include(request, response);
485 } else if (action.equals("disableEditServer")
486 || action.equals("enableEditServer")) {
487 request.setAttribute("message", request.getParameter("message"));
488 request
489 .setAttribute("server_id", request
490 .getParameter("server_id"));
491 editServer.include(request, response);
492 } else if (action.equals("disableServer")
493 || action.equals("enableServer")) {
494 request.setAttribute("message", request.getParameter("message"));
495 request
496 .setAttribute("server_id", request
497 .getParameter("server_id"));
498 normalView.include(request, response);
499 } else {
500 normalView.include(request, response);
501 }
502 }
503
504 private void updateView(ActionRequest actionRequest,
505 ActionResponse actionResponse) {
506 String view_id = actionRequest.getParameter("view_id");
507 actionResponse.setRenderParameter("view_id", view_id);
508 DBManager DBase = new DBManager();
509 Connection con = DBase.getConnection();
510 String name = actionRequest.getParameter("name");
511 String description = actionRequest.getParameter("description");
512 String[] graphsArray = actionRequest.getParameterValues("graph_ids");
513 if (graphsArray == null) {
514 graphsArray = new String[0];
515 }
516 try {
517 PreparedStatement pStmt = con
518 .prepareStatement("UPDATE views SET name='" + name
519 + "', description='" + description
520 + "', graph_count=" + graphsArray.length
521 + ", modified=CURRENT_TIMESTAMP WHERE view_id="
522 + view_id);
523 pStmt.executeUpdate();
524 pStmt = con
525 .prepareStatement("DELETE FROM views_graphs WHERE view_id="
526 + view_id);
527 pStmt.executeUpdate();
528 if (graphsArray != null)
529 for (int i = 0; i < graphsArray.length; i++) {
530 pStmt = con
531 .prepareStatement("INSERT INTO views_graphs VALUES("
532 + view_id + "," + graphsArray[i] + ")");
533 pStmt.executeUpdate();
534 }
535 con.close();
536 actionResponse.setRenderParameter("message",
537 "<font color=\"green\"><strong><li>View " + name
538 + " has been updated</li></strong></font>");
539 return;
540
541 } catch (Exception e) {
542 actionResponse.setRenderParameter("message",
543 "<font color=\"red\"><strong><li>Error updating View "
544 + name + "</li></strong></font>" + e.getMessage());
545 return;
546 }
547 }
548
549 private void addView(ActionRequest actionRequest,
550 ActionResponse actionResponse) {
551 DBManager DBase = new DBManager();
552 Connection con = DBase.getConnection();
553 String name = actionRequest.getParameter("name");
554 String description = actionRequest.getParameter("description");
555 String[] graphsArray = actionRequest.getParameterValues("graph_ids");
556 if (graphsArray == null) {
557 graphsArray = new String[0];
558 }
559 try {
560 PreparedStatement pStmt = con
561 .prepareStatement("INSERT INTO views (name, description, graph_count, modified, added) VALUES ('"
562 + name
563 + "','"
564 + description
565 + "',"
566 + graphsArray.length
567 + ",CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)");
568 pStmt.executeUpdate();
569 pStmt = con
570 .prepareStatement("select view_id from views ORDER BY view_id DESC");
571 ResultSet rs = pStmt.executeQuery();
572 if (rs.next()) {
573 Integer view_id = rs.getInt("view_id");
574 for (int i = 0; i < graphsArray.length; i++) {
575 pStmt = con
576 .prepareStatement("INSERT INTO views_graphs VALUES("
577 + view_id + "," + graphsArray[i] + ")");
578 pStmt.executeUpdate();
579 }
580 }
581 con.close();
582 actionResponse.setRenderParameter("message",
583 "<font color=\"green\"><strong><li>View " + name
584 + " has been added</li></strong></font>");
585 } catch (Exception e) {
586 actionResponse.setRenderParameter("message",
587 "<font color=\"red\"><strong><li>Error adding View " + name
588 + "</li></strong></font>" + e.getMessage());
589 } finally {
590 try {
591 con.close();
592 } catch (Exception e) {
593
594 }
595 }
596 }
597
598 private void updateServer(ActionRequest actionRequest,
599 ActionResponse actionResponse) {
600 String server_id = actionRequest.getParameter("server_id");
601 actionResponse.setRenderParameter("server_id", server_id);
602 DBManager DBase = new DBManager();
603 Connection con = DBase.getConnection();
604 String name = actionRequest.getParameter("name");
605 String ip = actionRequest.getParameter("ip");
606 String password = actionRequest.getParameter("password");
607 String username = actionRequest.getParameter("username");
608 String snapshot = actionRequest.getParameter("snapshot");
609 String retention = actionRequest.getParameter("retention");
610 Integer port = Integer.parseInt(actionRequest.getParameter("port"));
611 Integer protocol = Integer.parseInt(actionRequest.getParameter("protocol"));
612 // encrypt the password
613 if (password != null && !password.equals("")) {
614 password = EncryptionManager.encrypt(password);
615 }
616
617 try {
618 // update the client side db (table = SERVERS)
619 if (password.equals("") || password == null) {
620 PreparedStatement pStmt = con
621 .prepareStatement("UPDATE servers SET name='"
622 + name
623 + "', ip='"
624 + ip
625 + "', username='"
626 + username
627 + "', modified=CURRENT_TIMESTAMP, last_seen=CURRENT_TIMESTAMP, "
628 + "port=" + port + ",protocol="+protocol+" WHERE server_id="
629 + server_id);
630 pStmt.executeUpdate();
631 // when user did not specify the password, just grab it from the
632 // db
633 pStmt = con
634 .prepareStatement("SELECT password FROM servers WHERE server_id="
635 + server_id);
636 ResultSet s = pStmt.executeQuery();
637 if (s.next()) {
638 password = s.getString("password");
639 } else {
640 actionResponse
641 .setRenderParameter(
642 "message",
643 "<font color=\"red\"><strong><li>Error updating server</li></strong></font>"
644 + "Password was not found in the database for server_id="
645 + server_id);
646 con.close();
647 return;
648 }
649 } else {
650 PreparedStatement pStmt = con
651 .prepareStatement("UPDATE servers SET name='"
652 + name
653 + "', ip='"
654 + ip
655 + "', username='"
656 + username
657 + "', password='"
658 + password
659 + "', modified=CURRENT_TIMESTAMP, last_seen=CURRENT_TIMESTAMP, "
660 + "port=" + port + ",protocol="+protocol+" WHERE server_id="
661 + server_id);
662 pStmt.executeUpdate();
663 }
664 con.close();
665 // update the server side db
666 if (snapshot == null || retention == null) {
667 // do not update if we do not know
668 } else {
669 (new MRCConnector(ip, username, password, port, protocol))
670 .setSnapshotDuration(Long.parseLong(snapshot) * 1000 * 60);
671 (new MRCConnector(ip, username, password, port, protocol))
672 .setSnapshotRetention(Integer.parseInt(retention));
673 }
674 // set success message
675 actionResponse
676 .setRenderParameter(
677 "message",
678 "<font color=\"green\"><strong><li>Server has been updated</li></strong></font>");
679 } catch (Exception e) {
680 actionResponse.setRenderParameter("message",
681 "<font color=\"red\"><strong><li>Error updating server</li></strong></font>"
682 + e.getMessage());
683 }
684 }
685
686 private void addServer(ActionRequest actionRequest,
687 ActionResponse actionResponse) {
688 DBManager DBase = new DBManager();
689 Connection con = DBase.getConnection();
690 String name = actionRequest.getParameter("name");
691 String ip = actionRequest.getParameter("ip");
692 int protocol = Integer.parseInt(actionRequest.getParameter("protocol"));
693 int port = Integer.parseInt(actionRequest.getParameter("port"));
694 String password = actionRequest.getParameter("password");
695 String username = actionRequest.getParameter("username");
696 // encrypt the password
697 if (password != null && !password.equals("")) {
698 password = EncryptionManager.encrypt(password);
699 }
700 try {
701 PreparedStatement pStmt = con
702 .prepareStatement("INSERT INTO servers (name, ip, username, password, modified, last_seen, added, port, protocol) VALUES ('"
703 + name
704 + "','"
705 + ip
706 + "','"
707 + username
708 + "','"
709 + password
710 + "',CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,"
711 + port
712 + ","
713 + protocol + ")");
714 pStmt.executeUpdate();
715 actionResponse.setRenderParameter("message",
716 "<font color=\"green\"><strong><li>Server " + name + " at "
717 + ip + " has been added.</li></strong></font>");
718
719 } catch (Exception e) {
720 actionResponse.setRenderParameter("message",
721 "<font color=\"red\"><strong><li>Error adding server</li></strong></font>"
722 + e.getMessage());
723 } finally {
724 try {
725 con.close();
726 } catch (Exception e) {
727
728 }
729 }
730 }
731
732 private void deleteServer(ActionRequest actionRequest,
733 ActionResponse actionResponse) {
734 String server_id = actionRequest.getParameter("server_id");
735 actionResponse.setRenderParameter("server_id", server_id);
736 DBManager DBase = new DBManager();
737 Connection con = DBase.getConnection();
738
739 try {
740 PreparedStatement pStmt = con
741 .prepareStatement("DELETE FROM graphs WHERE server_id="
742 + server_id);
743 pStmt.executeUpdate();
744
745 pStmt = con.prepareStatement("DELETE FROM servers WHERE server_id="
746 + server_id);
747 pStmt.executeUpdate();
748 con.close();
749 actionResponse
750 .setRenderParameter(
751 "message",
752 "<font color=\"green\"><strong><li>Server and associated graphs have been deleted</li></strong></font>");
753 return;
754
755 } catch (Exception e) {
756 actionResponse.setRenderParameter("message",
757 "<font color=\"red\"><strong><li>Error deleting server</li></strong></font>"
758 + e.getMessage());
759 return;
760 }
761 }
762
763 private void deleteView(ActionRequest actionRequest,
764 ActionResponse actionResponse) {
765 String view_id = actionRequest.getParameter("view_id");
766 actionResponse.setRenderParameter("view_id", view_id);
767 DBManager DBase = new DBManager();
768 Connection con = DBase.getConnection();
769
770 try {
771 PreparedStatement pStmt = con
772 .prepareStatement("DELETE FROM views WHERE view_id="
773 + view_id);
774 pStmt.executeUpdate();
775 pStmt = con
776 .prepareStatement("DELETE FROM views_graphs WHERE view_id="
777 + view_id);
778 pStmt.executeUpdate();
779 con.close();
780 actionResponse
781 .setRenderParameter("message",
782 "<font color=\"green\"><strong><li>View has been deleted</li></strong></font>");
783 return;
784
785 } catch (Exception e) {
786 actionResponse.setRenderParameter("message",
787 "<font color=\"red\"><strong><li>Error deleting view</li></strong></font>"
788 + e.getMessage());
789 return;
790 }
791 }
792
793 private void addGraph(ActionRequest actionRequest,
794 ActionResponse actionResponse) {
795 DBManager DBase = new DBManager();
796 Connection con = DBase.getConnection();
797 String name = actionRequest.getParameter("name");
798 String description = actionRequest.getParameter("description");
799 String server_id = actionRequest.getParameter("server_id");
800 String xlabel = actionRequest.getParameter("xlabel");
801 String ylabel = actionRequest.getParameter("ylabel");
802 String timeframe = actionRequest.getParameter("timeframe");
803 String mbean = actionRequest.getParameter("mbean");
804 String dataname1 = actionRequest.getParameter("dataname1");
805 String data1operation = actionRequest.getParameter("data1operation");
806 String operation = actionRequest.getParameter("operation");
807 int showArchive = 0;
808 if (actionRequest.getParameter("showArchive") != null
809 && actionRequest.getParameter("showArchive").equals("on")) {
810 showArchive = 1;
811 }
812
813 if (operation.equals("other")) {
814 operation = actionRequest.getParameter("othermath");
815 }
816 String dataname2 = actionRequest.getParameter("dataname2");
817 String data2operation = actionRequest.getParameter("data2operation");
818 if (data2operation == null)
819 data2operation = "A";
820 try {
821 PreparedStatement pStmt = con
822 .prepareStatement("INSERT INTO graphs (server_id, name, description, timeframe, mbean, dataname1, xlabel, ylabel, data1operation, operation, data2operation, dataname2, warninglevel1, warninglevel2, added, modified, last_seen, archive) VALUES ("
823 + server_id
824 + ",'"
825 + name
826 + "','"
827 + description
828 + "',"
829 + timeframe
830 + ",'"
831 + mbean
832 + "','"
833 + dataname1
834 + "','"
835 + xlabel
836 + "','"
837 + ylabel
838 + "','"
839 + data1operation
840 + "','"
841 + operation
842 + "','"
843 + data2operation
844 + "','"
845 + dataname2
846 + "',0,0,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,"
847 + showArchive + ")");
848 pStmt.executeUpdate();
849 con.close();
850 actionResponse.setRenderParameter("message",
851 "<font color=\"green\"><strong><li>Graph " + name
852 + " has been added.</li></strong></font>");
853 return;
854
855 } catch (Exception e) {
856 actionResponse.setRenderParameter("message",
857 "<font color=\"red\"><strong><li>Error adding graph</li></strong></font>"
858 + e.getMessage());
859 return;
860 }
861 }
862
863 private void updateGraph(ActionRequest actionRequest,
864 ActionResponse actionResponse) {
865 DBManager DBase = new DBManager();
866 Connection con = DBase.getConnection();
867 String graph_id = actionRequest.getParameter("graph_id");
868 actionResponse.setRenderParameter("graph_id", graph_id);
869
870 String name = actionRequest.getParameter("name");
871 String description = actionRequest.getParameter("description");
872 String server_id = actionRequest.getParameter("server_id");
873 String xlabel = actionRequest.getParameter("xlabel");
874 String ylabel = actionRequest.getParameter("ylabel");
875 String timeframe = actionRequest.getParameter("timeframe");
876 String mbean = actionRequest.getParameter("mbean");
877 String dataname1 = actionRequest.getParameter("dataname1");
878 String data1operation = actionRequest.getParameter("data1operation");
879 String operation = actionRequest.getParameter("operation");
880 int archive = 0;
881 if (actionRequest.getParameter("showArchive") != null
882 && actionRequest.getParameter("showArchive").equals("on")) {
883 archive = 1;
884 }
885
886 if (operation.equals("other")) {
887 operation = actionRequest.getParameter("othermath");
888 }
889 String dataname2 = actionRequest.getParameter("dataname2");
890 String data2operation = actionRequest.getParameter("data2operation");
891 if (data2operation == null)
892 data2operation = "A";
893 try {
894 PreparedStatement pStmt = con
895 .prepareStatement("UPDATE graphs SET server_id="
896 + server_id
897 + ", name='"
898 + name
899 + "', description='"
900 + description
901 + "', timeframe="
902 + timeframe
903 + ", mbean='"
904 + mbean
905 + "', dataname1='"
906 + dataname1
907 + "', xlabel='"
908 + xlabel
909 + "', ylabel='"
910 + ylabel
911 + "', data1operation='"
912 + data1operation
913 + "', operation='"
914 + operation
915 + "', data2operation='"
916 + data2operation
917 + "', dataname2='"
918 + dataname2
919 + "', warninglevel1=0, warninglevel2=0, modified=CURRENT_TIMESTAMP, archive="
920 + archive + " WHERE graph_id=" + graph_id);
921 pStmt.executeUpdate();
922 con.close();
923 actionResponse.setRenderParameter("message",
924 "<font color=\"green\"><strong><li>Graph " + name
925 + " has been updated.</li></strong></font>");
926 return;
927
928 } catch (Exception e) {
929 actionResponse.setRenderParameter("message",
930 "<font color=\"red\"><strong><li>Error editing graph</li></strong></font>"
931 + e.getMessage());
932 return;
933 }
934 }
935
936 private void deleteGraph(ActionRequest actionRequest,
937 ActionResponse actionResponse) {
938 String graph_id = actionRequest.getParameter("graph_id");
939 actionResponse.setRenderParameter("graph_id", graph_id);
940 DBManager DBase = new DBManager();
941 Connection con = DBase.getConnection();
942
943 try {
944 // remove the graph
945 PreparedStatement pStmt = con
946 .prepareStatement("DELETE FROM graphs WHERE graph_id="
947 + graph_id);
948 pStmt.executeUpdate();
949 // fetch all views associated with this graph
950 pStmt = con
951 .prepareStatement("SELECT view_id FROM views_graphs WHERE graph_id="
952 + graph_id);
953 ResultSet view_ids = pStmt.executeQuery();
954 // reduce the graph_count from all views associated with the graph
955 while (view_ids.next()) {
956 pStmt = con
957 .prepareStatement("UPDATE views SET graph_count=graph_count-1 WHERE view_id="
958 + view_ids.getString("view_id"));
959 pStmt.executeUpdate();
960 }
961 // remove the relationship between graphs and views
962 pStmt = con
963 .prepareStatement("DELETE FROM views_graphs WHERE graph_id="
964 + graph_id);
965 pStmt.executeUpdate();
966 con.close();
967 actionResponse
968 .setRenderParameter("message",
969 "<font color=\"green\"><strong><li>Graph has been deleted</li></strong></font>");
970 return;
971
972 } catch (Exception e) {
973 actionResponse.setRenderParameter("message",
974 "<font color=\"red\"><strong><li>Error deleting graph</li></strong></font>"
975 + e.getMessage());
976 return;
977 }
978 }
979
980 private String startTrackingMbean(String server_id, String mbean) {
981 PreparedStatement pStmt = null;
982 ResultSet rs = null;
983 MRCConnector mrc = null;
984 DBManager DBase = new DBManager();
985 Connection con = DBase.getConnection();
986 String server_ip = null;
987 String username = null;
988 String password = null;
989 int protocol = 0;
990 int port = -1;
991 // fetch server information
992 try {
993 pStmt = con
994 .prepareStatement("SELECT * FROM servers WHERE server_id="
995 + server_id);
996 rs = pStmt.executeQuery();
997 if (!rs.next()) {
998 return "<font color=\"red\"><strong><li>DATABASE ERROR: Server id "
999 + server_id
1000 + " not found in database</li></strong></font>";
1001 }
1002 server_ip = rs.getString("ip");
1003 password = rs.getString("password");
1004 username = rs.getString("username");
1005 port = rs.getInt("port");
1006 protocol = rs.getInt("protocol");
1007 } catch (SQLException e) {
1008 return "<font color=\"red\"><strong><li>DATABASE ERROR: "
1009 + e.getMessage() + "</li></strong></font>";
1010 }
1011 // attempt to connect to the mrc server
1012 try {
1013 con.close();
1014 mrc = new MRCConnector(server_ip, username, password, port, protocol);
1015 } catch (Exception e) {
1016 return "<font color=\"red\"><strong><li>MRC ERROR: Unable to connect to server "
1017 + server_ip
1018 + ": "
1019 + e.getMessage()
1020 + "</li></strong></font>";
1021 }
1022
1023 // tell the mrc server to start tracking an mbean
1024 try {
1025 if (mrc.startTrackingMbean(mbean)) {
1026 String mbarr[] = mbean.split("name=");
1027 return "<font color=\"green\"><strong><li>MBean " + mbarr[1]
1028 + " tracking on server " + rs.getString("name")
1029 + "</li></strong></font>";
1030 } else {
1031 String mbarr[] = mbean.split("name=");
1032 return "<font color=\"red\"><strong><li>ERROR: MBean "
1033 + mbarr[1] + " could <b>NOT</b> be tracked on server "
1034 + rs.getString("name") + "</li></strong></font>";
1035 }
1036 } catch (Exception e) {
1037 return "<font color=\"red\"><strong><li>MRC ERROR: MBean " + mbean
1038 + " could <b>NOT</b> be tracked on server " + server_ip
1039 + ": " + e.getMessage() + "</li></strong></font>";
1040 }
1041 }
1042
1043 private String stopTrackingMbean(String server_id, String mbean) {
1044 PreparedStatement pStmt = null;
1045 ResultSet rs = null;
1046 MRCConnector mrc = null;
1047 DBManager DBase = new DBManager();
1048 Connection con = DBase.getConnection();
1049 String server_ip = null;
1050 String username = null;
1051 String password = null;
1052 int port = -1;
1053 int protocol = 0;
1054 // fetch server's information
1055 try {
1056 pStmt = con
1057 .prepareStatement("SELECT * FROM servers WHERE server_id="
1058 + server_id);
1059 rs = pStmt.executeQuery();
1060 if (!rs.next()) {
1061 return "<font color=\"red\"><strong><li>DATABASE ERROR: Server id "
1062 + server_id
1063 + " not found in database</li></strong></font>";
1064 }
1065 server_ip = rs.getString("ip");
1066 password = rs.getString("password");
1067 username = rs.getString("username");
1068 port = rs.getInt("port");
1069 protocol = rs.getInt("protocol");
1070 } catch (SQLException e) {
1071 return "<font color=\"red\"><strong><li>DATABASE ERROR: "
1072 + e.getMessage() + "</li></strong></font>";
1073 }
1074 // attempt to connect to the mrc-server
1075 try {
1076 con.close();
1077 mrc = new MRCConnector(server_ip, username, password, port, protocol);
1078 } catch (Exception e) {
1079 return "<font color=\"red\"><strong><li>MRC ERROR: Unable to connect to server "
1080 + server_ip
1081 + ": "
1082 + e.getMessage()
1083 + "</li></strong></font>";
1084 }
1085 // tell the mrc-server to stop tracking some mbean
1086 try {
1087 if (mrc.stopTrackingMbean(mbean)) {
1088 String mbarr[] = mbean.split("name=");
1089 return "<font color=\"green\"><strong><li>MBean " + mbarr[1]
1090 + " removed from tracking on server "
1091 + rs.getString("name") + "</li></strong></font>";
1092 } else {
1093 String mbarr[] = mbean.split("name=");
1094 return "<font color=\"red\"><strong><li>ERROR: MBean "
1095 + mbarr[1]
1096 + " could <b>NOT</b> be removed from tracking on server "
1097 + rs.getString("name") + "</li></strong></font>";
1098 }
1099 } catch (Exception e) {
1100 return "<font color=\"red\"><strong><li>MRC ERROR: MBean " + mbean
1101 + " could <b>NOT</b> be removed from tracking on server "
1102 + server_ip + ": " + e.getMessage()
1103 + "</li></strong></font>";
1104 }
1105 }
1106
1107 private String stopThread(String server_id) {
1108 PreparedStatement pStmt = null;
1109 ResultSet rs = null;
1110 MRCConnector mrc = null;
1111 DBManager DBase = new DBManager();
1112 Connection con = DBase.getConnection();
1113 String server_ip = null;
1114 String username = null;
1115 String password = null;
1116 int port = -1;
1117 int protocol = 0;
1118 // fetch the server's information
1119 try {
1120 pStmt = con
1121 .prepareStatement("SELECT * FROM servers WHERE server_id="
1122 + server_id);
1123 rs = pStmt.executeQuery();
1124 if (!rs.next()) {
1125 return "<font color=\"red\"><strong><li>DATABASE ERROR: Server id "
1126 + server_id
1127 + " not found in database</li></strong></font>";
1128 }
1129 server_ip = rs.getString("ip");
1130 password = rs.getString("password");
1131 username = rs.getString("username");
1132 port = rs.getInt("port");
1133 protocol = rs.getInt("protocol");
1134 } catch (SQLException e) {
1135 return "<font color=\"red\"><strong><li>DATABASE ERROR: "
1136 + e.getMessage() + "</li></strong></font>";
1137 }
1138 // attempt to connect to the mrc-server
1139 try {
1140 con.close();
1141 mrc = new MRCConnector(server_ip, username, password, port, protocol);
1142 } catch (Exception e) {
1143 return "<font color=\"red\"><strong><li>MRC ERROR: Unable to connect to server "
1144 + server_ip
1145 + ": "
1146 + e.getMessage()
1147 + "</li></strong></font>";
1148 }
1149 // tell the mrc-server to stop taking snapshots
1150 try {
1151 if (mrc.stopSnapshotThread()) {
1152 return "<font color=\"green\"><strong><li>Snapshot thread stopped on server "
1153 + rs.getString("name") + "</li></strong></font>";
1154 } else {
1155 return "<font color=\"red\"><strong><li>ERROR: Snapshot thread could <b>NOT</b> be stopped on server "
1156 + rs.getString("name") + "</li></strong></font>";
1157 }
1158
1159 } catch (Exception e) {
1160 return "<font color=\"red\"><strong><li>MRC ERROR: Snapshot thread could <b>NOT</b> be stopped on server "
1161 + server_ip
1162 + ": "
1163 + e.getMessage()
1164 + "</li></strong></font>";
1165 }
1166 }
1167
1168 private String startThread(String server_id, Long snapshotDuration) {
1169 PreparedStatement pStmt = null;
1170 ResultSet rs = null;
1171 MRCConnector mrc = null;
1172 DBManager DBase = new DBManager();
1173 Connection con = DBase.getConnection();
1174 String server_ip = null;
1175 String username = null;
1176 String password = null;
1177 int port = -1;
1178 int protocol = 0;
1179 // fetch the server's information
1180 try {
1181 pStmt = con
1182 .prepareStatement("SELECT * FROM servers WHERE server_id="
1183 + server_id);
1184 rs = pStmt.executeQuery();
1185 if (!rs.next()) {
1186 return "<font color=\"red\"><strong><li>DATABASE ERROR: Server id "
1187 + server_id
1188 + " not found in database</li></strong></font>";
1189 }
1190 server_ip = rs.getString("ip");
1191 password = rs.getString("password");
1192 username = rs.getString("username");
1193 port = rs.getInt("port");
1194 protocol = rs.getInt("protocol");
1195 } catch (SQLException e) {
1196 return "<font color=\"red\"><strong><li>DATABASE ERROR: "
1197 + e.getMessage() + "</li></strong></font>";
1198 }
1199 // attempt to connect to the mrc-server
1200 try {
1201 con.close();
1202 mrc = new MRCConnector(server_ip, username, password, port, protocol);
1203 } catch (Exception e) {
1204 return "<font color=\"red\"><strong><li>MRC ERROR: Unable to connect to server "
1205 + server_ip
1206 + ": "
1207 + e.getMessage()
1208 + "</li></strong></font>";
1209 }
1210 // tell the mrc-server to start the collection of statistics
1211 try {
1212 if (mrc.startSnapshotThread(new Long(snapshotDuration))) {
1213 return "<font color=\"green\"><strong><li>Snapshot thread started on server "
1214 + rs.getString("name") + "</li></strong></font>";
1215 } else {
1216 return "<font color=\"red\"><strong><li>ERROR: Snapshot thread could <b>NOT</b> be started on server "
1217 + rs.getString("name") + "</li></strong></font>";
1218 }
1219 } catch (Exception e) {
1220 return "<font color=\"red\"><strong><li>MRC ERROR: Snapshot thread could <b>NOT</b> be started on server "
1221 + server_ip
1222 + ": "
1223 + e.getMessage()
1224 + "</li></strong></font>";
1225 }
1226 }
1227
1228 @Override
1229 public void init(PortletConfig portletConfig) throws PortletException {
1230 super.init(portletConfig);
1231 normalView = portletConfig.getPortletContext().getRequestDispatcher(
1232 NORMALVIEW_JSP);
1233 viewViews = portletConfig.getPortletContext().getRequestDispatcher(
1234 VIEWVIEWS_JSP);
1235 viewServers = portletConfig.getPortletContext().getRequestDispatcher(
1236 VIEWSERVERS_JSP);
1237 viewGraphs = portletConfig.getPortletContext().getRequestDispatcher(
1238 VIEWGRAPHS_JSP);
1239 pageView = portletConfig.getPortletContext().getRequestDispatcher(
1240 PAGEVIEW_JSP);
1241 editView = portletConfig.getPortletContext().getRequestDispatcher(
1242 EDITVIEW_JSP);
1243 addView = portletConfig.getPortletContext().getRequestDispatcher(
1244 ADDVIEW_JSP);
1245 addGraph = portletConfig.getPortletContext().getRequestDispatcher(
1246 ADDGRAPH_JSP);
1247 editGraph = portletConfig.getPortletContext().getRequestDispatcher(
1248 EDITGRAPH_JSP);
1249 viewServer = portletConfig.getPortletContext().getRequestDispatcher(
1250 VIEWSERVER_JSP);
1251 editServer = portletConfig.getPortletContext().getRequestDispatcher(
1252 EDITSERVER_JSP);
1253 addServer = portletConfig.getPortletContext().getRequestDispatcher(
1254 ADDSERVER_JSP);
1255 helpView = portletConfig.getPortletContext().getRequestDispatcher(
1256 HELPVIEW_JSP);
1257 editNormalView = portletConfig.getPortletContext()
1258 .getRequestDispatcher(EDITNORMALVIEW_JSP);
1259 }
1260
1261 @Override
1262 public void destroy() {
1263 normalView = null;
1264 viewViews = null;
1265 viewServers = null;
1266 viewGraphs = null;
1267 pageView = null;
1268 editView = null;
1269 addView = null;
1270 addGraph = null;
1271 editGraph = null;
1272 viewServer = null;
1273 editServer = null;
1274 addServer = null;
1275 helpView = null;
1276 editNormalView = null;
1277 super.destroy();
1278 }
1279 }