package org.insightech.er.editor.view.dialog.element.table;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.insightech.er.common.dialog.AbstractDialog;
import org.insightech.er.common.exception.InputException;
import org.insightech.er.common.widgets.ValidatableTabWrapper;
import org.insightech.er.editor.model.ERDiagram;
import org.insightech.er.editor.model.diagram_contents.element.node.NodeSet;
import org.insightech.er.editor.model.diagram_contents.element.node.table.ERTable;
import org.insightech.er.editor.model.diagram_contents.not_element.group.GroupSet;
import org.insightech.er.editor.view.dialog.element.table.tab.AdvancedTabWrapper;
import org.insightech.er.editor.view.dialog.element.table.tab.AttributeTabWrapper;
import org.insightech.er.editor.view.dialog.element.table.tab.ComplexUniqueKeyTabWrapper;
import org.insightech.er.editor.view.dialog.element.table.tab.ConstraintTabWrapper;
import org.insightech.er.editor.view.dialog.element.table.tab.DescriptionTabWrapper;
import org.insightech.er.editor.view.dialog.element.table.tab.IndexTabWrapper;
public class TableDialog extends AbstractDialog {
private ERTable copyData;
private TabFolder tabFolder;
private EditPartViewer viewer;
private List<ValidatableTabWrapper> tabWrapperList;
public TableDialog(Shell parentShell, EditPartViewer viewer,
ERTable copyData, GroupSet columnGroups) {
super(parentShell);
this.viewer = viewer;
this.copyData = copyData;
this.tabWrapperList = new ArrayList<ValidatableTabWrapper>();
}
/**
* {@inheritDoc}
*/
@Override
protected void initialize(Composite composite) {
GridData gridData = new GridData();
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
gridData.verticalAlignment = GridData.FILL;
gridData.horizontalAlignment = GridData.FILL;
this.tabFolder = new TabFolder(composite, SWT.NONE);
this.tabFolder.setLayoutData(gridData);
final AttributeTabWrapper attributeTabWrapper = new AttributeTabWrapper(
this, tabFolder, SWT.NONE, this.copyData);
this.tabWrapperList.add(attributeTabWrapper);
this.tabWrapperList.add(new DescriptionTabWrapper(this, tabFolder,
SWT.NONE, this.copyData));
final ComplexUniqueKeyTabWrapper complexUniqueKeyTabWrapper = new ComplexUniqueKeyTabWrapper(
this, tabFolder, SWT.NONE, this.copyData);
this.tabWrapperList.add(complexUniqueKeyTabWrapper);
this.tabWrapperList.add(new ConstraintTabWrapper(this, tabFolder,
SWT.NONE, this.copyData));
final IndexTabWrapper indexTabWrapper = new IndexTabWrapper(this,
tabFolder, SWT.NONE, this.copyData);
this.tabWrapperList.add(indexTabWrapper);
this.tabWrapperList.add(new AdvancedTabWrapper(this, tabFolder,
SWT.NONE, this.copyData));
this.tabFolder.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
}
public void widgetSelected(SelectionEvent e) {
complexUniqueKeyTabWrapper.restruct();
indexTabWrapper.restruct();
int index = tabFolder.getSelectionIndex();
ValidatableTabWrapper selectedTabWrapper = tabWrapperList
.get(index);
selectedTabWrapper.setInitFocus();
}
});
attributeTabWrapper.setInitFocus();
}
/**
* {@inheritDoc}
*/
@Override
protected String getErrorMessage() {
try {
for (ValidatableTabWrapper tabWrapper : this.tabWrapperList) {
tabWrapper.validatePage();
}
} catch (InputException e) {
return e.getMessage();
}
return null;
}
/**
* {@inheritDoc}
*/
@Override
protected String getTitle() {
return "dialog.title.table";
}
@Override
protected void perfomeOK() throws InputException {
String physicalName = copyData.getPhysicalName();
int prefixPos = physicalName.indexOf('_');
if (prefixPos < 0) {
return;
}
String prefix = physicalName.substring(0, prefixPos + 1);
NodeSet nodeSet = copyData.getDiagram().getDiagramContents().getContents();
Map<MyColor, Integer> colors = new HashMap<MyColor, Integer>();
int sum = 0;
for (ERTable table : nodeSet.getTableSet()) {
if (table.getPhysicalName().startsWith(prefix)) {
MyColor mycolor = new MyColor(table.getColor());
if (colors.containsKey(mycolor)) {
Integer count = colors.get(mycolor);
colors.put(mycolor, count + 1);
} else {
colors.put(mycolor, 1);
}
++sum;
}
}
int[] targetColor = null;
for (Entry<MyColor, Integer> entry : colors.entrySet()) {
if (entry.getValue().intValue() >= sum - 1) {
targetColor = entry.getKey().getColors();
}
}
if (targetColor != null) {
copyData.setColor(targetColor[0], targetColor[1], targetColor[2]);
}
}
@Override
protected void setData() {
}
public EditPartViewer getViewer() {
return viewer;
}
public ERDiagram getDiagram() {
return (ERDiagram) this.viewer.getContents().getModel();
}
}