package org.insightech.er.editor.view.dialog.testdata.detail.tab;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.Text;
import org.insightech.er.common.exception.InputException;
import org.insightech.er.common.widgets.CompositeFactory;
import org.insightech.er.common.widgets.RowHeaderTable;
import org.insightech.er.common.widgets.ValidatableTabWrapper;
import org.insightech.er.common.widgets.table.CellEditWorker;
import org.insightech.er.editor.model.diagram_contents.element.node.table.ERTable;
import org.insightech.er.editor.model.diagram_contents.element.node.table.column.NormalColumn;
import org.insightech.er.editor.model.testdata.DirectTestData;
import org.insightech.er.editor.view.dialog.testdata.detail.TestDataDialog;
import org.insightech.er.util.Format;
public class DirectTestDataTabWrapper extends ValidatableTabWrapper {
private TestDataDialog dialog;
private RowHeaderTable editColumnTable;
private DirectTestData directTestData;
private ERTable table;
public DirectTestDataTabWrapper(TestDataDialog dialog, TabFolder parent,
int style) {
super(dialog, parent, style, "label.testdata.direct.input");
this.dialog = dialog;
this.init();
}
@Override
public void initComposite() {
GridLayout layout = new GridLayout();
layout.numColumns = 2;
this.setLayout(layout);
Text dummy = CompositeFactory.createNumText(dialog, this, "", 50);
dummy.setVisible(false);
this.createEditTable(this);
}
private void createEditTable(Composite composite) {
this.editColumnTable = CompositeFactory.createRowHeaderTable(composite,
TestDataDialog.WIDTH - 20, TestDataDialog.TABLE_HEIGHT, 75, 25,
2, false, true);
this.editColumnTable.setCellEditWorker(new CellEditWorker() {
public void addNewRow() {
addNewRowToTable();
}
public void changeRowNum() {
dialog.resetTestDataNum();
}
public boolean isModified(int row, int column) {
return false;
}
});
}
@Override
protected void setData() {
}
/**
* {@inheritDoc}
*/
@Override
public void validatePage() throws InputException {
this.saveTableData();
}
@Override
public void setInitFocus() {
}
@Override
public void reset() {
saveTableData();
this.table = dialog.getTargetTable();
this.directTestData = dialog.getTestData().getTableTestDataMap().get(
this.table).getDirectTestData();
// �e�[�u���ύX
this.initTable();
}
private void saveTableData() {
if (this.directTestData != null) {
List<Map<NormalColumn, String>> dataList = new ArrayList<Map<NormalColumn, String>>();
List<NormalColumn> normalColumnList = this.table
.getExpandedColumns();
for (int row = 0; row < this.editColumnTable.getItemCount() - 1; row++) {
Map<NormalColumn, String> data = new HashMap<NormalColumn, String>();
for (int column = 0; column < normalColumnList.size(); column++) {
NormalColumn normalColumn = normalColumnList.get(column);
String value = (String) this.editColumnTable.getValueAt(
row, column);
data.put(normalColumn, value);
}
dataList.add(data);
}
this.directTestData.setDataList(dataList);
}
}
private void initTable() {
this.editColumnTable.setVisible(false);
this.editColumnTable.removeData();
for (NormalColumn normalColumn : this.table.getExpandedColumns()) {
String name = normalColumn.getName();
String type = null;
if (normalColumn.getType() == null) {
type = "";
} else {
type = Format.formatType(normalColumn.getType(), normalColumn
.getTypeData(), this.dialog.getDiagram().getDatabase());
}
this.editColumnTable.addColumnHeader(name + "\r\n" + type, 100);
}
for (Map<NormalColumn, String> data : directTestData.getDataList()) {
this.addTableItem(data);
}
// ��s
this.addNewRowToTable();
this.editColumnTable.setVisible(true);
}
private void addNewRowToTable() {
this.editColumnTable.addRow("+", null);
}
private void addTableItem(Map<NormalColumn, String> data) {
List<NormalColumn> columns = this.table.getExpandedColumns();
String[] values = new String[columns.size()];
for (int i = 0; i < columns.size(); i++) {
values[i] = data.get(columns.get(i));
}
this.editColumnTable.addRow(String.valueOf(this.editColumnTable
.getItemCount() + 1), values);
}
@Override
public void perfomeOK() {
}
public int getTestDataNum() {
return this.editColumnTable.getItemCount() - 1;
}
}