/******************************************************************************* * Copyright (c) 2016 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: * nilrir - initial API and implementation ******************************************************************************/ package com.hangum.tadpole.rdb.core.viewers.object.sub.rdb.java; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.ui.IWorkbenchPartSite; import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine; import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine.OBJECT_TYPE; import com.hangum.tadpole.commons.libs.core.message.CommonMessages; import com.hangum.tadpole.engine.manager.TadpoleSQLManager; import com.hangum.tadpole.engine.query.dao.rdb.OracleJavaDAO; import com.hangum.tadpole.engine.query.dao.system.UserDBDAO; import com.hangum.tadpole.engine.sql.util.QueryUtils; import com.hangum.tadpole.engine.sql.util.tables.TableUtil; import com.hangum.tadpole.rdb.core.Activator; import com.hangum.tadpole.rdb.core.Messages; import com.hangum.tadpole.rdb.core.actions.object.AbstractObjectAction; import com.hangum.tadpole.rdb.core.actions.object.rdb.object.ObjectAlterAction; import com.hangum.tadpole.rdb.core.actions.object.rdb.object.ObjectCreatAction; import com.hangum.tadpole.rdb.core.actions.object.rdb.object.ObjectDropAction; import com.hangum.tadpole.rdb.core.actions.object.rdb.object.ObjectExplorerSelectionToEditorAction; import com.hangum.tadpole.rdb.core.actions.object.rdb.object.ObjectRefreshAction; import com.hangum.tadpole.rdb.core.actions.object.rdb.object.OracleObjectCompileAction; import com.hangum.tadpole.rdb.core.dialog.java.CreateJavaDialog; import com.hangum.tadpole.rdb.core.editors.dbinfos.composites.ColumnHeaderCreator; import com.hangum.tadpole.rdb.core.editors.dbinfos.composites.DefaultLabelProvider; import com.hangum.tadpole.rdb.core.editors.dbinfos.composites.DefaultTableColumnFilter; import com.hangum.tadpole.rdb.core.editors.dbinfos.composites.TableViewColumnDefine; import com.hangum.tadpole.rdb.core.viewers.object.sub.AbstractObjectComposite; import com.ibatis.sqlmap.client.SqlMapClient; /** * Oracle java composite * * @author nilriri * */ public class TadpoleJavaComposite extends AbstractObjectComposite { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(TadpoleJavaComposite.class); /** java object 지원 여부 */ private boolean isSupportJavaObject = false; private CTabItem tbtmJava; // table info private TableViewer javaListViewer; private List<OracleJavaDAO> showJava = new ArrayList<OracleJavaDAO>(); private DefaultTableColumnFilter javaFilter; // column info private TableViewer javaColumnViewer; private ObjectCreatAction creatAction_Java; private ObjectAlterAction alterAction_Java; private AbstractObjectAction dropAction_Java; private AbstractObjectAction refreshAction_Java; private OracleObjectCompileAction compileAction; /** * Create the composite. * * @param partSite * @param parent * @param userDB */ public TadpoleJavaComposite(IWorkbenchPartSite partSite, final CTabFolder tabFolderObject, UserDBDAO userDB) { super(partSite, tabFolderObject, userDB); createWidget(tabFolderObject); } private void createWidget(final CTabFolder tabFolderObject) { tbtmJava = new CTabItem(tabFolderObject, SWT.NONE); tbtmJava.setText("Java"); tbtmJava.setData(TAB_DATA_KEY, PublicTadpoleDefine.OBJECT_TYPE.JAVA.name()); Composite compositeTables = new Composite(tabFolderObject, SWT.NONE); tbtmJava.setControl(compositeTables); GridLayout gl_compositeTables = new GridLayout(1, false); gl_compositeTables.verticalSpacing = 2; gl_compositeTables.horizontalSpacing = 2; gl_compositeTables.marginHeight = 2; gl_compositeTables.marginWidth = 2; compositeTables.setLayout(gl_compositeTables); compositeTables.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); SashForm sashForm = new SashForm(compositeTables, SWT.NONE); sashForm.setOrientation(SWT.VERTICAL); sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); // SWT.VIRTUAL 일 경우 FILTER를 적용하면 데이터가 보이지 않는 오류수정. javaListViewer = new TableViewer(sashForm, /* SWT.VIRTUAL | */ SWT.BORDER | SWT.FULL_SELECTION); javaListViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { try { IStructuredSelection is = (IStructuredSelection) event.getSelection(); if (null != is) { OracleJavaDAO javaDao = (OracleJavaDAO) is.getFirstElement(); CreateJavaDialog epd = new CreateJavaDialog(null, userDB, javaDao); epd.open(); refreshJava(userDB, true, ""); } } catch (Exception e) { logger.error("Open detail information view!", e); } } }); Table tableTableList = javaListViewer.getTable(); tableTableList.setLinesVisible(true); tableTableList.setHeaderVisible(true); createJavaMenu(); createJavaListColumns(); javaListViewer.setInput(showJava); javaListViewer.refresh(); javaFilter = new DefaultTableColumnFilter(); javaListViewer.addFilter(javaFilter); } private void createJavaListColumns() { TableViewColumnDefine[] tableColumnDef = new TableViewColumnDefine[] { // new TableViewColumnDefine("OBJECT_NAME", "Name", 120, SWT.LEFT) // //$NON-NLS-1$ , new TableViewColumnDefine("SCHEMA_NAME", "Owner", 80, SWT.LEFT) // //$NON-NLS-1$ , new TableViewColumnDefine("OBJECT_TYPE", "Type", 80, SWT.LEFT) // //$NON-NLS-1$ , new TableViewColumnDefine("CREATED", "Created", 80, SWT.LEFT) // //$NON-NLS-1$ , new TableViewColumnDefine("LAST_DDL_TIME", "Lst DDL", 80, SWT.LEFT) // //$NON-NLS-1$ , new TableViewColumnDefine("STATUS", "Status", 80, SWT.LEFT) // //$NON-NLS-1$ }; ColumnHeaderCreator.createColumnHeader(javaListViewer, tableColumnDef); javaListViewer.setContentProvider(new ArrayContentProvider()); javaListViewer.setLabelProvider(new DefaultLabelProvider(javaListViewer)); } /** * create Table menu */ private void createJavaMenu() { if (getUserDB() == null) return; creatAction_Java = new ObjectCreatAction(getSite().getWorkbenchWindow(), PublicTadpoleDefine.OBJECT_TYPE.JAVA, Messages.get().CreateJava); alterAction_Java = new ObjectAlterAction(getSite().getWorkbenchWindow(), PublicTadpoleDefine.OBJECT_TYPE.JAVA, Messages.get().ChangeJava); dropAction_Java = new ObjectDropAction(getSite().getWorkbenchWindow(), PublicTadpoleDefine.OBJECT_TYPE.JAVA, Messages.get().DropJava); //$NON-NLS-1$ refreshAction_Java = new ObjectRefreshAction(getSite().getWorkbenchWindow(), PublicTadpoleDefine.OBJECT_TYPE.JAVA, CommonMessages.get().Refresh); //$NON-NLS-1$ compileAction = new OracleObjectCompileAction(getSite().getWorkbenchWindow(), PublicTadpoleDefine.OBJECT_TYPE.JAVA, Messages.get().Compilejava); // object copy to query editor objectSelectionToEditorAction = new ObjectExplorerSelectionToEditorAction(getSite().getWorkbenchWindow(), PublicTadpoleDefine.OBJECT_TYPE.TABLES); // menu final MenuManager menuMgr = new MenuManager("#PopupMenu", "Java"); //$NON-NLS-1$ //$NON-NLS-2$ menuMgr.add(refreshAction_Java); menuMgr.add(new Separator()); if (!isDDLLock()) { menuMgr.add(creatAction_Java); menuMgr.add(alterAction_Java); menuMgr.add(dropAction_Java); menuMgr.add(new Separator()); } menuMgr.add(new Separator()); menuMgr.add(compileAction); menuMgr.add(new Separator()); menuMgr.add(objectSelectionToEditorAction); javaListViewer.getTable().setMenu(menuMgr.createContextMenu(javaListViewer.getTable())); getSite().registerContextMenu(menuMgr, javaListViewer); } /** * is support object * @return */ private boolean isSupportObject() { try { QueryUtils.executeQuery(userDB, "select 1 from javasnm where 1=0 ", 0, 1); isSupportJavaObject = true; } catch (Exception e) { isSupportJavaObject = false; MessageDialog.openInformation(getShell(), CommonMessages.get().Information, Messages.get().doesnotSupportJavaObject); } return isSupportJavaObject; } /** * 정보를 최신으로 리프레쉬합니다. * * @param strObjectName */ public void refreshJava(final UserDBDAO selectUserDb, final boolean boolRefresh, final String strObjectName) { if (!boolRefresh) if (!showJava.isEmpty()) return; this.userDB = selectUserDb; if(!isSupportObject()) return; showJava = (List<OracleJavaDAO>)userDB.getDBObject(OBJECT_TYPE.JAVA, userDB.getDefaultSchemanName()); if(!(showJava == null || showJava.isEmpty())) { javaListViewer.setInput(showJava); javaListViewer.refresh(); TableUtil.packTable(javaListViewer.getTable()); // select tabitem getTabFolderObject().setSelection(tbtmJava); selectDataOfTable(strObjectName); } else { Job job = new Job(Messages.get().MainEditor_45) { @Override public IStatus run(IProgressMonitor monitor) { monitor.beginTask(MSG_DataIsBeginAcquired, IProgressMonitor.UNKNOWN); //$NON-NLS-1$ try { showJava = getJavaList(userDB); for (OracleJavaDAO dao : showJava) { dao.setSysName(dao.getObjectName() + ""); } // set push of cache userDB.setDBObject(OBJECT_TYPE.JAVA, userDB.getDefaultSchemanName(), showJava); } catch (Exception e) { logger.error("Java Referesh", e); //$NON-NLS-1$ return new Status(Status.ERROR, Activator.PLUGIN_ID, e.getMessage()); } finally { monitor.done(); } return Status.OK_STATUS; } }; job.addJobChangeListener(new JobChangeAdapter() { public void done(IJobChangeEvent event) { final IJobChangeEvent jobEvent = event; getSite().getShell().getDisplay().asyncExec(new Runnable() { public void run() { if (jobEvent.getResult().isOK()) { javaListViewer.setInput(showJava); javaListViewer.refresh(); TableUtil.packTable(javaListViewer.getTable()); // select tabitem getTabFolderObject().setSelection(tbtmJava); selectDataOfTable(strObjectName); } else { if (showJava != null) showJava.clear(); javaListViewer.setInput(showJava); javaListViewer.refresh(); TableUtil.packTable(javaListViewer.getTable()); MessageDialog.openError(getShell(),CommonMessages.get().Error, jobEvent.getResult().getMessage()); } } }); // end display.asyncExec } // end done }); // end job job.setName(userDB.getDisplay_name()); job.setUser(true); job.schedule(); } } /** * 보여 주어야할 목록을 정의합니다. * * @param userDB * @return * @throws Exception */ public static List<OracleJavaDAO> getJavaList(final UserDBDAO userDB) throws Exception { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(userDB); return sqlClient.queryForList("getJavaList", userDB.getSchema()); //$NON-NLS-1$ } /** * initialize action */ public void initAction() { if (getUserDB() == null) return; creatAction_Java.setUserDB(getUserDB()); alterAction_Java.setUserDB(getUserDB()); dropAction_Java.setUserDB(getUserDB()); refreshAction_Java.setUserDB(getUserDB()); compileAction.setUserDB(getUserDB()); objectSelectionToEditorAction.setUserDB(getUserDB()); } /** * get javaViewer * * @return */ public TableViewer getTableviewer() { return javaListViewer; } /** * get java column viewer * * @return */ public TableViewer getJobsColumnViewer() { return javaColumnViewer; } /** * initialize filter text * * @param textSearch */ public void filter(String textSearch) { javaFilter.setSearchString(textSearch); javaListViewer.refresh(); } @Override public void dispose() { super.dispose(); if (creatAction_Java != null) creatAction_Java.dispose(); if (alterAction_Java != null) alterAction_Java.dispose(); if (dropAction_Java != null) dropAction_Java.dispose(); if (refreshAction_Java != null) refreshAction_Java.dispose(); if (compileAction != null) compileAction.dispose(); } @Override public void setSearchText(String searchText) { javaFilter.setSearchString(searchText); } @Override public void selectDataOfTable(String strObjectName) { if ("".equals(strObjectName) || strObjectName == null) return; getTableviewer().getTable().setFocus(); // find select object and viewer select for (int i = 0; i < this.showJava.size(); i++) { OracleJavaDAO javaDao = (OracleJavaDAO) getTableviewer().getElementAt(i); if (StringUtils.equalsIgnoreCase(strObjectName, javaDao.getObjectName() + "")) { getTableviewer().setSelection(new StructuredSelection(getTableviewer().getElementAt(i)), true); break; } } } public void clearList() { // TODO Auto-generated method stub if(showJava != null) this.showJava.clear(); } }