/******************************************************************************* * 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.dialog.dbconnect.dialog; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ArrayContentProvider; 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.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.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; 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 org.eclipse.swt.widgets.Text; import com.hangum.tadpole.commons.libs.core.message.CommonMessages; import com.hangum.tadpole.commons.libs.core.utils.ValidChecker; import com.hangum.tadpole.commons.util.GlobalImageUtils; import com.hangum.tadpole.engine.query.dao.system.ExternalBrowserInfoDAO; import com.hangum.tadpole.rdb.core.Messages; /** * 브라우저 URL을 기록합니다. * * https://github.com/hangum/TadpoleForDBTools/issues/356 * @author hangum * */ public class ExtensionBrowserURLDialog extends Dialog { /** * list default external dao */ private List<ExternalBrowserInfoDAO> listExterBroswer = new ArrayList<ExternalBrowserInfoDAO>(); private Button btnEnable; private TableViewer tableViewer; private Combo comboUsed; private Text textName; private Text textURL; private Text textComment; /** * Create the dialog. * @param parentShell */ public ExtensionBrowserURLDialog(Shell parentShell, List<ExternalBrowserInfoDAO> listExterBroswer) { super(parentShell); setShellStyle(SWT.MAX | SWT.RESIZE | SWT.TITLE | SWT.APPLICATION_MODAL); this.listExterBroswer = listExterBroswer; } @Override public void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(Messages.get().ExtensionBrowserURLDialog_0); newShell.setImage(GlobalImageUtils.getTadpoleIcon()); } /** * Create contents of the dialog. * @param parent */ @Override protected Control createDialogArea(Composite parent) { Composite container = (Composite) super.createDialogArea(parent); btnEnable = new Button(container, SWT.CHECK); btnEnable.setSelection(true); btnEnable.setText(Messages.get().IsEnable); Group grpList = new Group(container, SWT.NONE); grpList.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); grpList.setText(Messages.get().List); grpList.setLayout(new GridLayout(1, false)); tableViewer = new TableViewer(grpList, SWT.BORDER | SWT.FULL_SELECTION); tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection iss = (IStructuredSelection)event.getSelection(); Object selectObj = iss.getFirstElement(); if(null != selectObj) { selectData((ExternalBrowserInfoDAO)selectObj); } } }); Table table = tableViewer.getTable(); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); table.setHeaderVisible(true); table.setLinesVisible(true); TableColumn tblclmnUsed = new TableColumn(table, SWT.NONE); tblclmnUsed.setWidth(70); tblclmnUsed.setText(Messages.get().IsUse); TableColumn tblclmnName = new TableColumn(table, SWT.NONE); tblclmnName.setWidth(100); tblclmnName.setText(CommonMessages.get().Name); TableColumn tblclmnUrl = new TableColumn(table, SWT.NONE); tblclmnUrl.setWidth(200); tblclmnUrl.setText(Messages.get().URL); TableColumn tblclmnComment = new TableColumn(table, SWT.NONE); tblclmnComment.setWidth(100); tblclmnComment.setText(CommonMessages.get().Description); tableViewer.setContentProvider(new ArrayContentProvider()); tableViewer.setLabelProvider(new ExtensionBrowserLableProvider()); tableViewer.setInput(listExterBroswer); Group grpAdd = new Group(grpList, SWT.NONE); grpAdd.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1)); grpAdd.setText(CommonMessages.get().Add); grpAdd.setLayout(new GridLayout(2, false)); Label lblUse = new Label(grpAdd, SWT.NONE); lblUse.setText(Messages.get().IsUse); comboUsed = new Combo(grpAdd, SWT.READ_ONLY); comboUsed.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); comboUsed.add("YES"); //$NON-NLS-1$ comboUsed.add("NO"); //$NON-NLS-1$ comboUsed.select(0); Label lblName = new Label(grpAdd, SWT.NONE); lblName.setText(CommonMessages.get().Name); textName = new Text(grpAdd, SWT.BORDER); textName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Label lblUrl = new Label(grpAdd, SWT.NONE); lblUrl.setText(Messages.get().URL); textURL = new Text(grpAdd, SWT.BORDER); textURL.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Label lblDescription = new Label(grpAdd, SWT.NONE); lblDescription.setText(CommonMessages.get().Description); textComment = new Text(grpAdd, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CANCEL | SWT.MULTI); GridData gd_textDescription = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); gd_textDescription.heightHint = 50; gd_textDescription.minimumHeight = 50; textComment.setLayoutData(gd_textDescription); new Label(grpAdd, SWT.NONE); Composite composite = new Composite(grpAdd, SWT.NONE); composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); composite.setLayout(new GridLayout(2, false)); Button btnAdd = new Button(composite, SWT.NONE); btnAdd.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { addExtensionBrowserData(); } }); btnAdd.setText(CommonMessages.get().Add); Button btnDelete = new Button(composite, SWT.NONE); btnDelete.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { deleteExtensionBrowserData(); } }); btnDelete.setText(CommonMessages.get().Delete); return container; } /** * table data를 삭제합니다. */ private void deleteExtensionBrowserData() { String strName = StringUtils.trimToEmpty(textName.getText()); String strUrl = StringUtils.trimToEmpty(textURL.getText()); // url데이터가 이미 존재하는지 검사합니다. List<ExternalBrowserInfoDAO> listCheckExterBroswer = (List)tableViewer.getInput(); for (ExternalBrowserInfoDAO externalBrowserInfoDAO : listCheckExterBroswer) { if(strName.equals(externalBrowserInfoDAO.getName()) && strUrl.equals(externalBrowserInfoDAO.getUrl())) { listExterBroswer.remove(externalBrowserInfoDAO); tableViewer.refresh(); return; } } } /** * browser data를 추가합니다. */ private void addExtensionBrowserData() { String strName = StringUtils.trimToEmpty(textName.getText()); String strUrl = StringUtils.trimToEmpty(textURL.getText()); String strCmt = StringUtils.trimToEmpty(textComment.getText()); if(!ValidChecker.checkTextCtl(textName, CommonMessages.get().Name)) return; if(!ValidChecker.checkTextCtl(textURL, Messages.get().URL)) return; // url데이터가 이미 존재하는지 검사합니다. List<ExternalBrowserInfoDAO> listCheckExterBroswer = (List)tableViewer.getInput(); for (ExternalBrowserInfoDAO externalBrowserInfoDAO : listCheckExterBroswer) { if(strUrl.equals(externalBrowserInfoDAO.getUrl())) { MessageDialog.openWarning(null, CommonMessages.get().Warning, CommonMessages.get().Name); //$NON-NLS-1$ return; } } // 신규데이터를 만든다. ExternalBrowserInfoDAO newDao = new ExternalBrowserInfoDAO(); newDao.setIs_used(comboUsed.getText()); newDao.setName(strName); newDao.setUrl(strUrl); newDao.setComment(strCmt); listExterBroswer.add(newDao); tableViewer.refresh(); } /** * select Obj * @param externalDAo */ private void selectData(ExternalBrowserInfoDAO externalDAo) { comboUsed.setText(externalDAo.getIs_used()); textName.setText(externalDAo.getName()); textURL.setText(externalDAo.getUrl()); textComment.setText(externalDAo.getComment()); } /** * Create contents of the button bar. * @param parent */ @Override protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.OK_ID, CommonMessages.get().Save, true); createButton(parent, IDialogConstants.CANCEL_ID, CommonMessages.get().Cancel, false); } @Override protected void okPressed() { isEnable = btnEnable.getSelection(); super.okPressed(); } /** * Return the initial size of the dialog. */ @Override protected Point getInitialSize() { return new Point(450, 564); } private boolean isEnable = false; public boolean isEnable() { return isEnable; } public List<ExternalBrowserInfoDAO> getListExterBroswer() { return listExterBroswer; } } /** * extension browser URL label provider * * @author hangum * */ class ExtensionBrowserLableProvider extends LabelProvider implements ITableLabelProvider { @Override public Image getColumnImage(Object element, int columnIndex) { // TODO Auto-generated method stub return null; } @Override public String getColumnText(Object element, int columnIndex) { ExternalBrowserInfoDAO dao = (ExternalBrowserInfoDAO)element; switch(columnIndex) { case 0: return dao.getIs_used(); case 1: return dao.getName(); case 2: return dao.getUrl(); case 3: return dao.getComment(); } return "*** not set column ***"; //$NON-NLS-1$ } }