/******************************************************************************* * Copyright (c) 2013 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.dialog.dml; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.eclipse.jface.dialogs.Dialog; 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.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import com.hangum.tadpole.commons.google.analytics.AnalyticCaller; import com.hangum.tadpole.commons.libs.core.message.CommonMessages; import com.hangum.tadpole.commons.util.GlobalImageUtils; import com.hangum.tadpole.engine.query.dao.system.UserDBDAO; import com.hangum.tadpole.rdb.core.Messages; import com.hangum.tadpole.rdb.core.viewers.object.sub.utils.TadpoleObjectQuery; /** * DMLGenerae Statement Dialog * * @author nilriri * */ public class SelectObjectDialog extends Dialog { private static final Logger logger = Logger.getLogger(SelectObjectDialog.class); private Map<String, String> map = new HashMap<String, String>(); //$NON-NLS-1$ private List<Map<String, String>> extendsInfoList = new ArrayList<Map<String, String>>(); private UserDBDAO userDB; private TableViewer tableViewer; private Label lblTableName; private Map<String,String> object_map = new HashMap<String,String>(); /** * Create the dialog. * * @param parentShell */ public SelectObjectDialog(Shell parentShell, UserDBDAO userDB, Map<String,String> object_map) { super(parentShell); setShellStyle(SWT.MAX | SWT.RESIZE | SWT.TITLE | SWT.APPLICATION_MODAL); this.userDB = userDB; // 상세보기를 지원하는 오브젝트 타입. this.object_map.put("object_type", "'TABLE','VIEW','SYNONYM'"); this.object_map.put("schema_name", object_map.get("OBJECT_OWNER")); this.object_map.put("object_name", object_map.get("OBJECT_NAME")); initData(); } @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(Messages.get().SelectObject); newShell.setImage(GlobalImageUtils.getTadpoleIcon()); } /** * Create contents of the dialog. * * @param parent */ @Override protected Control createDialogArea(Composite parent) { Composite container = (Composite) super.createDialogArea(parent); GridLayout gridLayout = (GridLayout) container.getLayout(); gridLayout.verticalSpacing = 2; gridLayout.horizontalSpacing = 2; gridLayout.marginHeight = 2; gridLayout.marginWidth = 2; Composite compositeBody = new Composite(container, SWT.NONE); GridLayout gl_compositeBody = new GridLayout(1, false); gl_compositeBody.verticalSpacing = 2; gl_compositeBody.horizontalSpacing = 2; gl_compositeBody.marginHeight = 2; gl_compositeBody.marginWidth = 2; compositeBody.setLayout(gl_compositeBody); compositeBody.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); Composite compositeTable = new Composite(compositeBody, SWT.NONE); compositeTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); compositeTable.setLayout(new GridLayout(1, false)); lblTableName = new Label(compositeTable, SWT.NONE); lblTableName.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblTableName.setText(object_map.get("object_name")); tableViewer = new TableViewer(compositeBody, SWT.BORDER | SWT.FULL_SELECTION); Table table = tableViewer.getTable(); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); table.setLinesVisible(true); table.setHeaderVisible(true); TableViewerColumn tvOwner = new TableViewerColumn(tableViewer, SWT.LEFT); TableColumn tcOwner = tvOwner.getColumn(); tcOwner.setWidth(90); tcOwner.setText("Owner"); TableViewerColumn tvObject = new TableViewerColumn(tableViewer, SWT.LEFT); TableColumn tcObject = tvObject.getColumn(); tcObject.setWidth(150); tcObject.setText("Object Name"); TableViewerColumn tvType = new TableViewerColumn(tableViewer, SWT.LEFT); TableColumn tcType = tvType.getColumn(); tcType.setWidth(100); tcType.setText("Object Type"); GridData gd_textQuery = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1); gd_textQuery.minimumHeight = 120; tableViewer.setContentProvider(new ArrayContentProvider()); tableViewer.setLabelProvider(new ObjectSelectorLabelProvider()); tableViewer.addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(DoubleClickEvent event) { IStructuredSelection is = (IStructuredSelection) event.getSelection(); map = (HashMap<String, String>) is.getFirstElement(); okPressed(); } }); tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection is = (IStructuredSelection) event.getSelection(); map = (HashMap<String, String>) is.getFirstElement(); } }); tableViewer.setInput(extendsInfoList); tableViewer.refresh(); tableViewer.getTable().setSelection(0); // google analytic AnalyticCaller.track(this.getClass().getName()); tableViewer.getTable().setFocus(); return container; } /** * selected object */ private void selectObject() { } /** * * @return */ public int getObjectCount() { return extendsInfoList == null ? 0 : extendsInfoList.size(); } public Map<String, String> getSelectObject() { return map == null ? new HashMap<String, String>() : map; } private void initData() { try { List<HashMap> Objects = TadpoleObjectQuery.getObjectInfo(userDB, object_map); for (HashMap map : Objects) { extendsInfoList.add(map); } /* Objects = TadpoleObjectQuery.getObjectInfo(userDB, "VIEW", object_name); for (HashMap map : Objects) { extendsInfoList.add(map); } */ if (extendsInfoList.size() >= 1) { map = extendsInfoList.get(0); } } catch (Exception e) { logger.error("initialize data", e); } } /** * Create contents of the button bar. * * @param parent */ @Override protected void createButtonsForButtonBar(Composite parent) { createButton(parent, SWT.CANCEL, CommonMessages.get().Cancel, false).addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent event) { cancelPressed(); } }); Button ok = createButton(parent, SWT.PUSH, CommonMessages.get().OK, false); ok.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { if (map.isEmpty()) { MessageDialog.openInformation(getShell(), CommonMessages.get().Information, Messages.get().SelectSearchObject); return; } else { okPressed(); } } }); } /** * Return the initial size of the dialog. */ @Override protected Point getInitialSize() { return new Point(450, 300); } public class ObjectSelectorLabelProvider extends LabelProvider implements ITableLabelProvider { @Override public Image getColumnImage(Object element, int columnIndex) { return null; } @Override public String getColumnText(Object element, int columnIndex) { Map<String, String> map = (Map<String, String>) element; switch (columnIndex) { case 0: return map.get("OBJECT_OWNER"); case 1: return map.get("OBJECT_NAME"); case 2: return map.get("OBJECT_TYPE"); } return "*** not set column value ***"; //$NON-NLS-1$ } } }