package org.insightech.er.editor.view.dialog.testdata;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Group;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.IEditorPart;
import org.insightech.er.ResourceString;
import org.insightech.er.common.dialog.AbstractDialog;
import org.insightech.er.common.widgets.CompositeFactory;
import org.insightech.er.editor.model.ERDiagram;
import org.insightech.er.editor.model.diagram_contents.element.node.table.ERTable;
import org.insightech.er.editor.model.testdata.TableTestData;
import org.insightech.er.editor.model.testdata.TestData;
import org.insightech.er.editor.view.dialog.dbexport.ExportToTestDataDialog;
import org.insightech.er.editor.view.dialog.testdata.detail.TestDataDialog;
import org.insightech.er.util.Format;
public class TestDataManageDialog extends AbstractDialog {
private static final int GROUP_LIST_HEIGHT = 230;
// ER�f�[�^
private ERDiagram diagram;
// �e�X�g�f�[�^�ꗗ
private org.eclipse.swt.widgets.List testDataListWidget;
// �lj�
private Button addButton;
// �ҏW
private Button editButton;
// �폜
private Button deleteButton;
// �R�s�[
private Button copyButton;
private Button exportButton;
// �e�[�u���ꗗ
private Table testDataTable;
// �ҏW���e�X�g�f�[�^���X�g
private List<TestData> testDataList;
private IEditorPart editorPart;
/**
* �R���X�g���N�^
*/
public TestDataManageDialog(Shell parentShell, IEditorPart editorPart,
ERDiagram diagram, List<TestData> testDataList) {
super(parentShell, 2);
this.editorPart = editorPart;
this.diagram = diagram;
this.testDataList = testDataList;
}
/**
* ���������������{���܂��B
*/
@Override
protected void initialize(Composite composite) {
// �e�X�g�f�[�^�ꗗ�p�l��
this.createLeftComposite(composite);
// �e�X�g�f�[�^�ڍׁi�e�[�u���ꗗ�j�p�l��
this.createRightComposite(composite);
}
/**
* �e�X�g�f�[�^�ꗗ�p�l�������܂��B
*/
private void createLeftComposite(Composite parent) {
GridData gridData = new GridData();
GridLayout gridLayout = new GridLayout();
gridLayout.verticalSpacing = 10;
gridLayout.numColumns = 3;
Composite composite = new Composite(parent, SWT.BORDER);
composite.setLayoutData(gridData);
composite.setLayout(gridLayout);
// �e�X�g�f�[�^�ꗗ
GridData listCompGridData = new GridData();
listCompGridData.horizontalSpan = 4;
this.createTestDataList(composite, listCompGridData);
// �lj�
this.addButton = CompositeFactory.createButton(composite,
"label.button.add");
// �ҏW
this.editButton = CompositeFactory.createButton(composite,
"label.button.edit");
this.editButton.setEnabled(false);
// �폜
this.deleteButton = CompositeFactory.createButton(composite,
"label.button.delete");
this.deleteButton.setEnabled(false);
// �R�s�[
this.copyButton = CompositeFactory.createButton(composite,
"label.button.copy");
}
private void createTestDataList(Composite parent, GridData gridData) {
GridLayout gridLayout = new GridLayout();
Group group = new Group(parent, SWT.NONE);
group.setText(ResourceString.getResourceString("label.testdata.list"));
group.setLayoutData(gridData);
group.setLayout(gridLayout);
GridData listGridData = new GridData();
listGridData.widthHint = 200;
listGridData.heightHint = GROUP_LIST_HEIGHT;
this.testDataListWidget = new org.eclipse.swt.widgets.List(group,
SWT.BORDER | SWT.V_SCROLL);
this.testDataListWidget.setLayoutData(listGridData);
this.initTestDataList();
}
/**
* �e�X�g�f�[�^�ڍׂ����܂��B
*
* @param gridData
*
*/
private void createRightComposite(Composite parent) {
Composite composite = new Composite(parent, SWT.BORDER);
GridData gridData = new GridData();
gridData.verticalAlignment = GridData.FILL;
composite.setLayoutData(gridData);
GridLayout gridLayout = new GridLayout();
gridLayout.verticalSpacing = 8;
composite.setLayout(gridLayout);
// �e�X�g�f�[�^�e�[�u��
GridData tableGridData = new GridData();
tableGridData.heightHint = GROUP_LIST_HEIGHT;
tableGridData.verticalIndent = 15;
this.testDataTable = new Table(composite, SWT.BORDER
| SWT.FULL_SELECTION);
this.testDataTable.setHeaderVisible(true);
this.testDataTable.setLayoutData(tableGridData);
this.testDataTable.setLinesVisible(true);
TableColumn nameColumn = new TableColumn(testDataTable, SWT.NONE);
nameColumn.setWidth(300);
nameColumn.setResizable(false);
nameColumn.setText(ResourceString
.getResourceString("label.testdata.table.name"));
TableColumn dataNumColumn = new TableColumn(testDataTable, SWT.NONE);
dataNumColumn.setWidth(80);
dataNumColumn.setResizable(false);
dataNumColumn.setText(ResourceString
.getResourceString("label.testdata.table.test.num"));
this.exportButton = CompositeFactory.createButton(composite,
"label.button.testdata.export", 1);
this.exportButton.setEnabled(false);
}
private void initTestDataList() {
Collections.sort(this.testDataList);
this.testDataListWidget.removeAll();
for (TestData testData : this.testDataList) {
this.testDataListWidget.add(Format.null2blank(testData.getName()));
}
}
private void initTableData() {
// �e�[�u���ꗗ
this.testDataTable.removeAll();
int targetIndex = this.testDataListWidget.getSelectionIndex();
if (targetIndex == -1) {
return;
}
TestData testData = this.testDataList.get(targetIndex);
for (Map.Entry<ERTable, TableTestData> entry : testData
.getTableTestDataMap().entrySet()) {
ERTable table = entry.getKey();
TableTestData tableTestData = entry.getValue();
TableItem tableItem = new TableItem(testDataTable, SWT.NONE);
tableItem.setText(0, table.getName());
tableItem
.setText(1, String.valueOf(tableTestData.getTestDataNum()));
}
}
/**
* {@inheritDoc}
*/
@Override
protected String getErrorMessage() {
return null;
}
/**
* {@inheritDoc}
*/
@Override
protected void perfomeOK() {
}
@Override
protected String getTitle() {
return "dialog.title.testdata";
}
@Override
protected void setData() {
}
private void addTestData() {
TestData oldTestData = new TestData();
TestDataDialog testDataDialog = new TestDataDialog(this.getShell(),
diagram, oldTestData);
if (testDataDialog.open() == IDialogConstants.OK_ID) {
TestData newTestData = testDataDialog.getTestData();
this.testDataList.add(newTestData);
this.initTestDataList();
for (int i = 0; i < this.testDataList.size(); i++) {
TestData testData = this.testDataList.get(i);
if (testData == newTestData) {
this.testDataListWidget.setSelection(i);
break;
}
}
this.editButton.setEnabled(true);
this.deleteButton.setEnabled(true);
this.exportButton.setEnabled(true);
initTableData();
}
}
private void exportTestData() {
int targetIndex = this.testDataListWidget.getSelectionIndex();
ExportToTestDataDialog exportTestDataDialog = new ExportToTestDataDialog(
this.getShell(), this.editorPart, this.diagram, testDataList,
targetIndex);
exportTestDataDialog.open();
}
private void editTestData(int selectedTableIndex) {
int targetIndex = this.testDataListWidget.getSelectionIndex();
if (targetIndex == -1) {
return;
}
TestData oldTestData = this.testDataList.get(targetIndex);
TestDataDialog testDataDialog = new TestDataDialog(this.getShell(),
diagram, oldTestData);
if (selectedTableIndex != -1) {
testDataDialog.setSelectedTable(selectedTableIndex);
}
if (testDataDialog.open() == IDialogConstants.OK_ID) {
TestData newTestData = testDataDialog.getTestData();
this.testDataList.remove(targetIndex);
this.testDataList.add(targetIndex, newTestData);
this.initTestDataList();
for (int i = 0; i < this.testDataList.size(); i++) {
TestData testData = this.testDataList.get(i);
if (testData == newTestData) {
this.testDataListWidget.setSelection(i);
break;
}
}
initTableData();
}
}
private void copyTestData() {
int targetIndex = this.testDataListWidget.getSelectionIndex();
if (targetIndex == -1) {
return;
}
TestData oldTestData = this.testDataList.get(targetIndex);
TestData copyTestData = oldTestData.clone();
this.testDataList.add(copyTestData);
this.initTestDataList();
for (int i = 0; i < this.testDataList.size(); i++) {
TestData testData = this.testDataList.get(i);
if (testData == copyTestData) {
this.testDataListWidget.setSelection(i);
break;
}
}
initTableData();
}
@Override
protected void addListener() {
super.addListener();
this.addButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(SelectionEvent e) {
addTestData();
}
});
this.editButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(SelectionEvent e) {
editTestData(testDataTable.getSelectionIndex());
}
});
this.deleteButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(SelectionEvent e) {
int targetIndex = testDataListWidget.getSelectionIndex();
if (targetIndex == -1) {
return;
}
testDataList.remove(targetIndex);
initTestDataList();
if (targetIndex >= testDataList.size()) {
targetIndex = testDataList.size() - 1;
}
testDataListWidget.setSelection(targetIndex);
if (targetIndex == -1) {
editButton.setEnabled(false);
deleteButton.setEnabled(false);
exportButton.setEnabled(false);
}
initTableData();
}
});
this.copyButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(SelectionEvent e) {
copyTestData();
}
});
this.exportButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(SelectionEvent e) {
exportTestData();
}
});
this.testDataListWidget.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(SelectionEvent e) {
if (testDataListWidget.getSelectionIndex() != -1) {
initTableData();
editButton.setEnabled(true);
deleteButton.setEnabled(true);
exportButton.setEnabled(true);
}
}
});
this.testDataListWidget.addMouseListener(new MouseAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void mouseDoubleClick(MouseEvent e) {
editTestData(testDataTable.getSelectionIndex());
}
});
this.testDataTable.addMouseListener(new MouseAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void mouseDoubleClick(MouseEvent e) {
editTestData(testDataTable.getSelectionIndex());
}
});
}
}