/*******************************************************************************
* Copyright (c) 2015 hangum.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* hangum - initial API and implementation
******************************************************************************/
package com.hangum.tadpole.rdb.core.editors.main.composite.resultdetail;
import org.apache.log4j.Logger;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import com.hangum.tadpole.commons.dialogs.message.dao.RequestResultDAO;
import com.hangum.tadpole.commons.util.NumberFormatUtils;
import com.hangum.tadpole.engine.sql.util.resultset.QueryExecuteResultDTO;
import com.hangum.tadpole.engine.sql.util.resultset.TadpoleResultSet;
import com.hangum.tadpole.engine.utils.RequestQuery;
import com.hangum.tadpole.preference.get.GetPreferenceGeneral;
import com.hangum.tadpole.rdb.core.Messages;
import com.hangum.tadpole.rdb.core.editors.main.composite.ResultSetComposite;
import com.hangum.tadpole.rdb.core.editors.main.composite.tail.ResultTailComposite;
/**
* abstract result detail composite
*
* @author hangum
*
*/
public abstract class AbstractResultDetailComposite extends Composite {
/** Logger for this class. */
private static final Logger logger = Logger.getLogger(AbstractResultDetailComposite.class);
public enum RESULT_COMP_TYPE {Table, Text, JSON};
protected RequestQuery reqQuery;
protected QueryExecuteResultDTO rsDAO;
protected Event eventTableSelect;
/** result composite */
protected ResultSetComposite rdbResultComposite;
/** tail composite */
protected ResultTailComposite compositeTail;
/** result set head click action define */
protected String strResultSetHeadClicks = GetPreferenceGeneral.getRDBResultHeadClick();
/** result set query history id */
protected long longHistorySeq = -1;
/**
* Create the composite.
* @param parent
* @param style
*/
public AbstractResultDetailComposite(Composite parent, int style, ResultSetComposite rdbResultComposite) {
super(parent, style);
this.rdbResultComposite = rdbResultComposite;
}
/**
* initialize UI
*/
public abstract void initUI();
/** implements result type */
public abstract RESULT_COMP_TYPE getResultType();
/**
* print ui
* @param rsDAO
* @param reqQuery
* @param isMakePing
* @param longHistorySeq
*/
public void printUI(RequestQuery reqQuery, QueryExecuteResultDTO rsDAO, boolean isMakePing, long longHistorySeq) {
this.reqQuery = reqQuery;
this.rsDAO = rsDAO;
compositeTail.setBtnPint(isMakePing);
this.longHistorySeq = longHistorySeq;
}
public void endQuery() {
eventTableSelect = null;
}
// /**
// * get last data
// */
// public void getLastData() {
// // 데이터를 마지막 까지 가져왔는지 비교합니다. // 나머지 데이터를 가져온다.
// final int intSelectLimitCnt = GetPreferenceGeneral.getSelectLimitCount();
// final String strUserEmail = SessionManager.getEMAIL();
// final int queryTimeOut = GetPreferenceGeneral.getQueryTimeOut();
//
// try {
// final TadpoleResultSet oldTadpoleResultSet = getRsDAO().getDataList();
// boolean isContinue = true;
// while(isContinue) {
// QueryExecuteResultDTO newRsDAO = getRdbResultComposite().runSelect(reqQuery, queryTimeOut, strUserEmail, intSelectLimitCnt, oldTadpoleResultSet.getData().size());
// if(newRsDAO.getDataList().getData().isEmpty()) isContinue = false;
// oldTadpoleResultSet.getData().addAll(newRsDAO.getDataList().getData());
// }
//
// } catch(Exception e) {
// logger.error("continue result set", e);
// }
//
// }
/**
* 쿼리 결과 메시지를 출력합니다.
*
* @return
*/
public String getTailResultMsg() {
if(getRsDAO() == null) return "";
final TadpoleResultSet trs = getRsDAO().getDataList();
// 메시지를 출력합니다.
float longExecuteTime = (getReqResultDAO().getEndDateExecute().getTime() - getReqResultDAO().getStartDateExecute().getTime()) / 1000f;
String strResultMsg = ""; //$NON-NLS-1$
if(trs.isEndOfRead()) {
strResultMsg = String.format("%s %s (%s %s)", NumberFormatUtils.commaFormat(trs.getData().size()), Messages.get().Rows, longExecuteTime, Messages.get().Sec); //$NON-NLS-1$
} else {
if( (trs.getData().size() % GetPreferenceGeneral.getSelectLimitCount()) == 0) {
// 데이터가 한계가 넘어 갔습니다.
String strMsg = String.format(Messages.get().MainEditor_34, NumberFormatUtils.commaFormat(trs.getData().size()));
strResultMsg = String.format("%s (%s %s)", strMsg, longExecuteTime, Messages.get().Sec); //$NON-NLS-1$
} else {
strResultMsg = String.format("%s %s (%s %s)", NumberFormatUtils.commaFormat(trs.getData().size()), Messages.get().Rows, longExecuteTime, Messages.get().Sec); //$NON-NLS-1$
}
}
return strResultMsg;
}
/**
* get rdb result composite
* @return
*/
public ResultSetComposite getRdbResultComposite() {
return rdbResultComposite;
}
public ResultTailComposite getCompositeTail() {
return compositeTail;
}
/**
* @return the reqQuery
*/
public RequestQuery getReqQuery() {
return reqQuery;
}
/**
* @return the rsDAO
*/
public QueryExecuteResultDTO getRsDAO() {
return rsDAO;
}
/**
* @return the reqResultDAO
*/
public RequestResultDAO getReqResultDAO() {
return reqQuery.getResultDao();
}
@Override
protected void checkSubclass() {
}
}