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 018 package org.apache.geronimo.console.internaldb; 019 020 import java.io.IOException; 021 022 import javax.portlet.ActionRequest; 023 import javax.portlet.ActionResponse; 024 import javax.portlet.PortletConfig; 025 import javax.portlet.PortletException; 026 import javax.portlet.PortletRequestDispatcher; 027 import javax.portlet.RenderRequest; 028 import javax.portlet.RenderResponse; 029 import javax.portlet.WindowState; 030 031 import org.apache.geronimo.console.BasePortlet; 032 import org.apache.commons.logging.Log; 033 import org.apache.commons.logging.LogFactory; 034 035 public class DBViewerPortlet extends BasePortlet { 036 037 private final static Log log = LogFactory.getLog(DBViewerPortlet.class); 038 039 private static final int RDBMS_DERBY = 1; 040 041 private static final int RDBMS_MSSQL = 2; 042 043 private static final String MAXIMIZEDVIEW_JSP = "/WEB-INF/view/internaldb/dbViewerMaximized.jsp"; 044 045 private static final String HELPVIEW_JSP = "/WEB-INF/view/internaldb/dbViewerHelp.jsp"; 046 047 private static final String LISTDATABASES_JSP = "/WEB-INF/view/internaldb/listDatabases.jsp"; 048 049 private static final String LISTTABLES_JSP = "/WEB-INF/view/internaldb/listTables.jsp"; 050 051 private static final String VIEWTABLECONTENTS_JSP = "/WEB-INF/view/internaldb/viewTableContents.jsp"; 052 053 private static final String LISTDB_ACTION = "listDatabases"; 054 055 private static final String LISTTBLS_ACTION = "listTables"; 056 057 private static final String VIEWTBLCONTENTS_ACTION = "viewTableContents"; 058 059 private static DBViewerHelper helper = new DBViewerHelper(); 060 061 private PortletRequestDispatcher maximizedView; 062 063 private PortletRequestDispatcher helpView; 064 065 private PortletRequestDispatcher listDatabasesView; 066 067 private PortletRequestDispatcher listTablesView; 068 069 private PortletRequestDispatcher viewTableContentsView; 070 071 public void processAction(ActionRequest actionRequest, 072 ActionResponse actionResponse) throws PortletException, IOException { 073 // getting parameters here because it fails on doView() 074 String action = actionRequest.getParameter("action"); 075 String db = actionRequest.getParameter("db"); 076 String tbl = actionRequest.getParameter("tbl"); 077 String viewTables = actionRequest.getParameter("viewTables"); 078 String rdbms = actionRequest.getParameter("rdbms"); 079 // pass them to the render request 080 if (action != null) { 081 actionResponse.setRenderParameter("action", action); 082 } 083 if (db != null) { 084 actionResponse.setRenderParameter("db", db); 085 } 086 if (tbl != null) { 087 actionResponse.setRenderParameter("tbl", tbl); 088 } 089 if (viewTables != null) { 090 actionResponse.setRenderParameter("viewTables", viewTables); 091 } 092 if (rdbms != null) { 093 actionResponse.setRenderParameter("rdbms", rdbms); 094 } 095 } 096 097 protected void doView(RenderRequest renderRequest, 098 RenderResponse renderResponse) throws IOException, PortletException { 099 if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) { 100 return; 101 } 102 String action = renderRequest.getParameter("action"); 103 String db = renderRequest.getParameter("db"); 104 String tbl = renderRequest.getParameter("tbl"); 105 String viewTables = renderRequest.getParameter("viewTables"); 106 String rdbms = renderRequest.getParameter("rdbms"); 107 int rdbmsParam = (rdbms == null ? RDBMS_DERBY : Integer.parseInt(rdbms)); 108 109 if (WindowState.NORMAL.equals(renderRequest.getWindowState())) { 110 if (rdbmsParam == RDBMS_DERBY) { 111 // Check is database & table is valid 112 if (LISTTBLS_ACTION.equals(action) 113 || VIEWTBLCONTENTS_ACTION.equals(action)) { 114 if (!helper.isDBValid(DerbyConnectionUtil.getDerbyHome(), db)) { 115 // DB not valid 116 log.error("Database is not valid: " + db); 117 action = ""; 118 } 119 } 120 if (VIEWTBLCONTENTS_ACTION.equals(action)) { 121 if (!helper.isTblValid(db, tbl)) { 122 // Table not valid 123 log.error("Table is not valid: " + tbl); 124 action = ""; 125 } 126 } 127 } 128 129 renderRequest.setAttribute("rdbms", rdbms); 130 if (LISTTBLS_ACTION.equals(action)) { 131 renderRequest.setAttribute("db", db); 132 renderRequest.setAttribute("viewTables", viewTables); 133 renderRequest.setAttribute("ds", DerbyConnectionUtil 134 .getDataSource(db)); 135 listTablesView.include(renderRequest, renderResponse); 136 } else if (VIEWTBLCONTENTS_ACTION.equals(action)) { 137 renderRequest.setAttribute("db", db); 138 renderRequest.setAttribute("tbl", tbl); 139 renderRequest.setAttribute("viewTables", viewTables); 140 renderRequest.setAttribute("ds", DerbyConnectionUtil 141 .getDataSource(db)); 142 viewTableContentsView.include(renderRequest, renderResponse); 143 } else { 144 renderRequest.setAttribute("databases", helper 145 .getDerbyDatabases(DerbyConnectionUtil.getDerbyHome())); 146 listDatabasesView.include(renderRequest, renderResponse); 147 } 148 } else { 149 maximizedView.include(renderRequest, renderResponse); 150 } 151 } 152 153 protected void doHelp(RenderRequest renderRequest, 154 RenderResponse renderResponse) throws PortletException, IOException { 155 helpView.include(renderRequest, renderResponse); 156 } 157 158 public void init(PortletConfig portletConfig) throws PortletException { 159 super.init(portletConfig); 160 maximizedView = portletConfig.getPortletContext().getRequestDispatcher( 161 MAXIMIZEDVIEW_JSP); 162 helpView = portletConfig.getPortletContext().getRequestDispatcher( 163 HELPVIEW_JSP); 164 listDatabasesView = portletConfig.getPortletContext() 165 .getRequestDispatcher(LISTDATABASES_JSP); 166 listTablesView = portletConfig.getPortletContext() 167 .getRequestDispatcher(LISTTABLES_JSP); 168 viewTableContentsView = portletConfig.getPortletContext() 169 .getRequestDispatcher(VIEWTABLECONTENTS_JSP); 170 } 171 172 public void destroy() { 173 maximizedView = null; 174 helpView = null; 175 listDatabasesView = null; 176 listTablesView = null; 177 viewTableContentsView = null; 178 super.destroy(); 179 } 180 181 }