You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@portals.apache.org by vk...@apache.org on 2008/12/12 15:37:33 UTC
svn commit: r726017 - in /portals/applications:
demo/src/webapp/WEB-INF/view/ gems/
gems/src/java/org/apache/portals/gems/browser/
gems/src/java/org/apache/portals/gems/file/
Author: vkumar
Date: Fri Dec 12 06:37:32 2008
New Revision: 726017
URL: http://svn.apache.org/viewvc?rev=726017&view=rev
Log:
New Features in Database Browser
Added:
portals/applications/demo/src/webapp/WEB-INF/view/database-edit1.vm (with props)
Modified:
portals/applications/demo/src/webapp/WEB-INF/view/database-edit.vm
portals/applications/demo/src/webapp/WEB-INF/view/database-view.vm
portals/applications/gems/pom.xml
portals/applications/gems/src/java/org/apache/portals/gems/browser/BrowserPortlet.java
portals/applications/gems/src/java/org/apache/portals/gems/browser/DatabaseBrowserPortlet.java
portals/applications/gems/src/java/org/apache/portals/gems/file/FilePortlet.java
Modified: portals/applications/demo/src/webapp/WEB-INF/view/database-edit.vm
URL: http://svn.apache.org/viewvc/portals/applications/demo/src/webapp/WEB-INF/view/database-edit.vm?rev=726017&r1=726016&r2=726017&view=diff
==============================================================================
--- portals/applications/demo/src/webapp/WEB-INF/view/database-edit.vm (original)
+++ portals/applications/demo/src/webapp/WEB-INF/view/database-edit.vm Fri Dec 12 06:37:32 2008
@@ -127,18 +127,23 @@
<tr>
<th class="portlet-section-alternate"><font class="portlet-form-field-label">$MESSAGES.getString("label.sql")</font></th>
<td>
- <textarea name="sql" cols='60' rows='8' class="portlet-form-field-label">$!prefsMap.get('sql')</textarea>
+ <input type="input" name="tableName" class="portlet-form-field-label" value="$!prefsMap.get('tableName')" />
</td>
</tr>
</table>
+<input type="hidden" name="configPage" value=""/>
<input type="submit" name="Save" value="Save" onClick="javascript:presave();"/>
<input type="submit" name="Test" value="Test" onClick="javascript:presave();"/>
-
+<input type="button" name="Next" value="Next" onClick="javascript:nextPage();"/>
</form>
<script language="JavaScript">
-
+ function nextPage()
+ {
+ document.J2DBEdit.configPage.value = 'configPage1';
+ document.J2DBEdit.submit();
+ }
function chooseDS()
{
disableDS(false);
Added: portals/applications/demo/src/webapp/WEB-INF/view/database-edit1.vm
URL: http://svn.apache.org/viewvc/portals/applications/demo/src/webapp/WEB-INF/view/database-edit1.vm?rev=726017&view=auto
==============================================================================
--- portals/applications/demo/src/webapp/WEB-INF/view/database-edit1.vm (added)
+++ portals/applications/demo/src/webapp/WEB-INF/view/database-edit1.vm Fri Dec 12 06:37:32 2008
@@ -0,0 +1,325 @@
+#*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+*#
+#set ($MESSAGES = $portletConfig.getResourceBundle($renderRequest.Locale))
+#set ($dst = $prefsMap.get('DatasourceType'))
+#set ($disableDS = "disabled")
+#set ($disableDBCP = "disabled")
+#set ($disableSSO = "disabled")
+#if ($!dst == 'jndi')
+#set ($disableDS = "")
+#elseif ($!dst == 'dbcp')
+#set ($disableDBCP = "")
+#elseif ($!dst == 'sso')
+#set ($disableSSO = "")
+#end
+
+#if ($statusMsg)
+#parse ('/WEB-INF/view/status-include.vm')
+#end
+
+<h3 class="portlet-section-header">$MESSAGES.getString('label.prefs')</h3>
+
+<form name='J2DBEdit' action="$renderResponse.createActionURL()" method="post">
+<table border="0" cellspacing="2" cellpadding="3">
+ <tr>
+ <td class="portlet-section-alternate"><font class="portlet-form-field-label">Field Name</font></td>
+ <td><select size="8" name="avilableCols" id="avilableCols">
+ #foreach ($col in $cols )
+ <option value="$col">$col</option>
+ #end
+ </select></td>
+ <td><input type="button" onClick="javascript:moveoutid();" value=" > " /><br/><input type="button" onClick="javascript:moveinid();" value=" < " /></td>
+ <td><select size="8" name="selectedCols" id="selectedCols">
+ </select></td>
+ <td><input type="button" onClick="javascript:moveUpList();" value="Move Up" /><br/><input type="button" onClick="javascript:moveDownList();" value="Move Down" /></td>
+ </tr>
+ <tr>
+ <td colspan="3"> </td>
+ <td colspan="2">Set Column Labels</td>
+ </tr>
+ <tr>
+ <td colspan="3"> </td>
+ <td><input type="text" id="colLabel" name="colLabel" /></td>
+ <td><input type="button" onClick="javascript:setLabel()" value="Set Label"/></td>
+ </tr>
+</table>
+
+<h4 class="portlet-section-header">$MESSAGES.getString('label.general.settings')</h4>
+<table border="0" cellspacing="2" cellpadding="3">
+ <tr>
+ <th class="portlet-section-alternate"><font class="portlet-form-field-label">$MESSAGES.getString("label.sql")</font></th>
+ <td>
+ <textarea name="conditions" id="conditions" cols='60' rows='8' class="portlet-form-field-label">$!prefsMap.get('conditions')</textarea>
+ </td>
+ </tr>
+</table>
+
+<input type="hidden" name="columnTitles" id="columnTitles" value=""/>
+<input type="hidden" name="columnNames" id="columnNames" value=""/>
+<input type="hidden" name="configPage" value=""/>
+<input type="button" name="Save" value="Save" onClick="javascript:saveAdvanceData();"/>
+</form>
+
+<script language="JavaScript">
+
+ var ColTitle = new Array();
+ #set($index = 0)
+ #foreach ($colT in $colTitle )
+ ColTitle[$index] = '$colT';
+ #set($index = $index + 1)
+ #end
+ var ColName = new Array();
+ #set($index = 0)
+ #foreach ($colN in $colName )
+ ColName[$index] = '$colN';
+ #set($index = $index + 1)
+ #end
+
+ function removeFromList()
+ {
+ var columns = document.getElementById('avilableCols');
+ var selectedCols = document.getElementById('selectedCols');
+ for(var j=0; j<ColName.length; j++)
+ {
+ for(var i=0; i<columns.length; i++)
+ {
+ if(columns.options[i].value == ColName[j])
+ {
+ columns.remove(i);
+ var y=document.createElement('option');
+ y.text=ColName[j] + ' ' + ColTitle[j];
+ y.value=ColName[j] + ':' + ColTitle[j];
+ try
+ {
+ selectedCols.add(y,null);
+ }
+ catch(ex)
+ {
+ selectedCols.add(y);
+ }
+ }
+ }
+ }
+ }
+ function listToString()
+ {
+ var columns = document.getElementById('columnTitles');
+ var selectedCols = document.getElementById('selectedCols');
+ var len = selectedCols.length;
+ var tempValue = '';
+ var sqlValue ='';
+ for(var j=0; j<len; j++)
+ {
+ if(selectedCols.options[j].value.indexOf(':')>-1){
+ tempValue = tempValue + "," +selectedCols.options[j].value.split(':')[1];
+ sqlValue = sqlValue + "," +selectedCols.options[j].value.split(':')[0];
+ }else{
+ tempValue = tempValue + "," +selectedCols.options[j].value;
+ sqlValue = sqlValue + "," +selectedCols.options[j].value;
+ }
+ }
+ document.getElementById('columnTitles').value = tempValue.substring(1);
+ document.getElementById('columnNames').value = sqlValue.substring(1);
+ }
+ function saveAdvanceData()
+ {
+ listToString();
+ document.J2DBEdit.submit();
+ }
+
+ function moveoutid()
+ {
+ var avilableCols = document.getElementById('avilableCols');
+ var len = avilableCols.length;
+ var selectedCols = document.getElementById('selectedCols');
+ for(var j=0; j<len; j++)
+ {
+ if(avilableCols[j].selected)
+ {
+ var tmp = avilableCols.options[j].text;
+ var tmp1 = avilableCols.options[j].value;
+ avilableCols.remove(j);
+ j--;
+ var y=document.createElement('option');
+ y.text=tmp;
+ y.value=tmp1;
+ try
+ {
+ selectedCols.add(y,null);
+ }
+ catch(ex)
+ {
+ selectedCols.add(y);
+ }
+ break;
+ }
+ }
+ }
+
+
+ function moveinid()
+ {
+ var avilableCols = document.getElementById('avilableCols');
+ var selectedCols = document.getElementById('selectedCols');
+ var len = selectedCols.length;
+ for(var j=0; j<len; j++)
+ {
+ if(selectedCols[j].selected)
+ {
+ var tmp = selectedCols.options[j].text.split(' ')[0];
+ var tmp1 = selectedCols.options[j].value.split(':')[0];
+ selectedCols.remove(j);
+ j--;
+ var y=document.createElement('option');
+ y.text=tmp;
+ y.value=tmp1;
+ try
+ {
+ avilableCols.add(y,null);}
+ catch(ex){
+ avilableCols.add(y);
+ }
+ break;
+ }
+ }
+ }
+
+ function setLabel()
+ {
+ var listField = document.getElementById('selectedCols');
+ var colLabel = document.getElementById('colLabel').value;
+ var index = listField.selectedIndex
+ var labelsVal = listField[index].value.split(':');
+ listField[index].text = labelsVal[0] + ' ' + colLabel;
+ listField[index].value = labelsVal[0] + ':' + colLabel;
+ document.getElementById('colLabel').value = '';
+ listField.selectedIndex=0;
+ }
+
+ function moveUpList() {
+ var listField = document.getElementById('selectedCols');
+ if ( listField.length == -1) { // If the list is empty
+ alert("There are no values which can be moved!");
+ } else {
+ var selected = listField.selectedIndex;
+ if (selected == -1) {
+ alert("You must select an entry to be moved!");
+ } else { // Something is selected
+ if ( listField.length == 0 ) { // If there's only one in the list
+ alert("There is only one entry!\nThe one entry will remain in place.");
+ } else { // There's more than one in the list, rearrange the list order
+ if ( selected == 0 ) {
+ alert("The first entry in the list cannot be moved up.");
+ } else {
+ // Get the text/value of the one directly above the hightlighted entry as
+ // well as the highlighted entry; then flip them
+ var moveText1 = listField[selected-1].text;
+ var moveText2 = listField[selected].text;
+ var moveValue1 = listField[selected-1].value;
+ var moveValue2 = listField[selected].value;
+ listField[selected].text = moveText1;
+ listField[selected].value = moveValue1;
+ listField[selected-1].text = moveText2;
+ listField[selected-1].value = moveValue2;
+ listField.selectedIndex = selected-1; // Select the one that was selected before
+ } // Ends the check for selecting one which can be moved
+ } // Ends the check for there only being one in the list to begin with
+ } // Ends the check for there being something selected
+ } // Ends the check for there being none in the list
+ }
+
+ function moveDownList() {
+ var listField = document.getElementById('selectedCols');
+ if ( listField.length == -1) { // If the list is empty
+ alert("There are no values which can be moved!");
+ } else {
+ var selected = listField.selectedIndex;
+ if (selected == -1) {
+ alert("You must select an entry to be moved!");
+ } else { // Something is selected
+ if ( listField.length == 0 ) { // If there's only one in the list
+ alert("There is only one entry!\nThe one entry will remain in place.");
+ } else { // There's more than one in the list, rearrange the list order
+ if ( selected == listField.length-1 ) {
+ alert("The last entry in the list cannot be moved down.");
+ } else {
+ // Get the text/value of the one directly below the hightlighted entry as
+ // well as the highlighted entry; then flip them
+ var moveText1 = listField[selected+1].text;
+ var moveText2 = listField[selected].text;
+ var moveValue1 = listField[selected+1].value;
+ var moveValue2 = listField[selected].value;
+ listField[selected].text = moveText1;
+ listField[selected].value = moveValue1;
+ listField[selected+1].text = moveText2;
+ listField[selected+1].value = moveValue2;
+ listField.selectedIndex = selected+1; // Select the one that was selected before
+ } // Ends the check for selecting one which can be moved
+ } // Ends the check for there only being one in the list to begin with
+ } // Ends the check for there being something selected
+ } // Ends the check for there being none in the list
+ }
+
+ function chooseDS()
+ {
+ disableDS(false);
+ disableDBCP(true);
+ disableSSO(true);
+ }
+
+ function chooseDBCP()
+ {
+ disableDS(true);
+ disableDBCP(false);
+ disableSSO(true);
+ }
+
+ function chooseSSO()
+ {
+ disableDS(true);
+ disableDBCP(true);
+ disableSSO(false);
+ }
+
+ function disableDS(flag)
+ {
+ document.forms['J2DBEdit'].JndiDatasource.disabled = flag;
+ }
+
+ function disableDBCP(flag)
+ {
+ document.forms['J2DBEdit'].JdbcDriver.disabled = flag;
+ document.forms['J2DBEdit'].JdbcConnection.disabled = flag;
+ document.forms['J2DBEdit'].JdbcUsername.disabled = flag;
+ document.forms['J2DBEdit'].JdbcPassword.disabled = flag;
+ }
+
+ function disableSSO(flag)
+ {
+ document.forms['J2DBEdit'].SSOSite.disabled = flag;
+ document.forms['J2DBEdit'].SSOJdbcDriver.disabled = flag;
+ document.forms['J2DBEdit'].SSOJdbcConnection.disabled = flag;
+ }
+
+ function presave()
+ {
+ disableDS(false);
+ disableDBCP(false);
+ disableSSO(false);
+ }
+ removeFromList();
+</script>
Propchange: portals/applications/demo/src/webapp/WEB-INF/view/database-edit1.vm
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: portals/applications/demo/src/webapp/WEB-INF/view/database-edit1.vm
------------------------------------------------------------------------------
svn:keywords = Id
Modified: portals/applications/demo/src/webapp/WEB-INF/view/database-view.vm
URL: http://svn.apache.org/viewvc/portals/applications/demo/src/webapp/WEB-INF/view/database-view.vm?rev=726017&r1=726016&r2=726017&view=diff
==============================================================================
--- portals/applications/demo/src/webapp/WEB-INF/view/database-view.vm (original)
+++ portals/applications/demo/src/webapp/WEB-INF/view/database-view.vm Fri Dec 12 06:37:32 2008
@@ -27,7 +27,15 @@
#if ($statusMsg)
#parse ('/WEB-INF/view/status-include.vm')
#end
-
+#set ($xlsLink = $renderResponse.createActionURL())
+$xlsLink.setParameter("exportType","xlsExport")
+#set ($xmlLink = $renderResponse.createActionURL())
+$xmlLink.setParameter("exportType","xmlExport")
+<table>
+ <tr>
+ <td><a target="_blank" href="$xlsLink">XLS</a> <!--<a target="_blank" href="$xmlLink">XML</a>--></td>
+ </tr>
+</table>
<table cellpadding=0 cellspacing=1 border=0 width="100%">
<tbody>
<tr>
Modified: portals/applications/gems/pom.xml
URL: http://svn.apache.org/viewvc/portals/applications/gems/pom.xml?rev=726017&r1=726016&r2=726017&view=diff
==============================================================================
--- portals/applications/gems/pom.xml (original)
+++ portals/applications/gems/pom.xml Fri Dec 12 06:37:32 2008
@@ -89,7 +89,11 @@
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
-
+ <dependency>
+ <groupId>poi</groupId>
+ <artifactId>poi</artifactId>
+ <version>3.0-FINAL</version>
+ </dependency>
</dependencies>
<!-- Project Information -->
Modified: portals/applications/gems/src/java/org/apache/portals/gems/browser/BrowserPortlet.java
URL: http://svn.apache.org/viewvc/portals/applications/gems/src/java/org/apache/portals/gems/browser/BrowserPortlet.java?rev=726017&r1=726016&r2=726017&view=diff
==============================================================================
--- portals/applications/gems/src/java/org/apache/portals/gems/browser/BrowserPortlet.java (original)
+++ portals/applications/gems/src/java/org/apache/portals/gems/browser/BrowserPortlet.java Fri Dec 12 06:37:32 2008
@@ -46,84 +46,54 @@
* AbstractBrowserPortlet
*
* @author <a href="mailto:taylor@apache.org">David Sean Taylor </a>
- * @version $Id: AbstractBrowserPortlet.java,v 1.2 2005/01/01 00:01:29 taylor
- * Exp $
+ * @version $Id$
*/
public class BrowserPortlet extends GenericVelocityPortlet implements Browser
{
-
protected static final String SQL = "sql";
-
+ public static final String TABLE_NAME = "tableName";
+ public static final String CONDITIONS = "conditions";
+ public static final String COLUMNS = "columnNames";
protected static final String POOLNAME = "poolname";
-
protected static final String START = "start";
protected static final String FIND = "find";
protected static final String SEARCH_STRING = "searchString";
protected static final String SEARCH_COLUMN = "searchColumn";
protected static final String FILTERED = "filtered";
protected static final String FILTER = "filter";
-
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 BROWSER_ACTION_KEY = "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 FIRST = "first";
-
protected static final String LAST = "last";
-
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();
-
/*
* SSO link
*/
protected PortletContext context;
protected SSOProvider sso;
-
/**
* Static initialization of the logger for this class
*/
@@ -132,49 +102,38 @@
public void init(PortletConfig config) throws PortletException
{
super.init(config);
-
context = getPortletContext();
- sso = (SSOProvider)context.getAttribute("cps:SSO");
+ sso = (SSOProvider) context.getAttribute("cps:SSO");
if (null == sso)
{
log.info("Warning: SSO provider not found.");
- //throw new PortletException("Failed to find SSO Provider on portlet initialization");
- }
+ // throw new PortletException("Failed to find SSO Provider on portlet initialization");
+ }
}
- public void getRows(RenderRequest request, String sql, int windowSize)
- throws Exception
+ public void getRows(RenderRequest request, String sql, int windowSize) throws Exception
{
}
- public void getRows(RenderRequest request, String sql, int windowSize, String filter)
- throws Exception
+ public void getRows(RenderRequest request, String sql, int windowSize, String filter) throws Exception
{
}
-
- public void doView(RenderRequest request, RenderResponse response)
- throws PortletException, IOException
+
+ public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException
{
int resultSetSize, next, prev, windowSize;
-
response.setContentType("text/html");
-
BrowserIterator iterator = getBrowserIterator(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"));
-
- StatusMessage message = (StatusMessage)PortletMessaging.consume(request, "DatabaseBrowserPortlet", "action");
+ StatusMessage message = (StatusMessage) PortletMessaging.consume(request, "DatabaseBrowserPortlet", "action");
if (message != null)
{
- this.getContext(request).put("statusMsg", message);
+ this.getContext(request).put("statusMsg", message);
}
-
try
{
if (iterator == null)
@@ -185,11 +144,11 @@
String filter = request.getParameter(FILTER);
if (filter != null)
getRows(request, sql, windowSize, filter);
- else
+ else
getRows(request, sql, windowSize);
iterator = getBrowserIterator(request);
start = 0;
- }
+ }
else
{
if (sortColName != null)
@@ -197,28 +156,23 @@
iterator.sort(sortColName);
}
}
-
- resultSetSize = iterator.getResultSetSize();
+ resultSetSize = iterator.getResultSetSize();
if (start >= resultSetSize)
{
if ((start - windowSize) > 0)
start = resultSetSize - windowSize;
else
- start = 0;
- }
+ start = 0;
+ }
next = start + windowSize;
prev = start - windowSize;
if (prev < 0 && start > 0)
- prev = 0;
+ prev = 0;
iterator.setTop(start);
-
-
readLinkParameters(request, context);
-
if (iterator != null)
{
resultSetSize = iterator.getResultSetSize();
-
if (next <= resultSetSize)
{
context.put(NEXT, String.valueOf(next));
@@ -227,25 +181,19 @@
{
context.put(PREVIOUS, String.valueOf(prev));
}
-
context.put(BROWSER_ITERATOR, iterator);
- context.put(BROWSER_TITLE_ITERATOR, iterator
- .getResultSetTitleList());
+ context.put(BROWSER_TITLE_ITERATOR, getTitleList(request));
context.put(BROWSER_TABLE_SIZE, new Integer(resultSetSize));
context.put(WINDOW_SIZE, new Integer(windowSize));
context.put(START, new Integer(start));
/*
- * 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);
+ * 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)
+ }
+ catch (Exception e)
{
String msg = e.toString();
Throwable cause = e.getCause();
@@ -253,39 +201,31 @@
{
msg = msg + ", " + cause.getMessage();
}
-
context.put("statusMsg", new StatusMessage(msg, StatusMessage.ERROR));
// log the error msg
log.error("Exception", e);
-
/*
- * TODO: error logging
- *
- * rundata.setMessage("Error in Portals Gems Browser: " +
- * e.toString()); rundata.setStackTrace(StringUtils.stackTrace(e),
- * e);
+ * TODO: error logging rundata.setMessage("Error in Portals Gems 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
+ 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
+ public void processAction(ActionRequest request, ActionResponse response) throws PortletException, IOException
{
if (request.getPortletMode() == PortletMode.EDIT)
{
processPreferencesAction(request, response);
- clearBrowserIterator(request);
- } else
+ clearBrowserIterator(request);
+ }
+ else
{
String browserAction = request.getParameter("db.browser.action");
if (browserAction != null)
@@ -301,12 +241,12 @@
}
String searchString = request.getParameter(SEARCH_STRING);
if (searchString != null)
- {
+ {
String searchColumn = request.getParameter(SEARCH_COLUMN);
- String filtered = request.getParameter(FILTERED);
+ String filtered = request.getParameter(FILTERED);
if (filtered != null)
{
- clearBrowserIterator(request);
+ clearBrowserIterator(request);
response.setRenderParameter(FILTER, searchString);
}
else
@@ -316,18 +256,19 @@
{
try
{
- StatusMessage sm = new StatusMessage("Could not find match for: " + searchString, StatusMessage.ALERT);
+ StatusMessage sm = new StatusMessage("Could not find match for: " + searchString, StatusMessage.ALERT);
PortletMessaging.publish(request, "DatabaseBrowserPortlet", "action", sm);
}
catch (Exception e)
- {}
+ {
+ }
}
else
{
- response.setRenderParameter(START, Integer.toString(index));
+ response.setRenderParameter(START, Integer.toString(index));
}
}
- }
+ }
}
}
}
@@ -337,13 +278,10 @@
*
* @param data
* The turbine rundata context for this request.
- *
*/
protected BrowserIterator getBrowserIterator(PortletRequest request)
{
- BrowserIterator iterator = (BrowserIterator) request
- .getPortletSession().getAttribute(BROWSER_ACTION_KEY,
- PortletSession.PORTLET_SCOPE);
+ BrowserIterator iterator = (BrowserIterator) request.getPortletSession().getAttribute(BROWSER_ACTION_KEY, PortletSession.PORTLET_SCOPE);
return iterator;
}
@@ -352,37 +290,32 @@
*
* @param data
* The turbine rundata context for this request.
- * @param iterator.
- *
+ * @param iterator
+ * .
*/
- protected void setBrowserIterator(RenderRequest request,
- BrowserIterator iterator)
+ protected void setBrowserIterator(RenderRequest request, BrowserIterator iterator)
{
request.getPortletSession().setAttribute(BROWSER_ACTION_KEY, iterator);
}
/**
- * Centralizes the calls to session - to clear the BrowserIterator from the
- * temp storage.
+ * Centralizes the calls to session - to clear the BrowserIterator from the temp storage.
*
* @param data
* The turbine rundata context for this request.
- *
*/
protected void clearBrowserIterator(PortletRequest request)
{
request.getPortletSession().removeAttribute(BROWSER_ACTION_KEY);
}
- protected int getStartVariable(RenderRequest request, String attrName,
- String sortColName, BrowserIterator iterator)
+ 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)
+ if (sortColName != null)
start = getStartIndex();
-
if (start < 0)
{
// fallback routine for start
@@ -391,7 +324,7 @@
{
try
{
- start = Integer.parseInt(startStr);
+ start = Integer.parseInt(startStr);
}
catch (Exception e)
{
@@ -400,12 +333,13 @@
else
start = 0;
}
- } else if (start == -1 && iterator != null)
+ }
+ else if (start == -1 && iterator != null)
{
start = iterator.getTop();
}
-
- if (start < 0) start = 0;
+ if (start < 0)
+ start = 0;
}
return start;
}
@@ -419,11 +353,8 @@
}
/**
- * 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.
- *
+ * 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)
{
@@ -435,56 +366,42 @@
return sql;
}
- public String getQueryString(RenderRequest request)
+ public String getQueryString(PortletRequest request)
{
return null;
}
- protected String getPreference(RenderRequest request, String attrName,
- String attrDefValue)
+ protected String getPreference(PortletRequest request, String attrName, String attrDefValue)
{
return request.getPreferences().getValue(attrName, attrDefValue);
}
protected void readUserParameters(RenderRequest request, Context context)
{
- Object userObjRead = request.getPortletSession().getAttribute(
- USER_OBJECTS, PortletSession.PORTLET_SCOPE);
+ Object userObjRead = request.getPortletSession().getAttribute(USER_OBJECTS, PortletSession.PORTLET_SCOPE);
if (userObjRead != null)
{
context.put(USER_OBJECTS, userObjRead);
// System.out.println("userObjectListSize: "+
// ((List)userObjRead).size());
- } else
+ }
+ 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()); }
+ * 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 readSqlParameters(RenderRequest request)
+ protected void readSqlParameters(PortletRequest request)
{
List sqlParamList = null;
-
int i = 1;
while (true)
{
@@ -492,7 +409,8 @@
if (param == null)
{
break;
- } else
+ }
+ else
{
if (sqlParamList == null)
{
@@ -502,12 +420,13 @@
}
i++;
}
-
if (sqlParamList != null)
{
setSQLParameters(sqlParamList);
}
}
+
+
public void setSQLParameters(List parameters)
{
@@ -520,11 +439,8 @@
}
/**
- * 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.
- *
+ * 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)
{
@@ -532,9 +448,7 @@
/*
* (non-Javadoc)
- *
- * @see org.apache.jetspeed.modules.actions.portlets.browser.BrowserQuery#filter(java.util.List,
- * RunData)
+ * @see org.apache.jetspeed.modules.actions.portlets.browser.BrowserQuery#filter(java.util.List, RunData)
*/
public boolean filter(List row, RenderRequest request)
{
@@ -558,28 +472,26 @@
catch (Exception ee)
{
System.err.println("Failed to publish message: " + e);
- }
+ }
}
public int find(BrowserIterator iterator, String searchString, String searchColumn)
{
int index = 0;
- int column = 1;
-
+ int column = 1;
if (searchColumn != null)
column = Integer.parseInt(searchColumn);
-
Iterator it = iterator.getResultSet().iterator();
while (it.hasNext())
{
Object row = it.next();
String item = "";
if (row instanceof String)
- item = (String)row;
+ item = (String) row;
else if (row instanceof List)
{
- // TODO: this only works on String columns
- item = (String)((List)row).get(column);
+ // TODO: this only works on String columns
+ item = (String) ((List) row).get(column);
}
if (item.startsWith(searchString))
{
@@ -587,7 +499,11 @@
}
index++;
}
-
return -1;
}
+
+ public List getTitleList(PortletRequest request)
+ {
+ return null;
+ }
}
\ No newline at end of file
Modified: portals/applications/gems/src/java/org/apache/portals/gems/browser/DatabaseBrowserPortlet.java
URL: http://svn.apache.org/viewvc/portals/applications/gems/src/java/org/apache/portals/gems/browser/DatabaseBrowserPortlet.java?rev=726017&r1=726016&r2=726017&view=diff
==============================================================================
--- portals/applications/gems/src/java/org/apache/portals/gems/browser/DatabaseBrowserPortlet.java (original)
+++ portals/applications/gems/src/java/org/apache/portals/gems/browser/DatabaseBrowserPortlet.java Fri Dec 12 06:37:32 2008
@@ -16,7 +16,10 @@
*/
package org.apache.portals.gems.browser;
+import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.lang.reflect.Method;
import java.security.AccessControlContext;
import java.security.AccessController;
import java.sql.Connection;
@@ -24,8 +27,12 @@
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
+import java.sql.Statement;
import java.sql.Types;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
import java.util.Iterator;
import java.util.List;
@@ -44,12 +51,20 @@
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
+import org.apache.commons.lang.StringUtils;
+import org.apache.jetspeed.PortalReservedParameters;
+import org.apache.jetspeed.request.RequestContext;
import org.apache.jetspeed.security.JSSubject;
import org.apache.jetspeed.sso.SSOContext;
import org.apache.jetspeed.sso.SSOException;
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.portals.bridges.util.PreferencesHelper;
import org.apache.portals.gems.util.StatusMessage;
import org.apache.portals.messaging.PortletMessaging;
+import org.springframework.util.ReflectionUtils;
/**
* DatabaseBrowserPortlet
@@ -62,11 +77,159 @@
private static final String COLUMNS_TITLE = "columnTitles";
private static final String CATLOG_NAME = "catlogName";
private static final String SCHEMA_NAME = "schemaName";
- private static final String TABLE_NAME = "tableName";
+ private static final String EXPORT_TYPE = "exportType";
+ private static final String XML_EXPORT = "xmlExport";
+ private static final String XLS_EXPORT = "xlsExport";
+ String pathSeprator = System.getProperty("file.separator");
+ String pageRoot = System.getProperty("java.io.tmpdir");
private String[] catlogNames;
private String[] tableNames;
private String[] schemaNames;
private String[] colNames;
+ private SimpleDateFormat date_output;
+ private static final String DATE_OUTPUT_PATTERN = "M/d/yyyy";
+ BrowserIterator dataBaseIterator;
+
+ public BrowserIterator getLocalIterators(PortletRequest request, String sql, int windowSize) throws Exception
+ {
+ BrowserIterator iterator;
+ 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 = request.getPreferences().getValue(POOLNAME, null);
+ if (poolname == null || poolname.length() == 0)
+ {
+ con = getConnection(request);
+ }
+ 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);
+ }
+ }
+ resultSetList.add(row);
+ index++;
+ }
+ if (windowSize == -1)
+ {
+ iterator = new DatabaseBrowserIterator(resultSetList, resultSetTitleList, resultSetTypeList, resultSetList.size());
+ }
+ else
+ {
+ iterator = new DatabaseBrowserIterator(resultSetList, resultSetTitleList, resultSetTypeList, windowSize);
+ }
+ }
+ 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;
+ }
+ }
+ return iterator;
+ }
/**
* Execute the sql statement as specified by the user or the default, and store the resultSet in a vector.
@@ -284,6 +447,38 @@
return con;
}
+ private Method[] getResultMethods(List types)
+ {
+ Method beanMethods[] = new Method[types.size()];
+ int type;
+ for (int index = 0; index < beanMethods.length; index++)
+ {
+ type = Integer.parseInt((String) types.get(index));
+ switch (type)
+ {
+ case Types.DATE:
+ beanMethods[index] = ReflectionUtils.findMethod(ResultSet.class, "getDate", new Class[] { String.class });
+ break;
+ case Types.VARCHAR:
+ beanMethods[index] = ReflectionUtils.findMethod(ResultSet.class, "getString", new Class[] { String.class });
+ break;
+ case Types.CHAR:
+ beanMethods[index] = ReflectionUtils.findMethod(ResultSet.class, "getString", new Class[] { String.class });
+ break;
+ case Types.INTEGER:
+ beanMethods[index] = ReflectionUtils.findMethod(ResultSet.class, "getInt", new Class[] { String.class });
+ break;
+ case Types.FLOAT:
+ beanMethods[index] = ReflectionUtils.findMethod(ResultSet.class, "getFloat", new Class[] { String.class });
+ break;
+ case Types.DOUBLE:
+ beanMethods[index] = ReflectionUtils.findMethod(ResultSet.class, "getDouble", new Class[] { String.class });
+ break;
+ }
+ }
+ return beanMethods;
+ }
+
public Connection getConnection(String poolName)
{
return null;
@@ -314,12 +509,10 @@
{
try
{
- // fillDropDowns(getConnection(request), request);
- // getContext(request).put("catlogs", getCatalogNames());
- // getContext(request).put("schemas", getSchemaNames());
- // getContext(request).put("tables", getTableNames());
fillColumnDropDown(getConnection(request), request);
getContext(request).put("cols", getColNames());
+ getContext(request).put("colTitle",getTitleList(request));
+ getContext(request).put("colName",getColumNames(request));
}
catch (Exception e)
{
@@ -328,24 +521,12 @@
}
request.setAttribute("EditPage", "/WEB-INF/view/database-edit1.vm");
}
- else if (editAction != null && editAction.equals("configPage2"))
- {
- try
- {
- fillDropDowns(getConnection(request), request);
- }
- catch (Exception e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- request.setAttribute("EditPage", "/WEB-INF/view/database-edit2.vm");
- }
super.doEdit(request, response);
}
public void processAction(ActionRequest request, ActionResponse response) throws PortletException, IOException
{
+ String userName = "";
if (request.getPortletMode() == PortletMode.EDIT)
{
String test = request.getParameter("Test");
@@ -379,10 +560,65 @@
{
response.setPortletMode(PortletMode.EDIT);
response.setRenderParameter("configPage", editAction);
+ response.setRenderParameter(TABLE_NAME, request.getParameter(TABLE_NAME));
return;
}
+ super.processAction(request, response);
+ }
+ else
+ {
+ String exportParam = request.getParameter(EXPORT_TYPE);
+ String xlsFileName = "thedata.xls";
+ String fileName ="";
+ if (!StringUtils.isEmpty(exportParam))
+ {
+ if (exportParam.equals(XLS_EXPORT))
+ {
+ if (request.getUserPrincipal() != null)
+ {
+ userName = request.getUserPrincipal().getName();
+ }
+ else
+ {
+ userName = "guest";
+ }
+ try
+ {
+ dataBaseIterator = getLocalIterators(request, getQueryString(request), -1);
+ HSSFWorkbook excelWorkbook = generateExcel(dataBaseIterator.getResultSet(), getColumNames(request),
+ (String[]) getTitleList(request).toArray(new String[getTitleList(request).size()]),
+ getResultMethods(dataBaseIterator.getResultSetTypesList()));
+ if (excelWorkbook != null)
+ {
+ String path;
+ path = cleanUserFolder(userName);
+ path = path + pathSeprator + xlsFileName;
+ File tempFile = new File(path);
+ FileOutputStream out = new FileOutputStream(tempFile);
+ excelWorkbook.write(out);
+ fileName = xlsFileName;
+ }
+ }
+ catch (Exception e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ else if (exportParam.equals(XML_EXPORT))
+ {
+ }
+ RequestContext jsReqContext = (RequestContext) request.getAttribute(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE);
+ response.sendRedirect(request.getContextPath().replace(
+ request.getContextPath(),
+ jsReqContext.getPortalURL().getBasePath().subSequence(
+ 0,
+ jsReqContext.getPortalURL()
+ .getBasePath()
+ .lastIndexOf("/"))) +
+ "/fileserver/content?file=" + userName + "_" + fileName);
+ }
}
- super.processAction(request, response);
}
private Subject getSubject()
@@ -391,21 +627,6 @@
return JSSubject.getSubject(context);
}
- private String[] getCatalogNames()
- {
- return catlogNames;
- }
-
- private String[] getSchemaNames()
- {
- return schemaNames;
- }
-
- private String[] getTableNames()
- {
- return tableNames;
- }
-
private String[] getColNames()
{
return colNames;
@@ -419,19 +640,28 @@
private void fillColumnDropDown(Connection con, RenderRequest request)
{
- String tableName = request.getPreferences().getValue(TABLE_NAME, "client");
+ String tableName;
try
{
- PreparedStatement stmt = con.prepareStatement("select * from " + tableName);
- ResultSet set = stmt.executeQuery();
+ if (!StringUtils.isEmpty(request.getParameter(TABLE_NAME)))
+ {
+ tableName = request.getParameter(TABLE_NAME);
+ }
+ else
+ {
+ tableName = request.getPreferences().getValue(TABLE_NAME, "");
+ }
+ Statement stmt = con.createStatement();
+ ResultSet set = stmt.executeQuery("select * from " + tableName);
ResultSetMetaData meta = set.getMetaData();
int ColumnCount = meta.getColumnCount();
List colums = new ArrayList();
- for (int index = 0; index < ColumnCount; index++)
+ for (int index = 1; index <= ColumnCount; index++)
{
colums.add(meta.getColumnName(index));
}
- tableNames = (String[]) colums.toArray();
+ this.colNames = new String[colums.size()];
+ colums.toArray((String[]) this.colNames);
}
catch (Exception e)
{
@@ -439,21 +669,163 @@
}
}
- private void fillDropDowns(Connection con, RenderRequest request)
+ public List getTitleList(PortletRequest request)
{
- String catlogName = request.getPreferences().getValue(CATLOG_NAME, "");
- String tableName = request.getPreferences().getValue(TABLE_NAME, "");
- String schemaName = request.getPreferences().getValue(SCHEMA_NAME, "");
- try
+ String titles = null;
+ titles = request.getPreferences().getValue(COLUMNS_TITLE, titles);
+ return Arrays.asList(titles.split(","));
+ }
+
+ public String[] getColumNames(PortletRequest request)
+ {
+ String columns[] = null;
+ String tempColumn = "";
+ tempColumn = request.getPreferences().getValue(COLUMNS, tempColumn);
+ return tempColumn.split(",");
+ }
+
+ public String getQueryString(PortletRequest request)
+ {
+ StringBuffer query = new StringBuffer();
+ String table = request.getPreferences().getValue(TABLE_NAME, "");
+ String condtions = request.getPreferences().getValue(CONDITIONS, "");
+ String columns = request.getPreferences().getValue(COLUMNS, "");
+ if (!StringUtils.isEmpty(columns))
{
- // catlogNames = (String[]) con.getMetaData().getCatalogs().getArray("TABLE_CATALOG").getArray();
- // schemaNames = (String[]) con.getMetaData().getSchemas().getArray("TABLE_SCHEM").getArray();
- tableNames = (String[]) con.getMetaData().getTables(catlogName, tableName, "%", new String[] { "TABLE" }).getArray("TABLE_NAME").getArray();
+ query.append("select ").append(columns).append(" from ").append(table);
}
- catch (SQLException e)
+ else
+ {
+ query.append("select * from ").append(table);
+ }
+ if (!StringUtils.isEmpty(condtions))
+ {
+ query.append(" ").append(condtions);
+ }
+ return query.toString();
+ }
+
+ private HSSFWorkbook generateExcel(List beanList, String[] colNames, String[] colDescs, Method[] readMethods)
+ {
+ date_output = new SimpleDateFormat(DATE_OUTPUT_PATTERN);
+ HSSFWorkbook workbook = new HSSFWorkbook();
+ HSSFSheet sheet = workbook.createSheet("export");
+ addColumnHeaders(sheet, colDescs);
+ addColumnValues(sheet, beanList, colNames, readMethods);
+ return workbook;
+ }
+
+ private void addColumnHeaders(HSSFSheet sheet, String[] colDescs)
+ {
+ HSSFRow rowHeader = sheet.createRow(0);
+ for (int i = 0; i < colDescs.length; i++)
+ {
+ addColumnValue(rowHeader, colDescs[i], i);
+ }
+ }
+
+ private void addColumnValues(HSSFSheet sheet, List beanList, String[] colNames, Method[] readMethods)
+ {
+ int rowIndex = 0;
+ Iterator beanListIter = beanList.iterator();
+ List tempList = null;
+ while (beanListIter.hasNext())
+ {
+ Object bean = beanListIter.next();
+ if (bean != null)
+ {
+ HSSFRow row = sheet.createRow(rowIndex + 1);
+ if (bean instanceof ArrayList)
+ {
+ tempList = (List) bean;
+ for (int i = 0; i < tempList.size(); i++)
+ {
+ String colVal = columnValueToString(tempList.get(i));
+ addColumnValue(row, colVal, i);
+ }
+ }
+ else
+ {
+ for (int i = 0; i < colNames.length; i++)
+ {
+ String colName = colNames[i];
+ Method colReadMethod = readMethods[i];
+ String colVal = "";
+ if (colReadMethod != null)
+ {
+ try
+ {
+ Object colValObj = colReadMethod.invoke(bean, new Object[] { colName });
+ colVal = columnValueToString(colValObj);
+ }
+ catch (Exception ex)
+ {
+ colVal = "";
+ }
+ }
+ addColumnValue(row, colVal, i);
+ }
+ }
+ rowIndex++;
+ }
+ }
+ }
+
+ private void addColumnValue(HSSFRow rowHeader, String value, int index)
+ {
+ HSSFCell cell = rowHeader.createCell((short) index);
+ cell.setEncoding(HSSFCell.ENCODING_UTF_16);
+ if (value == null)
+ value = "";
+ cell.setCellValue(value);
+ }
+
+ protected String columnValueToString(Object colValObj)
+ {
+ String colVal = null;
+ if (colValObj == null)
+ colVal = "";
+ else
+ {
+ if (colValObj instanceof Date)
+ {
+ colVal = date_output.format((Date) colValObj);
+ }
+ else
+ {
+ colVal = colValObj.toString();
+ }
+ }
+ return colVal;
+ }
+
+ private String cleanUserFolder(String userName)
+ {
+ String folderName="";
+ synchronized (this)
+ {
+ folderName = getUserFolder(userName, false);
+ File dir = new File(folderName);
+ if (dir.exists())
+ dir.delete();
+ dir = new File(folderName);
+ dir.mkdir();
+ }
+ return folderName;
+ }
+
+
+ private String getUserFolder(String userName, boolean fullPath)
+ {
+ if (pathSeprator == null || pathSeprator.equals(""))
+ pathSeprator = "/";
+ if (fullPath)
+ {
+ return userName + pathSeprator;
+ }
+ else
{
- // TODO Auto-generated catch block
- e.printStackTrace();
+ return pageRoot + pathSeprator + userName;
}
}
}
Modified: portals/applications/gems/src/java/org/apache/portals/gems/file/FilePortlet.java
URL: http://svn.apache.org/viewvc/portals/applications/gems/src/java/org/apache/portals/gems/file/FilePortlet.java?rev=726017&r1=726016&r2=726017&view=diff
==============================================================================
--- portals/applications/gems/src/java/org/apache/portals/gems/file/FilePortlet.java (original)
+++ portals/applications/gems/src/java/org/apache/portals/gems/file/FilePortlet.java Fri Dec 12 06:37:32 2008
@@ -35,6 +35,7 @@
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
+import org.apache.commons.lang.StringUtils;
import org.apache.jetspeed.CommonPortletServices;
import org.apache.jetspeed.Jetspeed;
import org.apache.jetspeed.PortalReservedParameters;
@@ -143,7 +144,7 @@
}
catch (Exception e)
{
- //File not found;
+ // File not found;
}
return is;
}
@@ -152,13 +153,23 @@
{
// NOTE: this is Jetspeed specific
HttpServletRequest req = getHttpServletRequest(request);
- String fileName = (String) req.getSession().getAttribute("file");
+ String fileName;
String appName;
+ if (req.getSession().getAttribute("file") != null)
+ {
+ fileName = (String) req.getSession().getAttribute("file");
+ }
+ else
+ {
+ fileName = req.getParameter("file");
+ }
+ RequestContext jsReqContext = (RequestContext)request.getAttribute( PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE );
if (fileName != null && !fileName.equals(""))
{
InputStream is = null;
try
- {
+ {
+ setContentType(fileName, response,jsReqContext);
fileName = getFilePath(fileName);
is = new FileInputStream(fileName);
if (is == null)
@@ -166,8 +177,7 @@
byte[] bytes = ("File " + fileName + " not found.").getBytes();
response.getPortletOutputStream().write(bytes);
return;
- }
- setContentType(fileName, response);
+ }
drain(is, response.getPortletOutputStream());
response.getPortletOutputStream().flush();
is.close();
@@ -216,7 +226,7 @@
}
else
{
- setContentType(path, response);
+ setContentType(path, response,jsReqContext);
appName = getApplicationName(request);
List paths = fallback(path, request.getLocale().getLanguage(), appName);
renderFile(response, paths, appName);
@@ -260,7 +270,7 @@
return paths;
}
- protected void setContentType(String path, RenderResponse response)
+ protected void setContentType(String path, RenderResponse response,RequestContext jsReqContext)
{
// Note these content types need to be added to the portlet.xml
if (path.endsWith(".html"))
@@ -279,10 +289,16 @@
{
response.setContentType("text/csv");
}
- else if (path.endsWith(".xml") || path.endsWith(".xsl"))
+ else if (path.endsWith(".xml"))
{
response.setContentType("text/xml");
}
+ else if (path.endsWith(".xls"))
+ {
+ response.setContentType("application/vnd.ms-excel");
+ jsReqContext.getResponse().setHeader( "Content-Type", "application/vnd.ms-excel" );
+ jsReqContext.getResponse().setHeader( "Content-Disposition", "inline; filename=thedata.xls" );
+ }
else if (path.endsWith(".psml") || path.endsWith(".link"))
{
response.setContentType("text/xml");