/*******************************************************************************
* Copyright (c) 2014 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;
import java.util.Date;
import org.apache.log4j.Logger;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbenchPartSite;
import com.hangum.tadpole.commons.dialogs.message.dao.TadpoleMessageDAO;
import com.hangum.tadpole.commons.util.TadpoleWidgetUtils;
import com.hangum.tadpole.engine.query.dao.system.UserDBDAO;
import com.hangum.tadpole.engine.sql.util.SQLUtil;
import com.hangum.tadpole.engine.sql.util.resultset.QueryExecuteResultDTO;
import com.hangum.tadpole.engine.utils.EditorDefine;
import com.hangum.tadpole.engine.utils.RequestQuery;
import com.hangum.tadpole.rdb.core.Messages;
import com.hangum.tadpole.rdb.core.editors.main.MainEditor;
/**
* RDB Result Composite
*
* @author hangum
*
*/
public class ResultMainComposite extends Composite {
/** Logger for this class. */
private static final Logger logger = Logger.getLogger(ResultMainComposite.class);
/** sql main editor */
private MainEditor mainEditor;
/** 사용자가 요청한 쿼리 */
private RequestQuery reqQuery;
/** query 결과 창 */
private CTabFolder tabFolderResult;
/** 쿼리 결과 페이지 로케이션 */
private ResultSetComposite compositeResultSet;
/** 쿼리 플랜 페이지 */
private ResultPlanComposite compositeQueryPlan;
/** query history */
private QueryHistoryComposite compositeQueryHistory;
/** tadpole message */
private MessageComposite compositeMessage;
/**
* Create the composite.
* @param parent
* @param style
*/
public ResultMainComposite(Composite ssahFormComposite, int style) {
super(ssahFormComposite, style);
GridLayout gridLayout = new GridLayout(1, false);
gridLayout.verticalSpacing = 1;
gridLayout.horizontalSpacing = 1;
gridLayout.marginHeight = 1;
gridLayout.marginWidth = 1;
setLayout(gridLayout);
Composite compositeResult = new Composite(this, SWT.NONE);
compositeResult.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
GridLayout gl_compositeResult = new GridLayout(1, false);
gl_compositeResult.verticalSpacing = 1;
gl_compositeResult.horizontalSpacing = 1;
gl_compositeResult.marginHeight = 1;
gl_compositeResult.marginWidth = 1;
compositeResult.setLayout(gl_compositeResult);
tabFolderResult = new CTabFolder(compositeResult, SWT.NONE);
tabFolderResult.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
tabFolderResult.setSelectionBackground(TadpoleWidgetUtils.getTabFolderBackgroundColor(), TadpoleWidgetUtils.getTabFolderPercents());
// Set tab index
tabFolderResult.setData(EditorDefine.RESULT_TAB.RESULT_SET.toString(), 0);
tabFolderResult.setData(EditorDefine.RESULT_TAB.QUERY_PLAN.toString(), 1);
tabFolderResult.setData(EditorDefine.RESULT_TAB.SQL_RECALL.toString(), 2);
tabFolderResult.setData(EditorDefine.RESULT_TAB.TADPOLE_MESSAGE.toString(), 3);
///////////////////// tab resultset //////////////////////////
compositeResultSet = new ResultSetComposite(tabFolderResult, SWT.NONE, this);
compositeResultSet.setLayout(new GridLayout(1, false));
CTabItem tbtmResult = new CTabItem(tabFolderResult, SWT.NONE);
tbtmResult.setText(Messages.get().MainEditor_7);
tbtmResult.setControl(compositeResultSet);
///////////////////// tab sql plan //////////////////////////
compositeQueryPlan = new ResultPlanComposite(tabFolderResult, SWT.NONE);
compositeQueryPlan.setRDBResultComposite(this);
compositeQueryPlan.setLayout(new GridLayout(1, false));
CTabItem tbtmQueryPlan = new CTabItem(tabFolderResult, SWT.NONE);
tbtmQueryPlan.setText(Messages.get().QueryPlan);
tbtmQueryPlan.setControl(compositeQueryPlan);
///////////////////// tab query history //////////////////////////
compositeQueryHistory = new QueryHistoryComposite(tabFolderResult, SWT.NONE);
compositeQueryHistory.setRDBResultComposite(this);
compositeQueryHistory.setLayout(new GridLayout(1, false));
CTabItem tbtmNewItem = new CTabItem(tabFolderResult, SWT.NONE);
tbtmNewItem.setText(Messages.get().MainEditor_10);
tbtmNewItem.setControl(compositeQueryHistory);
/////////////////// tab query history ///////////////////////
///////////////////// tab Message //////////////////////////
compositeMessage = new MessageComposite(tabFolderResult, SWT.NONE);
compositeMessage.setLayout(new GridLayout(1, false));
CTabItem tbtmMessage = new CTabItem(tabFolderResult, SWT.NONE);
tbtmMessage.setText(Messages.get().MainEditor_0);
tbtmMessage.setControl(compositeMessage);
///////////////////// tab Message //////////////////////////
tabFolderResult.setSelection(2);
}
/**
* main composite
*/
public void initMainComposite() {
compositeQueryHistory.findHistoryData();
}
/**
* set main editor
* @param mainEditor
*/
public void setMainEditor(MainEditor mainEditor) {
this.mainEditor = mainEditor;
this.compositeResultSet.setSelect(SQLUtil.isSELECTEditor(mainEditor.getDbAction()));
this.compositeResultSet.setDbUserRoleType(mainEditor.getUserType());
}
/**
* execute command
*
* @param reqQuery
*/
public void executeCommand(final RequestQuery reqQuery) {
this.reqQuery = reqQuery;
boolean isExecuteQuery = compositeResultSet.executeCommand(reqQuery);
if(!isExecuteQuery) {
setOrionTextFocus();
}
}
/**
* tab을 선택합니다.
*
* @param selectTab
*/
public void resultFolderSel(final EditorDefine.RESULT_TAB selectTab) {
int index = (Integer)tabFolderResult.getData(selectTab.toString());
if(tabFolderResult.getSelectionIndex() != index) {
tabFolderResult.setSelection(index);
}
}
public void appendTextAtPosition(String cmd) {
mainEditor.appendTextAtPosition(cmd);
}
public UserDBDAO getUserDB() {
return mainEditor.getUserDB();
}
/**
* 사용자 seq
*
* @return
*/
public int getUserSeq() {
return mainEditor.getUserSeq();
}
/**
* editor append text
* @param cmd
*/
public void appendText(String cmd) {
mainEditor.appendText(cmd);
}
/**
* Message windows write the system message
*
* @param throwable
* @param msg
*/
public void refreshErrorMessageView(RequestQuery requestQuery, Throwable throwable, String msg) {
compositeMessage.addErrorAfterRefresh(getUserDB(), requestQuery, new TadpoleMessageDAO(new Date(), msg, throwable));
}
/**
*
* @param requestQuery
* @param msg
*/
public void refreshInfoMessageView(RequestQuery requestQuery, String msg) {
compositeMessage.addInfoAfterRefresh(getUserDB(), requestQuery, msg);
}
/**
* set query plan view
*
* @param reqQuery
* @param rsDAO
* @param longHistorySeq
*/
public void setQueryPlanView(RequestQuery reqQuery, QueryExecuteResultDTO rsDAO, long longHistorySeq) {
compositeQueryPlan.setQueryPlanData(reqQuery, rsDAO, longHistorySeq);
}
public IWorkbenchPartSite getSite() {
return mainEditor.getSite();
}
public QueryHistoryComposite getCompositeQueryHistory() {
return compositeQueryHistory;
}
public void setOrionTextFocus() {
mainEditor.setOrionTextFocus();
}
@Override
public void dispose() {
super.dispose();
}
@Override
protected void checkSubclass() {
}
public void browserEvaluate(String command) {
mainEditor.browserEvaluate(command);
}
public MainEditor getMainEditor() {
return mainEditor;
}
}