You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by li...@apache.org on 2016/12/08 00:45:46 UTC
[19/38] incubator-trafodion git commit: convert trafci project into
maven project
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/de7e7d4e/core/conn/trafci/src/main/java/org/trafodion/ci/HTMLObject.java
----------------------------------------------------------------------
diff --git a/core/conn/trafci/src/main/java/org/trafodion/ci/HTMLObject.java b/core/conn/trafci/src/main/java/org/trafodion/ci/HTMLObject.java
new file mode 100644
index 0000000..79a53a0
--- /dev/null
+++ b/core/conn/trafci/src/main/java/org/trafodion/ci/HTMLObject.java
@@ -0,0 +1,628 @@
+// @@@ START COPYRIGHT @@@
+//
+// 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.
+//
+// @@@ END COPYRIGHT @@@
+/**
+ *Class to display the Errors/Warnings/ResultSets/Status Messages in HTML format
+ */
+
+package org.trafodion.ci;
+
+import java.io.*;
+
+public class HTMLObject
+{
+
+// private Parser parser = null;
+ private Query qryObj = null;
+ private Session sessObj = null;
+ private Writer writer = null;
+ private QueryUtils qryUtilObj = null;
+
+ String _beginHtmlTag = "<HTML>";
+ String _endHtmlTag = "</HTML>";
+ String _beginBodyTag = "<BODY>";
+ String _endBodyTag = "</BODY>";
+ public String _beginTableTag = "<TABLE>";
+ public String _beginWarningsTableTag = "<TABLE border='2'>";
+ public String _endTableTag="</TABLE>";
+ String _beginRowTag="<tr>";
+ String _endRowTag="</tr>";
+ String _beginTblHeadTag="<th>";
+ String _beginTblDataTag="<td>";
+ String _beginTblDataColspanAttrTag="<td colspan=";
+ String _beginTblDataAlignTag="<td align=\"right\">";
+ String _endTblHeadTag="</th>";
+ String _endTblDataTag="</td>";
+ String _startCommentTag="<!-- ";
+ String _endCommentTag=" -->";
+ String _endAttributeTag=">";
+
+ String error_Id = "Error Id";
+ String error_Code = "Error Code";
+ String error_Msg = "Error Message";
+
+ String message_Code = "Message Code";
+ String message_Msg = "Message Information";
+
+ String warn_Id = "Warning Id";
+ String warn_Code = "Warning Code";
+ String warn_Msg = "Warning Message";
+ String statusMsg = "";
+
+ int rowCount = 0;
+ int colCount = 1;
+ int errorCount = 0;
+
+ boolean _startTags = false;
+ boolean _columnHeading = true;
+ boolean _initDone = false;
+ boolean perTableStats = false;
+
+ HTMLObject()
+ {
+ }
+
+ HTMLObject(Session sessObj)
+ {
+// parser = new Parser();
+ this.sessObj = sessObj;
+ qryUtilObj = new QueryUtils();
+ }
+
+ public void init()
+ {
+ this.writer=sessObj.getWriter();
+ this.qryObj=sessObj.getQuery();
+ }
+
+ public void processHtml(String output) throws IOException
+ {
+
+ if (!_initDone)
+ {
+ this.init();
+ this.handleStartTags();
+ _initDone = true;
+ }
+
+ if (qryObj.getRowCount() != null)
+ {
+ if ((rowCount==0 && Integer.parseInt(qryObj.getRowCount())==0) || ((rowCount-1) != Integer.parseInt(qryObj.getRowCount())))
+ {
+ this.handleStartTags();
+ }
+ if ( (qryObj.isTrimOut() && !qryUtilObj.isGetStatsCmd(qryObj)) || (perTableStats)) {
+ writer.writeln(_endCommentTag);
+ perTableStats = false;
+ }
+ if ((sessObj.isImplicitGetStatsQry()) && qryUtilObj.isGetStatsCmd(qryObj))
+ {
+ statusMsg = "";
+ sessObj.getDbQryObj().resetQryObj();
+ sessObj.setImplicitGetStatsQry(false);
+ }
+ else
+ {
+ statusMsg = sessObj.getLfProps().getStatus(qryObj);
+ }
+ if (!((output.equals("")) && statusMsg.equals("")))
+ writer.writeln(_startCommentTag + statusMsg + output+ _endCommentTag);
+
+ if (qryObj.getRsCount() > 0 && sessObj.isSPJRS())
+ {
+ writer.write(_endTableTag+SessionDefaults.lineSeperator);
+ _columnHeading = true;
+ rowCount = 0;
+ }
+ if (!sessObj.isSPJRS())
+ this.handleEndTags();
+ return;
+ }
+ if (sessObj.isInOutandRS() && qryObj.getRsCount() >= 0)
+ {
+ rowCount = 0;
+ colCount = 1;
+ _columnHeading = true;
+ qryObj.resetQueryText("SELECT *");
+ sessObj.setInOutandRS(false);
+ }
+
+ if (qryObj.isTrimOut())
+ {
+ if (qryUtilObj.isGetStatsCmd(qryObj) && !perTableStats)
+ {
+ if (!(output.trim().equals("")))
+ printGetStatsOutput(output.trim());
+ }
+ else
+ {
+ writer.write(output.trim());
+ }
+ }
+ else
+ {
+ if ((_columnHeading))
+ { // Only for Column headers
+ if (colCount == 1)
+ {
+ if (sessObj.isSPJRS())
+ writer.write(_beginTableTag+SessionDefaults.lineSeperator);
+ writer.write(_beginRowTag+SessionDefaults.lineSeperator);
+ }
+ writer.write(" "+_beginTblHeadTag+output.trim()+_endTblHeadTag);
+ }
+ else
+ {
+ if ((colCount == 1)) //Only for Column Data and not headers
+ writer.write(_beginRowTag+SessionDefaults.lineSeperator);
+ writer.write(" "+ _beginTblDataTag+output.trim()+_endTblDataTag);
+ }
+
+ if (qryObj.getColCount() != null)
+ {
+ colCount++;
+ if (colCount > Integer.parseInt(qryObj.getColCount()))
+ {
+ writer.write(SessionDefaults.lineSeperator+_endRowTag);
+ _columnHeading = false;
+ rowCount++;
+ colCount=1;
+ }
+ }
+ }
+ }
+ public void handleStartTags() throws IOException
+ {
+
+ if (!_startTags)
+ {
+ writer.write(_beginTableTag+SessionDefaults.lineSeperator);
+ _startTags = true;
+
+ if (sessObj.isSPJRS() && qryObj.getRowCount() == "0")
+ qryObj.resetQueryText(sessObj.getDbQryObj().qryText);
+
+ writer.writeln(_startCommentTag + sessObj.getQuery().getQueryText() + _endCommentTag);
+
+ if (sessObj.isSPJRS() && qryObj.getRsCount() > 0)
+ {
+ writer.write(_beginTableTag+SessionDefaults.lineSeperator);
+ qryObj.resetQueryText("SELECT *");
+ }
+
+ if (qryObj.isTrimOut() && !qryUtilObj.isGetStatsCmd(qryObj))
+ writer.writeln(_startCommentTag);
+ }
+ }
+
+ public void handleEndTags() throws IOException
+ {
+
+ if (!(sessObj.isImplicitGetStatsQry())) {
+ writer.write(_endTableTag+SessionDefaults.lineSeperator);
+ _startTags = false;
+ rowCount = 0;
+ _columnHeading = true;
+ errorCount = 0;
+ _initDone = false;
+ }
+ }
+
+
+
+ public void handleErrors(ErrorObject errorObj) throws IOException
+ {
+ if (!_initDone)
+ {
+ this.init();
+ _initDone = true;
+ }
+
+ if (errorObj.errorCode() == Parser.UNKNOWN_ERROR_CODE)
+ {
+ writeServerMessage(errorObj);
+ }
+ else if(errorObj.errorType == 'I')
+ writeInformational(errorObj);
+ else if(errorObj.errorType == 'W')
+ {
+ handleWarnings(errorObj);
+ }
+ else
+ writeErrors(errorObj);
+ }
+
+ public void writeServerMessage(ErrorObject errorObj) throws IOException
+ {
+ if (!_startTags)
+ {
+ this.handleStartTags();
+ writer.write(_beginRowTag+SessionDefaults.lineSeperator);
+ writer.write(" "+_beginTblHeadTag + this.message_Msg +_endTblHeadTag+ SessionDefaults.lineSeperator);
+ writer.write(_endRowTag+SessionDefaults.lineSeperator);
+ }
+
+ if (errorObj != null)
+ {
+ writer.write(_beginRowTag+SessionDefaults.lineSeperator);
+ //Escape "<" and ">" in the error message
+ writer.write(" "+ _beginTblDataTag + errorObj.errorMessage().replaceAll("<", "<").replaceAll(">", ">") + _endTblDataTag + SessionDefaults.lineSeperator);
+ writer.write(_endRowTag+SessionDefaults.lineSeperator);
+ }
+ }
+
+ public void writeInformational(ErrorObject errorObj) throws IOException
+ {
+
+ if (!_startTags)
+ {
+ this.handleStartTags();
+ writer.write(_beginRowTag+SessionDefaults.lineSeperator);
+ // writer.write(" "+_beginTblHeadTag + this.message_Code +_endTblHeadTag + SessionDefaults.lineSeperator);
+ writer.write(" "+_beginTblHeadTag + this.message_Msg +_endTblHeadTag+ SessionDefaults.lineSeperator);
+ writer.write(_endRowTag+SessionDefaults.lineSeperator);
+ }
+
+ if (errorObj != null)
+ {
+ writer.write(_beginRowTag+SessionDefaults.lineSeperator);
+ // For all informational message we are not displaying the errorCode
+ // writer.write(" "+ _beginTblDataTag + errorObj.errorCode() + _endTblDataTag + SessionDefaults.lineSeperator);
+
+ //Escape "<" and ">" in the error message
+ writer.write(" "+ _beginTblDataTag + errorObj.errorMessage().replaceAll("<", "<").replaceAll(">", ">") + _endTblDataTag + SessionDefaults.lineSeperator);
+ writer.write(_endRowTag+SessionDefaults.lineSeperator);
+ }
+ }
+
+
+ public void writeErrors(ErrorObject errorObj) throws IOException
+ {
+ if (!_startTags)
+ {
+ this.handleStartTags();
+ writer.write(_beginRowTag+SessionDefaults.lineSeperator);
+ writer.write(" "+_beginTblHeadTag + this.error_Id +_endTblHeadTag + SessionDefaults.lineSeperator);
+ writer.write(" "+_beginTblHeadTag + this.error_Code +_endTblHeadTag + SessionDefaults.lineSeperator);
+ writer.write(" "+_beginTblHeadTag + this.error_Msg +_endTblHeadTag+ SessionDefaults.lineSeperator);
+ writer.write(_endRowTag+SessionDefaults.lineSeperator);
+ }
+
+ if (errorObj != null)
+ {
+ writer.write(_beginRowTag+SessionDefaults.lineSeperator);
+ writer.write(" "+ _beginTblDataTag + ++errorCount + _endTblDataTag + SessionDefaults.lineSeperator);
+ writer.write(" "+ _beginTblDataTag + errorObj.errorCode() + _endTblDataTag + SessionDefaults.lineSeperator);
+
+ //Escape "<" and ">" in the error message
+ writer.write(" "+ _beginTblDataTag + errorObj.errorMessage().replaceAll("<", "<").replaceAll(">", ">") + _endTblDataTag + SessionDefaults.lineSeperator);
+ writer.write(_endRowTag+SessionDefaults.lineSeperator);
+ }
+ }
+
+
+ /**
+ * Method to print the start of the warning list table for all warnings
+ * encountered during a fetch operation.
+ */
+ public void startFetchWarningListTable(int numCols) throws IOException {
+
+ /* Check if we need to do the initialization. */
+ if (!_initDone) {
+ this.init();
+ _initDone = true;
+ }
+
+
+ /* Check if we need to setup and create a table. */
+ if (!_startTags)
+ this.handleStartTags();
+
+
+ /* Get the current line seperator (CRLF). */
+ String crlf = SessionDefaults.lineSeperator;
+
+
+ /*
+ * Start a new row with a single cell spanning the entire table.
+ * <tr><td colspan='n'> ...
+ */
+ writer.write(_beginRowTag + crlf);
+ writer.write(_beginTblDataColspanAttrTag + "'" + numCols + "'" +
+ _endAttributeTag + crlf);
+
+
+ /*
+ * And now start an inner table with all the warnings information.
+ * <TABLE border="2">
+ * <tr>
+ * <th>Warning Id</th>
+ * <th>Warning Code</th>
+ * <th>Warning Message</th>
+ * </tr>
+ */
+ writer.write(" " + _beginWarningsTableTag + crlf);
+ writer.write(" " + _beginRowTag + crlf);
+ writer.write(" " + _beginTblHeadTag + this.warn_Id +
+ _endTblHeadTag + crlf);
+ writer.write(" " + _beginTblHeadTag + this.warn_Code +
+ _endTblHeadTag + crlf);
+ writer.write(" " + _beginTblHeadTag + this.warn_Msg +
+ _endTblHeadTag + crlf);
+ writer.write(" " + _endRowTag + crlf);
+
+
+ } /* End of startFetchWarningListTable method. */
+
+
+
+ /**
+ * Method to end printing the warning list table for all warnings
+ * encountered during a fetch operation.
+ */
+ public void endFetchWarningListTable() throws IOException {
+
+ /* Get the current line seperator (CRLF). */
+ String crlf = SessionDefaults.lineSeperator;
+
+ /*
+ * First end the inner table with all the warnings information.
+ * <TABLE border="2">
+ * <tr>
+ * <th>Warning Id</th>
+ * <th>Warning Code</th>
+ * <th>Warning Message</th>
+ * </tr>
+ * ...
+ * </table>
+ */
+ writer.write(" " + _endTableTag + crlf);
+
+
+ /*
+ * End the cell and row for the warning list table.
+ * </td>
+ * </tr>
+ */
+ writer.write(_endTblDataTag + crlf);
+ writer.write(_endRowTag + crlf);
+
+ } /* End of endFetchWarningListTable method. */
+
+
+
+ /**
+ * Method to print warnings encountered during a fetch operation. These
+ * warnings need to printed in a separate table within its own scope.
+ * Oh, this whole xml/html markup piece is so very messy!! :^(
+ */
+ public void handleFetchWarnings(ErrorObject errorObj)
+ throws IOException {
+
+ /* Check if we need to do the initialization. */
+ if (!_initDone) {
+ this.init();
+ _initDone = true;
+ }
+
+
+ /* Check if we need to setup and create a table. */
+ if (!_startTags)
+ this.handleStartTags();
+
+
+ if (null != errorObj) {
+ /* Get the current line seperator (CRLF). */
+ String crlf = SessionDefaults.lineSeperator;
+
+ /* Print the warning information. */
+ writer.write(_beginRowTag + crlf);
+ ++errorCount;
+ writer.write(" " + _beginTblDataTag + errorCount +
+ _endTblDataTag + crlf);
+ writer.write(" " + _beginTblDataTag + errorObj.errorCode() +
+ _endTblDataTag + crlf);
+
+ String msgtxt = errorObj.errorMessage().replaceAll("<", "<").replaceAll(">", ">");
+ writer.write(" " + _beginTblDataTag + msgtxt + _endTblDataTag + crlf);
+ writer.write(_endRowTag + crlf);
+ }
+
+ } /* End of handleFetchWarnings method. */
+
+ public void handleWarnings(ErrorObject errorObj) throws IOException
+ {
+
+ if (!_initDone)
+ {
+ this.init();
+ _initDone = true;
+ }
+ if (!_startTags)
+ {
+ this.handleStartTags();
+ writer.write(_beginRowTag+SessionDefaults.lineSeperator);
+ writer.write(" "+_beginTblHeadTag + this.warn_Id +_endTblHeadTag + SessionDefaults.lineSeperator);
+ writer.write(" "+_beginTblHeadTag + this.warn_Code +_endTblHeadTag + SessionDefaults.lineSeperator);
+ writer.write(" "+_beginTblHeadTag + this.warn_Msg +_endTblHeadTag+ SessionDefaults.lineSeperator);
+
+ writer.write(_endRowTag + SessionDefaults.lineSeperator);
+ }
+
+ if (errorObj != null)
+ {
+ writer.write(_beginRowTag+SessionDefaults.lineSeperator);
+ writer.write(" "+ _beginTblDataTag + ++errorCount + _endTblDataTag + SessionDefaults.lineSeperator);
+ writer.write(" "+ _beginTblDataTag + errorObj.errorCode() + _endTblDataTag + SessionDefaults.lineSeperator);
+
+ String msgtxt = errorObj.errorMessage().replaceAll("<", "<").replaceAll(">", ">");
+ writer.write(" "+ _beginTblDataTag + msgtxt + _endTblDataTag + SessionDefaults.lineSeperator);
+ writer.write(_endRowTag + SessionDefaults.lineSeperator);
+
+ }
+ }
+
+ public void handlePrunSummary(ConsoleWriter cWriter, PrunSummary summaryObj, String elapsedTime) throws IOException
+ {
+ this.init();
+ this.handleStartTags();
+ cWriter.println(_startCommentTag);
+ cWriter.println(SessionDefaults.lineSeperator+"PARALLELRUN(PRUN) SUMMARY");
+ cWriter.println(_endCommentTag);
+ cWriter.println(_beginRowTag);
+ cWriter.println(" "+_beginTblHeadTag + "Total Files Present"+_endTblHeadTag);
+ cWriter.println(" "+ _beginTblDataTag + summaryObj.getTotalScriptFiles() + _endTblDataTag);
+ cWriter.println(_endRowTag);
+ cWriter.println(_beginRowTag);
+ cWriter.println(" "+_beginTblHeadTag + "Total Files Processed"+_endTblHeadTag);
+ cWriter.println(" "+ _beginTblDataTag + summaryObj.getTotalScriptFilesProcessed() + _endTblDataTag);
+ cWriter.println(_endRowTag);
+ cWriter.println(_beginRowTag);
+ cWriter.println(" "+_beginTblHeadTag + "Total Queries Processed"+_endTblHeadTag);
+ cWriter.println(" "+ _beginTblDataTag + summaryObj.getTotalSQLsProcessed() + _endTblDataTag);
+ cWriter.println(_endRowTag);
+ cWriter.println(_beginRowTag);
+ cWriter.println(" "+_beginTblHeadTag + "Total Errors"+_endTblHeadTag);
+ cWriter.println(" "+ _beginTblDataTag + summaryObj.getTotalSQLErrors() + _endTblDataTag);
+ cWriter.println(_endRowTag);
+ cWriter.println(_beginRowTag);
+ cWriter.println(" "+_beginTblHeadTag + "Total Warnings"+_endTblHeadTag);
+ cWriter.println(" "+ _beginTblDataTag + summaryObj.getTotalSQLWarnings() + _endTblDataTag);
+ cWriter.println(_endRowTag);
+ cWriter.println(_beginRowTag);
+ cWriter.println(" "+_beginTblHeadTag + "Total Successes"+_endTblHeadTag);
+ cWriter.println(" "+ _beginTblDataTag + summaryObj.getTotalSQLSuccess() + _endTblDataTag);
+ cWriter.println(_endRowTag);
+ cWriter.println(_beginRowTag);
+ cWriter.println(" "+_beginTblHeadTag + "Total Connections"+_endTblHeadTag);
+ cWriter.println(" "+ _beginTblDataTag + summaryObj.getTotalConnections() + _endTblDataTag);
+ cWriter.println(_endRowTag);
+ cWriter.println(_beginRowTag);
+ cWriter.println(" "+_beginTblHeadTag + "Total Connection Failures"+_endTblHeadTag);
+ cWriter.println(" "+ _beginTblDataTag + summaryObj.getTotalConnectionFailures() + _endTblDataTag);
+ cWriter.println(_endRowTag);
+ if (sessObj.isSessionTimingOn())
+ cWriter.println(_startCommentTag + elapsedTime + _endCommentTag);
+ }
+
+ public void handlePrunSummary(FileWriter fWriter, PrunSummary summaryObj, String summaryEnd, String elapsedTime) throws IOException
+ {
+
+ fWriter.writeln(_startCommentTag + "PARALLELRUN(PRUN) SUMMARY" + _endCommentTag);
+ fWriter.writeln(_beginRowTag);
+ fWriter.writeln(" "+_beginTblHeadTag + "Total Files Present"+_endTblHeadTag);
+ fWriter.writeln(" "+ _beginTblDataTag + summaryObj.getTotalScriptFiles() + _endTblDataTag);
+ fWriter.writeln(_endRowTag);
+ fWriter.writeln(_beginRowTag);
+ fWriter.writeln(" "+_beginTblHeadTag + "Total Files Processed"+_endTblHeadTag);
+ fWriter.writeln(" "+ _beginTblDataTag + summaryObj.getTotalScriptFilesProcessed() + _endTblDataTag);
+ fWriter.writeln(_endRowTag);
+ fWriter.writeln(_beginRowTag);
+ fWriter.writeln(" "+_beginTblHeadTag + "Total Queries Processed"+_endTblHeadTag);
+ fWriter.writeln(" "+ _beginTblDataTag + summaryObj.getTotalSQLsProcessed() + _endTblDataTag);
+ fWriter.writeln(_endRowTag);
+ fWriter.writeln(_beginRowTag);
+ fWriter.writeln(" "+_beginTblHeadTag + "Total Errors"+_endTblHeadTag);
+ fWriter.writeln(" "+ _beginTblDataTag + summaryObj.getTotalSQLErrors() + _endTblDataTag);
+ fWriter.writeln(_endRowTag);
+ fWriter.writeln(_beginRowTag);
+ fWriter.writeln(" "+_beginTblHeadTag + "Total Warnings"+_endTblHeadTag);
+ fWriter.writeln(" "+ _beginTblDataTag + summaryObj.getTotalSQLWarnings() + _endTblDataTag);
+ fWriter.writeln(_endRowTag);
+ fWriter.writeln(_beginRowTag);
+ fWriter.writeln(" "+_beginTblHeadTag + "Total Successes"+_endTblHeadTag);
+ fWriter.writeln(" "+ _beginTblDataTag + summaryObj.getTotalSQLSuccess() + _endTblDataTag);
+ fWriter.writeln(_endRowTag);
+ fWriter.writeln(_beginRowTag);
+ fWriter.writeln(" "+_beginTblHeadTag + "Total Connections"+_endTblHeadTag);
+ fWriter.writeln(" "+ _beginTblDataTag + summaryObj.getTotalConnections() + _endTblDataTag);
+ fWriter.writeln(_endRowTag);
+ fWriter.writeln(_beginRowTag);
+ fWriter.writeln(" "+_beginTblHeadTag + "Total Connection Failures"+_endTblHeadTag);
+ fWriter.writeln(" "+ _beginTblDataTag + summaryObj.getTotalConnectionFailures() + _endTblDataTag);
+ fWriter.writeln(_endRowTag);
+ fWriter.writeln(_startCommentTag + summaryEnd + _endCommentTag);
+ if (sessObj.isSessionTimingOn())
+ fWriter.writeln(_startCommentTag + elapsedTime + _endCommentTag);
+ fWriter.writeln(_endTableTag);
+ this._initDone = false;
+ }
+
+ public void handleQryExecutionTime(String qryExecTime) throws IOException
+ {
+
+ if (!_initDone)
+ {
+ this.init();
+ this.handleStartTags();
+ _initDone = true;
+ }
+ writer.write(_startCommentTag + qryExecTime + _endCommentTag +SessionDefaults.lineSeperator);
+ }
+
+ public void printGetStatsOutput(String line) throws IOException
+ {
+ int i=0;
+ String columnNameTag = "";
+ String columnData = null;
+
+ if (line.trim().equals(""))
+ return;
+
+ if (line.startsWith("Table Name") || line.startsWith("Id"))
+ {
+ writer.writeln(" " + _startCommentTag);
+ writer.writeln(" " + line);
+ perTableStats = true;
+ return;
+ }
+ String outputArr[] = line.split(" ");
+ for (i=0;i<outputArr.length; i++)
+ {
+ if (sessObj.isDebugOn())
+ System.out.println("****outputArr["+i+"]::" + outputArr[i]);
+ if (!outputArr[i].matches("^(\\-[0-9]|[0-9]|\\\\|NONE|CLOSE|SQL_|MX|PERTABLE|ACCUMULATED|PROGRESS|DEFAULT|OPERATOR|DEALLOCATED|select).*"))
+ columnNameTag += outputArr[i];
+ else
+ break;
+ }
+ if (sessObj.isDebugOn()) {
+ System.out.println("***i:"+i);
+ System.out.println("***outputArr.length:"+outputArr.length);
+ }
+ for (int j=Math.max(0,(i-1));j<outputArr.length; j++)
+ {
+ if (!outputArr[j].trim().equals(""))
+ {
+ if (columnData == null)
+ columnData = outputArr[j].trim();
+ else
+ columnData+=" " + outputArr[j].trim();
+ }
+ }
+ writer.writeln(_beginRowTag);
+ writer.writeln(" "+ _beginTblHeadTag + columnNameTag + _endTblHeadTag);
+ writer.writeln(" "+ _beginTblDataTag + columnData + _endTblDataTag);
+ writer.write(_endRowTag);
+
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/de7e7d4e/core/conn/trafci/src/main/java/org/trafodion/ci/HelpIndexer.java
----------------------------------------------------------------------
diff --git a/core/conn/trafci/src/main/java/org/trafodion/ci/HelpIndexer.java b/core/conn/trafci/src/main/java/org/trafodion/ci/HelpIndexer.java
new file mode 100644
index 0000000..2b0123f
--- /dev/null
+++ b/core/conn/trafci/src/main/java/org/trafodion/ci/HelpIndexer.java
@@ -0,0 +1,134 @@
+// @@@ START COPYRIGHT @@@
+//
+// 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.
+//
+// @@@ END COPYRIGHT @@@
+
+package org.trafodion.ci;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+
+
+// Creates index file for help utility
+// help index file will contain the format of
+// <helpKeyWord>=<helpFileName>:<byteLocation>
+// helpKeyWord - the keyword for example, for obey command the key is obey
+// helpFileName - Actual help file name where the help text for the given command is available
+// byteLocation - the actual byte location where the help for the given command starts
+// this program is called during the build time
+
+public class HelpIndexer
+{
+
+ final static String helpIdxKeyIdentifier=" @@@@@";
+ final static String HELPER_IDX_FILE="_help.idx";
+
+ /*The following modes and roles used tp create the list of
+ /*potential '.help' file names.*/
+ final static String[] modes={"SQL","NS","NS-WMS","COMMON"};
+ final static String[] roles={"super","services", "mgr", "dba", "user","common"};
+
+ HelpIndexer()
+ {
+
+ }
+
+ public static void main(String[] args)
+ {
+ try
+ {
+ //for each mode create an index file
+ for (int i=0;i<modes.length;i++)
+ {
+ for (int j=0;j<roles.length;j++)
+ {
+ createIndexFile(modes[i],roles[j],args[0]);
+ }
+ }
+ } catch (IOException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ private static void createIndexFile(String mode,String role,String helpFilesDir) throws IOException
+ {
+ mode=mode.toLowerCase()+"_";
+ role=role.toLowerCase();
+
+ File helpfiles= new File(helpFilesDir);
+ String[] hfiles=helpfiles.list();
+
+ RandomAccessFile fr=null;
+ for (int i=0;i < hfiles.length ; i++)
+ {
+ String filename=hfiles[i];
+
+ //process files with the extension .help
+ // files with common_ prefix defines the commands which are applicable to all modes
+ // so each individual mode help files should have a reference to the mode specified commands and common commands
+ if (!filename.endsWith(".help") || !filename.startsWith(mode))
+ {
+ continue;
+ }
+ if(!filename.startsWith(role, filename.indexOf("_")+1))
+ {
+ continue;
+ }
+ //Rename role to match file name. This allows for multiple help files for each mode/role.
+ role=filename.substring(filename.indexOf("_")+1,filename.indexOf("."));
+ //Create and initialize Index File
+ FileWriter fw=new FileWriter();
+ fw.initialize(helpFilesDir+File.separator+mode+role+HELPER_IDX_FILE);
+
+ fr=new RandomAccessFile(helpFilesDir+File.separator+filename,"r");
+ String currentLine=null;
+ while ((currentLine=fr.readLine()) != null)
+ {
+ if (currentLine.startsWith(helpIdxKeyIdentifier))
+ {
+ currentLine=currentLine.substring(helpIdxKeyIdentifier.length()).trim();
+ //currentLine=currentLine.replaceAll(" ","\\\\ ");
+ String[] commandsList=currentLine.split("&");
+ for (int cnt=0; cnt < commandsList.length;cnt++)
+ {
+ commandsList[cnt]=commandsList[cnt].trim().toLowerCase().replaceAll(" ","\\\\ ");
+ fw.writeln(commandsList[cnt].trim().toLowerCase()+"="+filename+":"+fr.getFilePointer());
+ }
+ }
+ if (currentLine.replaceAll("\\s*$","").length() > 80)
+ {
+ System.out.println("ERROR: help text line exceeded 80 chars. FileName: "+filename+"\tText line: "+currentLine);
+ }
+ }
+
+ fr.close();
+ fr=null;
+
+ if (fw != null)
+ {
+ fw.close();
+ fw=null;
+ }
+ }
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/de7e7d4e/core/conn/trafci/src/main/java/org/trafodion/ci/Helper.java
----------------------------------------------------------------------
diff --git a/core/conn/trafci/src/main/java/org/trafodion/ci/Helper.java b/core/conn/trafci/src/main/java/org/trafodion/ci/Helper.java
new file mode 100644
index 0000000..e479f3c
--- /dev/null
+++ b/core/conn/trafci/src/main/java/org/trafodion/ci/Helper.java
@@ -0,0 +1,225 @@
+// @@@ START COPYRIGHT @@@
+//
+// 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.
+//
+// @@@ END COPYRIGHT @@@
+
+package org.trafodion.ci;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.ListIterator;
+
+// Helper class to display help text for dbScripts commands
+// This class reads the index file for filename and byte position
+// of the given command in the help files and then reads only portion
+// of the text from the help file that needs to be displayed to the user
+
+public class Helper {
+ final String HELP_FILES_BASE_DIR=SessionDefaults.PKG_NAME + "help/";
+ final String HELP_FILE_IDX = "help_file.idx";
+ final String NO_HELP_TEXT="Help not available in ";
+ final String NO_HELP_FOR_CMD="No help available for this command.";
+ final String HELP_KEYWORD_INDICATOR=" @@@@@";
+ final String HELP_COMMENT_INDICATOR="#";
+ final String FILENAME_SEPERATOR = ",";
+ final String COMMON_KEYWORD_INDICATOR="common";
+ final Pattern hfiPattern = Pattern.compile("\\s*(\\w*)\\s*:\\s*(\\w*)\\s*=(.*)");
+
+ String helpFileName=null;
+ long helpLocInBytes=0;
+
+ List<String> helpFileList = new ArrayList<String>();
+ Properties helpIdxProps=null;
+ Helper()
+ {
+ }
+
+ public void printHelpText(Writer writer,String mode,String role, String command,String section) throws IOException
+ {
+ boolean isSectionRead=false;
+ if (section != null)
+ {
+ isSectionRead=true;
+ }
+
+ // Load the help index file as property if the help index property is empty
+ //if (helpFileList.size() != 0)
+ //{
+ try
+ {
+ loadFileIdx(mode, role);
+ }catch (FileNotFoundException fnfe)
+ {
+ writer.writeln();
+ writer.writeln(NO_HELP_TEXT+mode.toUpperCase()+" mode.");
+ return;
+ }
+ //}
+ //If no help files associated with this mode/role
+ if (helpFileList.size()==0)
+ {
+ writer.writeln();
+ writer.writeln(NO_HELP_TEXT+mode.toUpperCase()+" mode.");
+ return;
+ }
+
+ // help keys in index file are stored in lower case
+ // so convert the command to lower case before checking
+ // the property file.
+ command=command.toLowerCase().trim();
+
+ if (command.equals(""))
+ {
+ command="help";
+ }
+
+ String helpKeyValue=null;
+
+ command=command.replaceAll("\\s+"," ");
+ ListIterator<String> listItr = helpFileList.listIterator();
+ boolean matchFound = false;
+ //Look in each index file for the requested command. First in, first searched.
+ while(listItr.hasNext())
+ {
+ Properties commProp = loadPropertyIdx((String)listItr.next());
+ helpKeyValue = (null != commProp) ? commProp.getProperty(command): null;
+
+ if (helpKeyValue != null) { // index file is stored in the format of
+ // <helpKey>=<filename>:<location>
+ matchFound = true;
+ helpFileName=helpKeyValue.substring(0,helpKeyValue.indexOf(":"));
+ helpLocInBytes=Long.parseLong(helpKeyValue.substring((helpKeyValue.indexOf(":")+1)));
+
+ InputStream is=this.getClass().getResourceAsStream(HELP_FILES_BASE_DIR+helpFileName);
+ if(null == is)
+ {
+ writer.writeln();
+ writer.writeln(NO_HELP_TEXT+mode.toUpperCase()+" mode.");
+ return;
+ }
+
+ InputStreamReader isr=new InputStreamReader(is);
+ BufferedReader br= new BufferedReader(isr);
+ String currentLine=null;
+ br.skip(helpLocInBytes);
+
+ // Read all text available till the end of file
+ // or till the next command in the help file
+
+ while ((currentLine=br.readLine()) != null)
+ {
+ if (currentLine.startsWith(HELP_KEYWORD_INDICATOR))
+ {
+ break;
+ }
+ if (isSectionRead)
+ {
+ if (!currentLine.toUpperCase().startsWith(section.toUpperCase()))
+ {
+ continue;
+ }
+ isSectionRead=false;
+ }
+ writer.writeln(currentLine.replaceAll("\\s*$",""));
+ }
+ is=null;
+ isr=null;
+ br=null;
+ }
+ }
+ if (helpKeyValue == null && !matchFound) {
+ //If no entry exists for this command
+ writer.writeln();
+ writer.writeln(NO_HELP_FOR_CMD);
+ }
+ }
+
+ private void loadFileIdx(String mode, String role) throws FileNotFoundException,IOException
+ {
+ String helpFileIndexContents = null;
+ Matcher mat = null;
+ InputStream hfIS=this.getClass().getResourceAsStream(HELP_FILES_BASE_DIR+HELP_FILE_IDX);
+ //Check for valid stream
+ if(null==hfIS)
+ throw new FileNotFoundException();
+
+ //Load the help-file index.
+ BufferedReader input = new BufferedReader(new InputStreamReader(hfIS));
+
+ //For each line in the index file check if the rule matches the current mode and role
+ while ((helpFileIndexContents = input.readLine()) != null) {
+
+ //Skip index file comments
+ if(helpFileIndexContents.startsWith(HELP_COMMENT_INDICATOR))
+ {continue;}
+
+ mat = hfiPattern.matcher(helpFileIndexContents);
+ //if the mode and role match the rule
+ if (mat.find() &&
+ (mat.group(1).equalsIgnoreCase(mode) ||
+ mat.group(1).equalsIgnoreCase(COMMON_KEYWORD_INDICATOR)) &&
+ (mat.group(2).equalsIgnoreCase(role) ||
+ mat.group(2).equalsIgnoreCase(COMMON_KEYWORD_INDICATOR)))
+ {
+ //add file-names to the help-file list.
+ String[] fileNames = mat.group(3).split(FILENAME_SEPERATOR);
+ for(int i = 0; i < fileNames.length; i++ ) {
+ this.helpFileList.add(fileNames[i].trim());
+ }
+ }
+ }
+ input.close();
+ hfIS.close();
+
+ }
+
+ private Properties loadPropertyIdx(String fileName) throws FileNotFoundException, IOException
+ {
+ try{
+ InputStream is = null;
+ //Assume the base directory and stream the indicated file
+ is = this.getClass().getResourceAsStream(HELP_FILES_BASE_DIR+fileName);
+
+ Properties helpIdxProp = new Properties();
+
+ //If the file stream succeeded load the properties
+ if (is != null)
+ {
+ helpIdxProp.load(is);
+ } else
+ {
+ //otherwise, set properties to null.
+ helpIdxProp = null;
+ }
+ is=null;
+ return helpIdxProp;
+
+ } catch(Exception e) {
+ return null;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/de7e7d4e/core/conn/trafci/src/main/java/org/trafodion/ci/HostQuery.java
----------------------------------------------------------------------
diff --git a/core/conn/trafci/src/main/java/org/trafodion/ci/HostQuery.java b/core/conn/trafci/src/main/java/org/trafodion/ci/HostQuery.java
new file mode 100644
index 0000000..117818e
--- /dev/null
+++ b/core/conn/trafci/src/main/java/org/trafodion/ci/HostQuery.java
@@ -0,0 +1,289 @@
+// @@@ START COPYRIGHT @@@
+//
+// 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.
+//
+// @@@ END COPYRIGHT @@@
+package org.trafodion.ci;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+
+
+public class HostQuery extends Thread
+{
+
+
+ BufferedWriter bw=null;
+ boolean doneflag=false;
+ StringBuffer outputStr=null ;
+ StringBuffer errorStr=null;
+ boolean nextCommand=false;
+ boolean errorFlag=false;
+ boolean startInputThread=true;
+
+
+ HostQuery()
+ {
+ bw=null;
+ doneflag=false;
+ outputStr=new StringBuffer() ;
+ errorStr=new StringBuffer();
+ nextCommand=false;
+ errorFlag=false;
+ }
+
+ public void execute(String command,Reader reader, Writer writer)
+ {
+ Runtime rt=Runtime.getRuntime();
+ if (reader == null)
+ {
+ System.out.println("reader is null");
+ }
+ if (writer == null)
+ {
+ System.out.println("writer is null");
+ }
+ final String newLine=System.getProperty("line.separator");
+
+
+ try
+ {
+ final Process p=rt.exec(command);
+
+ InputStream is=null;
+ OutputStream os=null;
+ InputStream es=null;
+
+ is=p.getInputStream();
+ os=p.getOutputStream();
+ es=p.getErrorStream();
+
+ InputStreamReader isr=null;
+ InputStreamReader iser=null;
+ OutputStreamWriter osw=null;
+
+ isr=new InputStreamReader(is);
+ iser=new InputStreamReader(es);
+ osw=new OutputStreamWriter(os);
+
+ final BufferedReader br=new BufferedReader(isr);
+ final BufferedReader ber=new BufferedReader(iser);
+
+ bw=new BufferedWriter(osw);
+ //String tmpline=null;
+
+ // output thread
+ class OutputThread extends Thread
+ {
+ Writer writer;
+ OutputThread(Writer writer)
+ {
+ this.writer=writer;
+ }
+ public void run()
+ {
+ int i=0;
+ try
+ {
+ while ((i=br.read()) != -1)
+ {
+ if (errorFlag)
+ {
+ Thread.yield();
+ errorFlag=false;
+ try
+ {
+ sleep(100);
+ }
+ catch (InterruptedException ie)
+ {
+ }
+ }
+ if (nextCommand)
+ {
+ br.readLine();
+ nextCommand=false;
+ }else
+ {
+ //System.out.print((char)i);
+ writer.write(""+(char)i);
+ }
+ }
+ doneflag=true;
+
+ }catch (IOException ote)
+ {
+ System.out.println("output thread exception "+ote);
+ }
+
+ }
+ };
+
+ OutputThread outputt=new OutputThread(writer);
+ outputt.start();
+
+
+
+ // error thread
+ class ErrorThread extends Thread
+ {
+ Writer writer=null;
+ ErrorThread(Writer writer)
+ {
+ this.writer=writer;
+ }
+ public void run()
+ {
+ int i=0;
+ try
+ {
+ while ((i=ber.read()) != -1)
+ {
+ errorFlag=true;
+ //System.out.print((char)i);
+ writer.write(""+(char)i);
+ }
+ }catch (IOException ete)
+ {
+ System.out.println("error thread exception "+ete);
+ }
+ }
+ };
+
+ ErrorThread errort=new ErrorThread(writer);
+ errort.start();
+
+ // input thread
+ class InputThread extends Thread
+ {
+ Reader reader=null;
+ InputThread(Reader reader)
+ {
+ this.reader=reader;
+ }
+ public void run()
+ {
+ String input=null;
+
+ try
+ {
+
+ while (!doneflag)
+ {
+ if (doneflag) break;
+ try
+ {
+ sleep(100);
+ } catch (InterruptedException e)
+ {
+ break;
+ }
+ input=reader.getNonBlankLine();
+ if (input != null)
+ {
+
+ try
+ {
+ //if the subprocess exited already..dont write anything to the pipe.
+ p.exitValue();
+
+ break;
+ }catch (IllegalThreadStateException itse)
+ {
+ }
+
+ nextCommand=true;
+ bw.write(input+newLine);
+ bw.flush();
+
+
+ }
+
+ }
+ } catch (UserInterruption ui)
+ {
+
+ }catch (IOException ite)
+ {
+ System.out.println("input thread exception "+ite);
+ }
+ }
+
+ };
+
+ InputThread inpt=new InputThread(reader);
+
+ if (this.startInputThread)
+ {
+ inpt.start();
+ }
+
+ try
+ {
+ p.waitFor();
+ errort.join();
+ outputt.join();
+
+ if (this.startInputThread)
+ {
+ inpt.interrupt();
+ inpt.join();
+ }
+
+
+ } catch (InterruptedException e)
+ {
+ // TODO Auto-generated catch block
+ //.printStackTrace();
+ }
+
+
+
+ isr=null;
+ iser=null;
+ osw=null;
+ bw=null;
+ inpt=null;
+ outputt=null;
+ errort=null;
+ outputStr=null;
+ errorStr=null;
+
+ }
+ catch (IOException ioe)
+ {
+ try
+ {
+ writer.write("Could not create the sub process"+ioe);
+ } catch (IOException e)
+ {
+ // TODO Auto-generated catch block
+ //e.printStackTrace();
+ }
+ }
+
+
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/de7e7d4e/core/conn/trafci/src/main/java/org/trafodion/ci/IDisplay.java
----------------------------------------------------------------------
diff --git a/core/conn/trafci/src/main/java/org/trafodion/ci/IDisplay.java b/core/conn/trafci/src/main/java/org/trafodion/ci/IDisplay.java
new file mode 100644
index 0000000..f24b8bc
--- /dev/null
+++ b/core/conn/trafci/src/main/java/org/trafodion/ci/IDisplay.java
@@ -0,0 +1,28 @@
+// @@@ START COPYRIGHT @@@
+//
+// 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.
+//
+// @@@ END COPYRIGHT @@@
+
+package org.trafodion.ci;
+
+import java.io.IOException;
+
+public interface IDisplay {
+ public void output(OutputContents contents) throws IOException;
+}
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/de7e7d4e/core/conn/trafci/src/main/java/org/trafodion/ci/IndexStruct.java
----------------------------------------------------------------------
diff --git a/core/conn/trafci/src/main/java/org/trafodion/ci/IndexStruct.java b/core/conn/trafci/src/main/java/org/trafodion/ci/IndexStruct.java
new file mode 100644
index 0000000..6cd1f63
--- /dev/null
+++ b/core/conn/trafci/src/main/java/org/trafodion/ci/IndexStruct.java
@@ -0,0 +1,55 @@
+// @@@ START COPYRIGHT @@@
+//
+// 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.
+//
+// @@@ END COPYRIGHT @@@
+package org.trafodion.ci;
+
+public class IndexStruct {
+ private String indexName;
+ private String tableName;
+ private String tableType;
+
+ public IndexStruct(String indexName, String tableName, String tableType) {
+ super();
+ this.indexName = indexName;
+ this.tableName = tableName;
+ this.tableType = tableType;
+ }
+ public final String getTableType() {
+ return tableType;
+ }
+ public final void setTableType(String tableType) {
+ this.tableType = tableType;
+ }
+ public final String getIndexName() {
+ return indexName;
+ }
+
+ public final void setIndexName(String indexName) {
+ this.indexName = indexName;
+ }
+
+ public final String getTableName() {
+ return tableName;
+ }
+
+ public final void setTableName(String tableName) {
+ this.tableName = tableName;
+ }
+}