taylor 2004/12/22 22:27:24 Added: applications/demo/src/java/org/apache/portals/applications/database/resources DatabaseBrowser.properties DatabaseBrowser_en.properties DatabaseBrowser_de.properties applications/demo/src/java/org/apache/portals/applications/database DatabaseBrowserIterator.java ActionParameter.java DatabaseBrowserPortlet.java BrowserQuery.java BrowserIterator.java Log: port of J1 database browser under construction Revision Changes Path 1.1 jakarta-jetspeed-2/applications/demo/src/java/org/apache/portals/applications/database/resources/DatabaseBrowser.properties Index: DatabaseBrowser.properties =================================================================== javax.portlet.title = Database Browser javax.portlet.short-title = DB javax.portlet.keywords = database, sql name = Name url = URL add = Add delete = Delete cancel = Cancel help.title = Help Mode help.text = The Database Browser portlet provides a browser of SQL databases. 1.1 jakarta-jetspeed-2/applications/demo/src/java/org/apache/portals/applications/database/resources/DatabaseBrowser_en.properties Index: DatabaseBrowser_en.properties =================================================================== javax.portlet.title = Database Browser javax.portlet.short-title = DB javax.portlet.keywords = database, sql name = Name url = URL add = Add delete = Delete cancel = Cancel help.title = Help Mode help.text = The Database Browser portlet provides a browser of SQL databases. 1.1 jakarta-jetspeed-2/applications/demo/src/java/org/apache/portals/applications/database/resources/DatabaseBrowser_de.properties Index: DatabaseBrowser_de.properties =================================================================== javax.portlet.title = Database Browser javax.portlet.short-title = DB javax.portlet.keywords = database, sql name = Name url = URL add = Hinzufügen delete = löschen cancel = Abbrechen help.title = Help Mode help.text = The Database Browser portlet provides a browser of SQL databases. 1.1 jakarta-jetspeed-2/applications/demo/src/java/org/apache/portals/applications/database/DatabaseBrowserIterator.java Index: DatabaseBrowserIterator.java =================================================================== /* * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.portals.applications.database; import java.util.List; import java.util.Collections; import java.sql.Types; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * A class for iterating over the window. The window constitutes the selection * of rows being displayed to the user from the List storing all the ResultSet. * * @author <a href="mailto:[EMAIL PROTECTED]">David Sean Taylor </a> * @version $Id: DatabaseBrowserIterator.java,v 1.1 2004/12/23 06:27:24 taylor Exp $ */ public class DatabaseBrowserIterator implements BrowserIterator { /** * Static initialization of the logger for this class */ protected Log log = LogFactory.getLog(DatabaseBrowserIterator.class); private static final String VELOCITY_NULL_ENTRY = "-"; int top = 0; int index = 0; int bottom = -1; int windowSize = -1; int rsListSize = -1; boolean ascendingOrder = true; String sortColumnName = null; List rsList; List rsTitleList; List rsTypeList; /** * Constructor for the database browser iterator * * @param result * The List containg all the rows from the resultSet. * @param columnTitles * The List containg all the columnLabels from a resultSet. * @param pageSize * The number of rows to be displayed in a window configured by * the user. */ public DatabaseBrowserIterator(List result, List columnTitles, List columnTypes, int pageSize) { this.rsList = result; this.rsTitleList = columnTitles; this.rsTypeList = columnTypes; this.windowSize = pageSize; this.rsListSize = result.size(); setBottom(); } /** * This method returns the result set. * */ public List getResultSet() { return rsList; } /** * This method returns the number of rows in the result set. * */ public int getResultSetSize() { return rsListSize; } /** * This method returns the List containg the column labels of the result * set. * */ public List getResultSetTitleList() { return rsTitleList; } /** * This method returns the List containg the column type names of the result * set. * * @see java.sql.Types */ public List getResultSetTypesList() { return rsTypeList; } /** * This method returns the index of the row to which the cursor is pointing * at. * */ public int getTop() { return top; } /** * This method points the cursor to the index provided. * * @param start * Index to which cursor should point to */ public void setTop(int start) { top = start; index = top; setBottom(); } /** * This method returns the last index of the row in the window displayed. * */ public int getBottom() { return bottom; } /** * This method returns the window size. * */ public int getWindowSize() { return windowSize; } /** * This method sets the bottom based on which index the cursor points to and * the size of the result set. * */ private void setBottom() { bottom = top + windowSize; if (bottom > rsListSize) { bottom = rsListSize; } } /** * Returns true if the iteration has more elements */ public boolean hasNext() { if (index <= rsListSize && index < bottom) { return true; } return false; } /** * Returns the next element in the iteration */ public Object next() { index = index + 1; return rsList.get(index - 1); } /** * Logs as info - since remove operation is not supported by this Iterator. */ public void remove() { log.info("The remove operation is not supported."); } /** * This method sorts the result set according to the value of the column as * specified by the parameter column name. Changes the order of the result * set vector. * * @param String * sortColumnName */ public void sort(String columnName) { //System.out.println("current columnName="+columnName); //System.out.println("old columnName="+sortColumnName); if (columnName != null) { if (sortColumnName != null && sortColumnName.equals(columnName)) { ascendingOrder = !ascendingOrder; } else { ascendingOrder = true; sortColumnName = columnName; } Collections.sort(rsList, this); } } /* * Compares its two arguments for order. * */ public int compare(Object obj1, Object obj2) { int idx = rsTitleList.indexOf(sortColumnName); int order = 0; if (idx != -1) { Object col1 = ((List) obj1).get(idx); Object col2 = ((List) obj2).get(idx); if ((col1).equals(VELOCITY_NULL_ENTRY)) { if ((col2).equals(VELOCITY_NULL_ENTRY)) { order = 0; } else { order = -1; } } else if ((col2).equals(VELOCITY_NULL_ENTRY)) { order = 1; } else { int type = Integer.parseInt((String) rsTypeList.get(idx)); switch (type) { case Types.NUMERIC: order = (((java.math.BigDecimal) col1) .compareTo((java.math.BigDecimal) col2)); break; case Types.DECIMAL: order = (((java.math.BigDecimal) col1) .compareTo((java.math.BigDecimal) col2)); break; case Types.TINYINT: order = (((Byte) col1).compareTo((Byte) col2)); break; case Types.SMALLINT: order = (((Short) col1).compareTo((Short) col2)); break; case Types.INTEGER: order = (((Integer) col1).compareTo((Integer) col2)); break; case Types.BIGINT: order = (((Long) col1).compareTo((Long) col2)); break; case Types.REAL: order = (((Float) col1).compareTo((Float) col2)); break; case Types.FLOAT: order = (((Double) col1).compareTo((Double) col2)); break; case Types.DOUBLE: order = (((Double) col1).compareTo((Double) col2)); break; case Types.DATE: order = (((java.sql.Date) col1) .compareTo((java.sql.Date) col2)); break; case Types.TIME: order = (((java.sql.Time) col1) .compareTo((java.sql.Time) col2)); break; case Types.TIMESTAMP: order = (((java.sql.Timestamp) col1) .compareTo((java.sql.Timestamp) col2)); break; case Types.CHAR: order = (((String) col1).compareTo((String) col2)); break; case Types.VARCHAR: order = (((String) col1).compareTo((String) col2)); break; case Types.LONGVARCHAR: order = (((String) col1).compareTo((String) col2)); break; default: log .info("DatabaseBrowserIterator.compare DataType mapping not found" + " in DatabaseBrowserIterator. " + "Hence cannot sort based on provided column."); break; } } } //System.out.println("index of type= "+idx +", order= "+order+", // ascending= "+ascendingOrder); if (!ascendingOrder) { order = 0 - order; } return order; } } 1.1 jakarta-jetspeed-2/applications/demo/src/java/org/apache/portals/applications/database/ActionParameter.java Index: ActionParameter.java =================================================================== /* * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.portals.applications.database; import java.io.Serializable; /** * Action Parameter * * @author <a href="mailto:[EMAIL PROTECTED]">David Sean Taylor </a> * @version $Id: ActionParameter.java,v 1.1 2004/12/23 06:27:24 taylor Exp $ * */ public class ActionParameter implements Serializable { String name; String action; String type; String page; public ActionParameter(String name, String action, String type) { this.name = name; if (type.equalsIgnoreCase("psml")) { int index = action.indexOf("/"); this.page = action.substring(0, index); this.action = action.substring(index + 1); } else { this.action = action; } this.type = type; } public String getName() { return this.name; } public String getPage() { return this.page; } public String getAction() { return this.action; } public String getType() { return this.type; } public void setName(String name) { this.name = name; } public void setAction(String action) { this.action = action; } public void setType(String type) { this.type = type; } } 1.1 jakarta-jetspeed-2/applications/demo/src/java/org/apache/portals/applications/database/DatabaseBrowserPortlet.java Index: DatabaseBrowserPortlet.java =================================================================== /* * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.portals.applications.database; import java.io.IOException; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Types; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Vector; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.PortletException; import javax.portlet.PortletMode; import javax.portlet.PortletPreferences; import javax.portlet.PortletRequest; import javax.portlet.PortletSession; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.portals.applications.database.ActionParameter; import org.apache.portals.applications.database.BrowserIterator; import org.apache.portals.applications.database.DatabaseBrowserIterator; import org.apache.portals.bridges.velocity.GenericVelocityPortlet; import org.apache.velocity.context.Context; /** * DatabaseBrowserPortlet * * @author <a href="mailto:[EMAIL PROTECTED]">David Sean Taylor </a> * @version $Id: DatabaseBrowserPortlet.java,v 1.1 2004/12/23 06:27:24 taylor Exp $ */ public class DatabaseBrowserPortlet extends GenericVelocityPortlet { protected static final String SQL = "sql"; protected static final String POOLNAME = "poolname"; protected static final String START = "start"; protected static final String CUSTOMIZE_TEMPLATE = "customizeTemplate"; protected static final String WINDOW_SIZE = "windowSize"; protected static final String USER_OBJECT_NAMES = "user-object-names"; protected static final String USER_OBJECT_TYPES = "user-object-types"; protected static final String USER_OBJECTS = "user-objects"; protected static final String SQL_PARAM_PREFIX = "sqlparam"; protected static final String LINKS_READ = "linksRead"; protected static final String ROW_LINK = "rowLinks"; protected static final String TABLE_LINK = "tableLinks"; protected static final String ROW_LINK_IDS = "row-link-ids"; protected static final String ROW_LINK_TYPES = "row-link-types"; protected static final String ROW_LINK_TARGETS = "row-link-targets"; protected static final String TABLE_LINK_IDS = "table-link-ids"; protected static final String TABLE_LINK_TYPES = "table-link-types"; protected static final String TABLE_LINK_TARGETS = "table-link-targets"; protected static final String BROWSER_TABLE_SIZE = "tableSize"; protected static final String DATABASE_BROWSER_ACTION_KEY = "database_browser_action_key"; protected static final String BROWSER_ITERATOR = "table"; protected static final String BROWSER_TITLE_ITERATOR = "title"; protected static final String NEXT = "next"; protected static final String PREVIOUS = "prev"; protected static final String VELOCITY_NULL_ENTRY = "-"; // portlet entry Id protected static final String PEID = "js_peid"; protected static final String SORT_COLUMN_NAME = "js_dbcolumn"; protected List sqlParameters = new Vector(); /** * Static initialization of the logger for this class */ protected Log log = LogFactory.getLog(DatabaseBrowserPortlet.class); public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { int resultSetSize, next, prev, windowSize; response.setContentType("text/html"); BrowserIterator iterator = getDatabaseBrowserIterator(request); Context context = this.getContext(request); String sortColName = request.getParameter(SORT_COLUMN_NAME); int start = getStartVariable(request, START, sortColName, iterator); PortletPreferences prefs = request.getPreferences(); windowSize = Integer.parseInt(prefs.getValue(WINDOW_SIZE, "10")); next = start + windowSize; prev = start - windowSize; try { if (iterator == null) { String sql = getQueryString(request, context); //System.out.println("buildNormalContext SQL: "+sql); if (sql != null) { readUserParameters(request, context); getRows(request, sql, windowSize); iterator = getDatabaseBrowserIterator(request); } else { log .info("The sql query is null, hence not generating the result set."); } } else { if (sortColName != null) { iterator.sort(sortColName); } iterator.setTop(start); } readLinkParameters(request, context); if (iterator != null) { resultSetSize = iterator.getResultSetSize(); if (next < resultSetSize) { context.put(NEXT, String.valueOf(next)); } if (prev <= resultSetSize && prev >= 0) { context.put(PREVIOUS, String.valueOf(prev)); } context.put(BROWSER_ITERATOR, iterator); context.put(BROWSER_TITLE_ITERATOR, iterator .getResultSetTitleList()); context.put(BROWSER_TABLE_SIZE, new Integer(resultSetSize)); /* * System.out.println("buildNormalContext Sort column name= * "+sortColName); System.out.println("buildNormalContext * Iterator: "+iterator); System.out.println("buildNormalContext * Titles= "+iterator.getResultSetTitleList()); * System.out.println("buildNormalContext * windowSize="+windowSize+" prev="+prev+ " next="+next+" * start="+start+" resultSetSize="+resultSetSize); */ } } catch (Exception e) { // log the error msg log.error("Exception", e); /* * TODO: error logging * * rundata.setMessage("Error in Jetspeed Database Browser: " + * e.toString()); rundata.setStackTrace(StringUtils.stackTrace(e), * e); * rundata.setScreenTemplate(JetspeedResources.getString("template.error","Error")); */ } super.doView(request, response); } public void doEdit(RenderRequest request, RenderResponse response) throws PortletException, IOException { response.setContentType("text/html"); doPreferencesEdit(request, response); } public void processAction(ActionRequest request, ActionResponse response) throws PortletException, IOException { if (request.getPortletMode() == PortletMode.EDIT) { processPreferencesAction(request, response); } else { String browserAction = request.getParameter("db.browser.action"); if (browserAction != null) { if (browserAction.equals("refresh")) { clearDatabaseBrowserIterator(request); } String start = request.getParameter("start"); if (start != null) { response.setRenderParameter("start", start); } } } } /** * Centralizes the calls to session - to retrieve the * DatabaseBrowserIterator. * * @param data * The turbine rundata context for this request. * */ protected BrowserIterator getDatabaseBrowserIterator(PortletRequest request) { BrowserIterator iterator = (BrowserIterator) request .getPortletSession().getAttribute(DATABASE_BROWSER_ACTION_KEY, PortletSession.PORTLET_SCOPE); return iterator; } /** * Centralizes the calls to session - to set * the DatabaseBrowserIterator. * * @param data The turbine rundata context for this request. * @param iterator. * */ protected void setDatabaseBrowserIterator(RenderRequest request, BrowserIterator iterator) { request.getPortletSession().setAttribute(DATABASE_BROWSER_ACTION_KEY, iterator); } /** * Centralizes the calls to session - to clear * the DatabaseBrowserIterator from the temp storage. * * @param data The turbine rundata context for this request. * */ protected void clearDatabaseBrowserIterator(PortletRequest request) { request.getPortletSession().removeAttribute(DATABASE_BROWSER_ACTION_KEY); } protected int getStartVariable(RenderRequest request, String attrName, String sortColName, BrowserIterator iterator) { int start = -1; // if users want to overwrite how the sorting affects the cursor for // the window if (sortColName != null) start = getStartIndex(); if (start < 0) { //fallback routine for start String startStr = request.getParameter(attrName); if (startStr != null && startStr.length() > 0) { start = Integer.parseInt(startStr); } else if (start == -1 && iterator != null) { start = iterator.getTop(); } if (start < 0) start = 0; } return start; } /** * to be used if sorting behavior to be overwritten */ protected int getStartIndex() { return 0; } /** * This method returns the sql from the getQuery method which can be * overwritten according to the needs of the application. If the getQuery() * returns null, then it gets the value from the psml file. If the psml * value is null then it returns the value from the xreg file. * */ protected String getQueryString(RenderRequest request, Context context) { String sql = getQueryString(request); if (null == sql) { sql = getPreference(request, SQL, null); } return sql; } public String getQueryString(RenderRequest request) { return null; } protected String getPreference(RenderRequest request, String attrName, String attrDefValue) { return request.getPreferences().getValue(attrName, attrDefValue); } protected void readUserParameters(RenderRequest request, Context context) { List userObjectList; Object userObjRead = request.getPortletSession().getAttribute( USER_OBJECTS, PortletSession.PORTLET_SCOPE); if (userObjRead != null) { context.put(USER_OBJECTS, (List) userObjRead); //System.out.println("userObjectListSize: "+ // ((List)userObjRead).size()); } else { /* * TODO: implement user parameters * * String userObjTypes= * getParameterFromRegistry(portlet,USER_OBJECT_TYPES,null); String * userObjNames= * getParameterFromRegistry(portlet,USER_OBJECT_NAMES,null); if( * userObjTypes != null && userObjTypes.length() > 0 ) { * userObjectList = new ArrayList(); int userObjectIndex = 0; * StringTokenizer tokenizer1 = new StringTokenizer(userObjNames, * ","); StringTokenizer tokenizer3 = new * StringTokenizer(userObjTypes, ","); * while(tokenizer1.hasMoreTokens() && tokenizer3.hasMoreTokens()) { * userObjectList.add(userObjectIndex, new * ActionParameter(tokenizer1.nextToken(), null, * tokenizer3.nextToken())); userObjectIndex++; } * context.put(USER_OBJECTS, userObjectList); * setParameterToTemp(portlet, rundata, USER_OBJECTS, * userObjectList); //System.out.println("readLink: * userObjectTypesListSize: "+userObjectList.size()); } */ } } protected void readLinkParameters(RenderRequest request, Context context) { // TODO: implement me } /** * Execute the sql statement as specified by the user or the default, and * store the resultSet in a vector. * * @param sql * The sql statement to be executed. * @param data * The turbine rundata context for this request. */ protected void getRows(RenderRequest request, String sql, int windowSize) throws Exception { List resultSetList = new ArrayList(); List resultSetTitleList = new ArrayList(); List resultSetTypeList = new ArrayList(); Connection con = null; PreparedStatement selectStmt = null; ResultSet rs = null; PortletSession session = request.getPortletSession(); try { String poolname = getPreference(request, POOLNAME, null); if (poolname == null || poolname.length() == 0) { con = getConnection(); } else { con = getConnection(poolname); } selectStmt = con.prepareStatement(sql); readSqlParameters(request); Iterator it = sqlParameters.iterator(); int ix = 0; while (it.hasNext()) { ix++; Object object = it.next(); selectStmt.setObject(ix, object); } rs = selectStmt.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); int columnNum = rsmd.getColumnCount(); /* * get the user object types to be displayed and add them to the * title list as well as the result set list */ List userObjList = (List) session.getAttribute(USER_OBJECTS); int userObjListSize = 0; if (userObjList != null) { userObjListSize = userObjList.size(); } //System.out.println("User List Size = "+ userObjListSize); /* * the array columnDisplayed maintains a boolean value for each * column index. Only the columns that are set to true are added to * the resultSetList, resultSetTitleList and resultSetTypeList. */ boolean[] columnDisplayed = new boolean[columnNum + userObjListSize]; /* * this for loop constructs the columnDisplayed array as well as * adds to the resultSetTitleList and resultSetTypeList */ for (int i = 1; i <= columnNum; i++) { int type = rsmd.getColumnType(i); if (!((type == Types.BLOB) || (type == Types.CLOB) || (type == Types.BINARY) || (type == Types.LONGVARBINARY) || (type == Types.VARBINARY))) { resultSetTitleList.add(rsmd.getColumnName(i)); resultSetTypeList.add(String.valueOf(type)); columnDisplayed[i - 1] = true; } else { columnDisplayed[i - 1] = false; } } for (int i = columnNum; i < columnNum + userObjListSize; i++) { ActionParameter usrObj = (ActionParameter) userObjList.get(i - columnNum); resultSetTitleList.add(usrObj.getName()); resultSetTypeList.add(usrObj.getType()); columnDisplayed[i] = true; //System.out.println("User List Name = "+ usrObj.getName()+" // Type = "+usrObj.getType()); } /* * this while loop adds each row to the resultSetList */ int index = 0; while (rs.next()) { List row = new ArrayList(columnNum); for (int i = 1; i <= columnNum; i++) { if (columnDisplayed[i - 1]) { Object obj = rs.getObject(i); if (obj == null) { obj = VELOCITY_NULL_ENTRY; } row.add(obj); } } for (int i = columnNum; i < columnNum + userObjListSize; i++) { ActionParameter usrObj = (ActionParameter) userObjList .get(i - columnNum); if (columnDisplayed[i]) { Class c = Class.forName(usrObj.getType()); row.add(c.newInstance()); populate(index, i, row); } } if (filter(row, request)) { continue; } resultSetList.add(row); index++; } BrowserIterator iterator = new DatabaseBrowserIterator( resultSetList, resultSetTitleList, resultSetTypeList, windowSize); setDatabaseBrowserIterator(request, iterator); } catch (SQLException e) { throw e; } finally { try { if (null != selectStmt) selectStmt.close(); if (null != rs) rs.close(); if (null != con) //closes con also { closeConnection(con); } } catch (Exception e) { throw e; } } } /** * This method should be overwritten every time the user object needs to be * populated with some user specific constraints. As an example if the user wanted * to track the parent of an object based on some calculation per row, it could be * done here. * */ public void populate(int rowIndex, int columnIndex, List row) { } /* (non-Javadoc) * @see org.apache.jetspeed.modules.actions.portlets.browser.BrowserQuery#filter(java.util.List, RunData) */ public boolean filter(List row, RenderRequest request) { return false; } protected void readSqlParameters(RenderRequest request) { List sqlParamList = null; int i = 1; while (true) { String param = getPreference(request, SQL_PARAM_PREFIX + i, null); if (param == null) { break; } else { if (sqlParamList == null) { sqlParamList = new ArrayList(); } sqlParamList.add(param); } i++; } if (sqlParamList != null) { setSQLParameters(sqlParamList); } } public void setSQLParameters(List parameters) { this.sqlParameters = parameters; } /* * Connection Management: TODO: rethink this, current impl is a quick prototype */ private boolean driverRegistered = false; public Connection getConnection() { Connection con = null; try { if (driverRegistered == false) { Class driverClass = Class.forName("com.mysql.jdbc.Driver"); Driver driver = (Driver)driverClass.newInstance(); DriverManager.registerDriver(driver); driverRegistered = true; } con = DriverManager.getConnection("jdbc:mysql://j2-server/j2", "j2", "digital"); } catch (ClassNotFoundException cnfe) { log.error("Cant get class for JDBC driver", cnfe); } catch (InstantiationException ie) { log.error("Cant instantiate class for JDBC driver", ie); } catch (IllegalAccessException iae) { log.error("Illegal Access for JDBC driver", iae); } catch (SQLException se) { log.error("Cant get connection", se); } return con; } public Connection getConnection(String poolName) { return null; } public void closeConnection(Connection con) { try { con.close(); } catch (SQLException e) { log.error("Cant close connection", e); } } } 1.1 jakarta-jetspeed-2/applications/demo/src/java/org/apache/portals/applications/database/BrowserQuery.java Index: BrowserQuery.java =================================================================== /* * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.portals.applications.database; import java.util.List; import javax.portlet.PortletRequest; import org.apache.velocity.context.Context; /** * Browser Query Fetch Interface * * @author <a href="mailto:[EMAIL PROTECTED]">David Sean Taylor</a> * @version $Id: BrowserQuery.java,v 1.1 2004/12/23 06:27:24 taylor Exp $ * */ public interface BrowserQuery { /** * This method returns the query to be executed to get the results which will * be opened in the browser. * */ public String getQueryString(PortletRequest request, Context context); /** * Filter the row programmatically on a query. * By returning true, instruct the database browser to filter the row. * By returning false, instruct the database browser to keep the row. * (Filtering means removing the row from the final result set). * * @param row The row being inspected for filtration. * @return True to filter the row, false to keep it. */ public boolean filter(List row, PortletRequest request); /* * Set a list of JDBC query parameters. * All members of this list must be java objects (not primitives) * Should be called from derived classes. * */ public void setSQLParameters(List parameters); public List getSQLParameters(); } 1.1 jakarta-jetspeed-2/applications/demo/src/java/org/apache/portals/applications/database/BrowserIterator.java Index: BrowserIterator.java =================================================================== /* * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.portals.applications.database; import java.io.Serializable; import java.util.Comparator; import java.util.Iterator; import java.util.List; /** * DatabaseBrowserPortlet * * @author <a href="mailto:[EMAIL PROTECTED]">David Sean Taylor </a> * @version $Id: BrowserIterator.java,v 1.1 2004/12/23 06:27:24 taylor Exp $ */ public interface BrowserIterator extends Iterator, Comparator, Serializable { /** * This method returns the index of the row to which the cursor is pointing * at. * */ public int getTop(); /** * This method returns the window size. * */ public int getWindowSize(); /** * This method returns the last index of the row in the window displayed. * */ public int getBottom(); /** * This method points the cursor to the index provided. * * @param start * Index to which cursor should point to */ public void setTop(int start); /** * This method returns the result set vector. * */ public List getResultSet(); /** * This method returns the number of rows in the result set. * */ public int getResultSetSize(); /** * This method returns the List containg the column labels of the result * set. * */ public List getResultSetTitleList(); /** * This method returns the List containg the Types of the columns the result * set. * * @see java.sql.Types */ public List getResultSetTypesList(); /** * This method sorts the result set according to the value of the column as * specified by the parameter column name. Changes the order of the result * set vector. If it is called on the same columnName more than once it * toggles the ordering ie first it will be ascending, then it will be * descending, then ascending and so on. * * @param String * sortColumnName */ public void sort(String sortColumnName); }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]