/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution *
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
* For the text or an alternative of this public license, you may reach us *
* ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA *
* or via info@compiere.org or http://www.compiere.org/license.html *
*****************************************************************************/
/**
* 2007, Modified by Posterita Ltd.
*/
package org.adempiere.webui.apps.form;
import org.adempiere.webui.component.Button;
import org.adempiere.webui.component.Grid;
import org.adempiere.webui.component.Label;
import org.adempiere.webui.component.Row;
import org.adempiere.webui.component.Rows;
import org.adempiere.webui.component.Textbox;
import org.adempiere.webui.panel.ADForm;
import org.compiere.apps.form.VSQLProcess;
import org.compiere.util.CLogger;
import org.compiere.util.Env;
import org.compiere.util.Msg;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
/**
* A Custom Form to specify and process SQL statements.
*
* The range of statement types that can be performed can be restricted
* by allowing or disallowing DML statements.
*
* @author Andrew Kimball
*
*/
public class WSQLProcess extends ADForm implements EventListener
{
/**
*
*/
private static final long serialVersionUID = -2038792517003449189L;
/** Log. */
private static CLogger log = CLogger.getCLogger(VSQLProcess.class);
/** Grid used to layout components. */
private Grid m_grdMain = new Grid();
/** SQL label. */
private Label m_lblSql = new Label("SQL");
/** SQL statement field. */
private Textbox m_txbSqlField = new Textbox();
/** Process button. */
private Button m_btnSql = createProcessButton();
/** Field to hold result of SQL statement execution. */
private Textbox m_txbResultField = new Textbox();
/**
* Default constructor.
*/
public WSQLProcess()
{
super();
}
@Override
protected void initForm()
{
Row rwTop = new Row();
Row rwBottom = new Row();
Rows rows = new Rows();
final int noColumns = 60;
final int maxStatementLength = 9000;
final int noStatementRows = 3;
final int noResultRows = 20;
m_grdMain.setWidth("80%");
// create the top row of components
m_txbSqlField.setMultiline(true);
m_txbSqlField.setMaxlength(maxStatementLength);
m_txbSqlField.setRows(noStatementRows);
m_txbSqlField.setCols(noColumns);
m_txbSqlField.setReadonly(false);
m_btnSql.addEventListener(Events.ON_CLICK, this);
rwTop.appendChild(m_lblSql);
rwTop.appendChild(m_txbSqlField);
rwTop.appendChild(m_btnSql);
rows.appendChild(rwTop);
// create the bottom row of components
m_txbResultField.setCols(noColumns);
m_txbResultField.setRows(noResultRows);
m_txbResultField.setReadonly(true);
rwBottom.appendChild(m_txbResultField);
rwBottom.setSpans("3");
rwBottom.setAlign("center");
rows.appendChild(rwBottom);
// put it all together
m_grdMain.appendChild(rows);
this.appendChild(m_grdMain);
return;
}
/**
* Create Process Button.
* @return button
*/
public static final Button createProcessButton()
{
Button btnProcess = new Button();
btnProcess.setImage("/images/Process24.png");
btnProcess.setName(Msg.getMsg(Env.getCtx(), "Process"));
return btnProcess;
} // createProcessButton
/**
* Process a semicolon delimitted list of SQL Statements.
*
* @param sqlStatements one or more statements separated by a semicolon (';')
* @param allowDML whether to allow DML statements
* @return a string summarising the results
*/
public static String processStatements (String sqlStatements, boolean allowDML)
{
return VSQLProcess.processStatements(sqlStatements, allowDML);
}
/**
* Process SQL Statements.
*
* @param sqlStatement a single SQL statement
* @param allowDML whether to allow DML statements
* @return a string summarising the results
*/
public static String processStatement (String sqlStatement, boolean allowDML)
{
return VSQLProcess.processStatement(sqlStatement, allowDML);
}
/*
* (non-Javadoc)
* @see org.adempiere.webui.panel.ADForm#onEvent(org.zkoss.zk.ui.event.Event)
*/
public void onEvent(Event event) throws Exception
{
m_txbResultField.setText(processStatements (m_txbSqlField.getText(), false));
}
}