package org.insightech.er.editor.view.dialog.testdata.detail; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StackLayout; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; 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.Text; import org.insightech.er.common.dialog.AbstractDialog; import org.insightech.er.common.exception.InputException; import org.insightech.er.common.widgets.CompositeFactory; 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.RepeatTestDataDef; import org.insightech.er.editor.view.dialog.testdata.detail.tab.RepeatTestDataTabWrapper; import org.insightech.er.util.Format; public class RepeatTestDataSettingDialog extends AbstractDialog { private static final int LABEL_WIDTH = 90; private static final int NUM_WIDTH = 50; private StackLayout stackLayout; private Composite cardPanel; private Composite nonePanel; private Composite templatePanel; private Composite foreignKeyPanel; private Composite enumPanel; private Combo columnCombo; private Combo typeCombo; private Label repeatNumLabel; private Text repeatNum; private Text template; private Text from; private Text to; private Text increment; private Text selects; private RepeatTestDataDef dataDef; private RepeatTestDataTabWrapper repeatTestDataTabWrapper; private int columnIndex; private NormalColumn normalColumn; private ERTable table; private boolean createContents = false; public RepeatTestDataSettingDialog(Shell parentShell, int columnIndex, RepeatTestDataTabWrapper repeatTestDataTabWrapper, ERTable table) { super(parentShell, 2); this.repeatTestDataTabWrapper = repeatTestDataTabWrapper; this.table = table; this.columnIndex = columnIndex; } @Override protected void initialize(Composite composite) { CompositeFactory.createLabel(composite, "label.column", 1, LABEL_WIDTH); this.columnCombo = CompositeFactory.createReadOnlyCombo(this, composite, null); CompositeFactory.createLabel(composite, "label.testdata.repeat.type", 1, LABEL_WIDTH); this.typeCombo = CompositeFactory.createReadOnlyCombo(this, composite, null); this.repeatNumLabel = CompositeFactory.createLabel(composite, "label.testdata.repeat.num", 1, LABEL_WIDTH); this.repeatNum = CompositeFactory.createNumText(this, composite, null); this.initCardPanel(composite); this.initTypeCombo(); this.initColumnCombo(); } private void initColumnCombo() { for (NormalColumn normalColumn : this.table.getExpandedColumns()) { this.columnCombo.add(normalColumn.getName()); } } private void initTypeCombo() { this.typeCombo.add(RepeatTestDataDef.TYPE_NULL); this.typeCombo.add(RepeatTestDataDef.TYPE_FORMAT); normalColumn = table.getExpandedColumns().get(columnIndex); if (normalColumn.isForeignKey()) { this.typeCombo.add(RepeatTestDataDef.TYPE_FOREIGNKEY); } this.typeCombo.add(RepeatTestDataDef.TYPE_ENUM); } private void initCardPanel(Composite composite) { this.cardPanel = new Composite(composite, SWT.NONE); this.stackLayout = new StackLayout(); this.stackLayout.marginHeight = 0; this.stackLayout.marginWidth = 0; this.cardPanel.setLayout(this.stackLayout); GridData gridData = new GridData(); gridData.grabExcessHorizontalSpace = true; gridData.horizontalAlignment = GridData.FILL; gridData.horizontalSpan = 2; gridData.horizontalIndent = 0; gridData.verticalIndent = 0; this.cardPanel.setLayoutData(gridData); this.initNonePanel(); this.initTemplatePanel(); this.initForeignKeyPanel(); this.initEnumPanel(); } private void initNonePanel() { this.nonePanel = new Composite(this.cardPanel, SWT.NONE); } private void initTemplatePanel() { this.templatePanel = new Composite(this.cardPanel, SWT.NONE); GridLayout templatePanelLayout = new GridLayout(7, false); templatePanelLayout.marginHeight = 0; templatePanelLayout.marginWidth = 0; this.templatePanel.setLayout(templatePanelLayout); CompositeFactory.createLabel(templatePanel, "label.testdata.repeat.format", 1, LABEL_WIDTH); this.template = CompositeFactory.createText(this, templatePanel, null, 6, false); CompositeFactory.filler(templatePanel, 1); CompositeFactory.createExampleLabel(templatePanel, "label.testdata.repeat.comment", 6); CompositeFactory.filler(templatePanel, 1); CompositeFactory.createLabel(templatePanel, "label.testdata.repeat.start"); this.from = CompositeFactory.createNumText(this, templatePanel, null, NUM_WIDTH); CompositeFactory .createLabel(templatePanel, "label.testdata.repeat.end"); this.to = CompositeFactory.createNumText(this, templatePanel, null, NUM_WIDTH); CompositeFactory.createLabel(templatePanel, "label.testdata.repeat.increment"); this.increment = CompositeFactory.createNumText(this, templatePanel, null, NUM_WIDTH); } private void initForeignKeyPanel() { this.foreignKeyPanel = new Composite(this.cardPanel, SWT.NONE); this.foreignKeyPanel.setLayout(new GridLayout(2, false)); } private void initEnumPanel() { this.enumPanel = new Composite(this.cardPanel, SWT.NONE); GridLayout enumPanelLayout = new GridLayout(2, false); enumPanelLayout.marginHeight = 0; enumPanelLayout.marginWidth = 0; this.enumPanel.setLayout(enumPanelLayout); CompositeFactory.createLabel(enumPanel, "label.testdata.repeat.enum.values", 1, LABEL_WIDTH); this.selects = CompositeFactory.createTextArea(this, enumPanel, null, -1, 100, 1, false); } @Override protected Point getInitialLocation(Point initialSize) { Point location = super.getInitialLocation(initialSize); location.y = 70; return location; } @Override protected void setData() { this.initialized = false; normalColumn = table.getExpandedColumns().get(columnIndex); dataDef = repeatTestDataTabWrapper.getRepeatTestData().getDataDef( normalColumn); this.columnCombo.select(this.columnIndex); if (dataDef != null) { this.typeCombo.setText(dataDef.getType()); this.repeatNum.setText(Format.toString(dataDef.getRepeatNum())); this.template.setText(Format.toString(dataDef.getTemplate())); this.from.setText(Format.toString(dataDef.getFrom())); this.to.setText(Format.toString(dataDef.getTo())); this.increment.setText(Format.toString(dataDef.getIncrement())); StringBuilder sb = new StringBuilder(); for (String str : dataDef.getSelects()) { sb.append(str); sb.append("\r\n"); } this.selects.setText(sb.toString()); this.setCardPanel(this.typeCombo.getText()); } else { this.repeatNum.setText("1"); this.template.setText("value_%"); this.from.setText("1"); this.to.setText("5"); this.increment.setText("1"); this.selects .setText("value_1\r\nvalue_2\r\nvalue_3\r\nvalue_4\r\n"); } this.initialized = true; // this.validate(); } @Override protected String getTitle() { return "dialog.title.testdata.repetition.condition.setting"; } @Override protected String getErrorMessage() { if (this.createContents) { this.dataDef = this.getRepeatTestDataDef(); this.repeatTestDataTabWrapper.setRepeatTestDataDef( this.normalColumn, this.dataDef); this.repeatTestDataTabWrapper.initTableData(); } return null; } @Override protected void perfomeOK() throws InputException { } private RepeatTestDataDef getRepeatTestDataDef() { RepeatTestDataDef dataDef = new RepeatTestDataDef(); dataDef.setType(this.typeCombo.getText()); dataDef.setRepeatNum(this.getIntValue(this.repeatNum)); dataDef.setTemplate(this.template.getText()); dataDef.setFrom(this.getIntValue(this.from)); dataDef.setTo(this.getIntValue(this.to)); dataDef.setIncrement(this.getIntValue(this.increment)); String str = this.selects.getText(); BufferedReader reader = new BufferedReader(new StringReader(str)); String line = null; List<String> lines = new ArrayList<String>(); try { while ((line = reader.readLine()) != null) { lines.add(line); } } catch (IOException e) { } dataDef.setSelects(lines.toArray(new String[lines.size()])); return dataDef; } private int getIntValue(Text textField) { try { return Integer.parseInt(textField.getText().trim()); } catch (NumberFormatException e) { } return 0; } @Override protected void addListener() { super.addListener(); this.typeCombo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent selectionevent) { setCardPanel(typeCombo.getText()); } }); this.columnCombo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent selectionevent) { columnIndex = columnCombo.getSelectionIndex(); setData(); } }); } private void setCardPanel(String selectedType) { if (RepeatTestDataDef.TYPE_FORMAT.equals(selectedType)) { stackLayout.topControl = templatePanel; this.repeatNumLabel.setVisible(true); this.repeatNum.setVisible(true); cardPanel.layout(); } else if (RepeatTestDataDef.TYPE_FOREIGNKEY.equals(selectedType)) { stackLayout.topControl = foreignKeyPanel; this.repeatNumLabel.setVisible(true); this.repeatNum.setVisible(true); cardPanel.layout(); } else if (RepeatTestDataDef.TYPE_ENUM.equals(selectedType)) { stackLayout.topControl = enumPanel; this.repeatNumLabel.setVisible(true); this.repeatNum.setVisible(true); cardPanel.layout(); } else { stackLayout.topControl = nonePanel; this.repeatNumLabel.setVisible(false); this.repeatNum.setVisible(false); cardPanel.layout(); } } /** * {@inheritDoc} */ @Override protected void createButtonsForButtonBar(Composite parent) { this.createButton(parent, IDialogConstants.CLOSE_ID, IDialogConstants.CLOSE_LABEL, false); } @Override protected Control createContents(Composite parent) { Control control = super.createContents(parent); this.addListener(); this.validate(); this.createContents = true; return control; } }