重构太经典了!
重构里面比较简单的又算是Extract Method,这是我的代码里的一个类,经过我Extract Method后,我自己是越看越喜欢:P
本来createControl方法看起来很晕得,重构够变得非常简单了,几乎不需要注释,每个方法名就是注释.
当然有时候Extract Method是很麻烦的,比如碰到很多其它外部变量时.
对于这个简单的例子,我的心得就是取个好的方法名!
/** */
/**
* @author Rey
*/
public class AutoSqlDataSetPage extends WizardPage ... {
public static final String ID = "AutoSqlDataSetPage";
private static final int OK = 0;
private static final int CANCEL = -1;
private List tableList = null;
private DataTable initDataTable = null, resultDataTable = null;
private TableViewer initTableViewer = null, resultTableViewer = null;
private String[] names = new String[] ...{ "" };
public AutoSqlDataSetPage() ...{
super(ID);
}
private int index = 1;// input
private int click = -1;
private Image image = null;
private int WIDTH = 40, HEIGHT = 40;
private Canvas canvas = null;
private ColumnMoveCommand columnMoveCommand = null;
public void createControl(final Composite parent) ...{
setTitle("AutoSqlDataSet Wizard");
setMessage("XXXXXXXXXXXXXXXX", IMessageProvider.INFORMATION);
Composite composite = new Composite(parent, SWT.NULL);
GridLayout glayout = new GridLayout(9, true);
composite.setLayout(glayout);
Composite mainBtnsComposite = createMainBtnsComposite(composite);
Button mainBtnAdd = createMainBtn(mainBtnsComposite, "Add");
Button mainBtnRemove = createMainBtn(mainBtnsComposite, "Remove");
Button mainBtnProperties = createMainBtn(mainBtnsComposite, "Properties");
Button mainBtnPreview = createMainBtn(mainBtnsComposite, "Preview");
createSeparator(composite);
createImage(composite);
createCanvas(composite);
addListener2Canvas(parent);
Table initTable = createTable(composite);
initTableViewer = new TableViewer(initTable);
initTableViewer.setContentProvider(new ColumnContentProvider());
initTableViewer.setLabelProvider(new ColumnLabelProvider());
Composite tableBtnsComposite = createTableBtnsComposite(composite);
final Button add = createTableBtn(tableBtnsComposite, ">>");
final Button remove = createTableBtn(tableBtnsComposite, "<<");
final Button addAll = createTableBtn(tableBtnsComposite, ">>>");
final Button removeAll = createTableBtn(tableBtnsComposite, "<<<");
final Button undo = createUndoAndRedoBtn(tableBtnsComposite, "undo");
final Button redo = createUndoAndRedoBtn(tableBtnsComposite, "redo");
Table resultTable = createTable(composite);
resultTableViewer = new TableViewer(resultTable);
resultTableViewer.setContentProvider(new ColumnContentProvider());
resultTableViewer.setLabelProvider(new ColumnLabelProvider());
/** *//***********************************************************************
* Main Btns' SelectionListener
**********************************************************************/
addListener2MainBtnAdd(parent, mainBtnAdd);
/** *//***********************************************************************
* Table and Column Btns' SelectionListener
**********************************************************************/
addListener2AddBtn(add, undo, redo);
addListener2RemoveBtn(remove, undo, redo);
addListener2UndoBtn(undo);
addListener2RedoBtn(redo);
addListener2AddAllBtn(addAll, undo, redo);
addListener2RemoveAllBtn(removeAll, undo, redo);
setControl(composite);
setPageComplete(true);
}
private Composite createMainBtnsComposite(Composite composite) ...{
GridLayout glayout;
Composite mainBtnsComposite = new Composite(composite, SWT.NULL);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 9;
mainBtnsComposite.setLayoutData(gd);
glayout = new GridLayout(9, true);
mainBtnsComposite.setLayout(glayout);
return mainBtnsComposite;
}
private Button createMainBtn(Composite mainBtnsComposite, String text) ...{
GridData gd;
Button mainBtnAdd = new Button(mainBtnsComposite, SWT.PUSH);
mainBtnAdd.setText(text);
gd = new GridData(GridData.FILL_HORIZONTAL);
mainBtnAdd.setLayoutData(gd);
return mainBtnAdd;
}
private void createSeparator(Composite composite) ...{
GridData gd;
Label label = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL);
gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gd.horizontalSpan = 9;
label.setLayoutData(gd);
}
private void createCanvas(Composite composite) ...{
GridData gd;
canvas = new Canvas(composite, SWT.NO_REDRAW_RESIZE | SWT.V_SCROLL
| SWT.H_SCROLL);
gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 9;
canvas.setLayoutData(gd);
}
private void addListener2Canvas(final Composite parent) ...{
final Point origin = new Point(0, 0);
final ScrollBar hBar = canvas.getHorizontalBar();
hBar.addListener(SWT.Selection, new Listener() ...{
public void handleEvent(Event e) ...{
int hSelection = hBar.getSelection();
int destX = -hSelection - origin.x;
Rectangle rect = image.getBounds();
canvas.scroll(destX, 0, 0, 0, rect.width, rect.height, false);
origin.x = -hSelection;
}
});
final ScrollBar vBar = canvas.getVerticalBar();
vBar.addListener(SWT.Selection, new Listener() ...{
public void handleEvent(Event e) ...{
int vSelection = vBar.getSelection();
int destY = -vSelection - origin.y;
Rectangle rect = image.getBounds();
canvas.scroll(0, destY, 0, 0, rect.width, rect.height, false);
origin.y = -vSelection;
}
});
canvas.addListener(SWT.Resize, new Listener() ...{
public void handleEvent(Event e) ...{
Rectangle rect = image.getBounds();
Rectangle client = canvas.getClientArea();
hBar.setMaximum(rect.width);
vBar.setMaximum(rect.height);
hBar.setThumb(Math.min(rect.width, client.width));
vBar.setThumb(Math.min(rect.height, client.height));
int hPage = rect.width - client.width;
int vPage = rect.height - client.height;
int hSelection = hBar.getSelection();
int vSelection = vBar.getSelection();
if (hSelection >= hPage) ...{
if (hPage <= 0)
hSelection = 0;
origin.x = -hSelection;
}
if (vSelection >= vPage) ...{
if (vPage <= 0)
vSelection = 0;
origin.y = -vSelection;
}
canvas.redraw();
}
});
canvas.addListener(SWT.Paint, new Listener() ...{
public void handleEvent(Event e) ...{
GC gc = e.gc;
gc.drawImage(image, origin.x, origin.y);
Rectangle rect = image.getBounds();
Rectangle client = canvas.getClientArea();
int marginWidth = client.width - rect.width;
if (marginWidth > 0) ...{
gc.fillRectangle(rect.width, 0, marginWidth, client.height);
}
int marginHeight = client.height - rect.height;
if (marginHeight > 0) ...{
gc
.fillRectangle(0, rect.height, client.width,
marginHeight);
}
}
});
canvas.addMouseListener(new MouseListener() ...{
public void mouseDown(MouseEvent e) ...{
int x = e.x, y = e.y;
int min = HEIGHT, max = HEIGHT + HEIGHT;
if (WIDTH < x && x < WIDTH + WIDTH) ...{
for (int i = 0; i < index; i++) ...{
if (min < y && y < max) ...{
click = i;
createImage(parent);
canvas.redraw();
break;
}
min = max + HEIGHT;
max = min + HEIGHT;
}
}
}
public void mouseDoubleClick(MouseEvent e) ...{
}
public void mouseUp(MouseEvent e) ...{
}
});
}
private void createImage(final Composite parent) ...{
int CANVAS_WIDTH = 3 * WIDTH, CANVAS_HEIGHT = (2 * index + 1) * HEIGHT;
image = new Image(parent.getDisplay(), CANVAS_WIDTH, CANVAS_HEIGHT);
GC gc = new GC(image);
drawTable(parent, gc, names);
drawLine(gc);
gc.dispose();
}
private void drawLine(GC gc) ...{
for (int i = 0, x = (int) (WIDTH + 0.5 * WIDTH), y = 2 * HEIGHT; i < index - 1; i++) ...{
gc.drawLine(x, y, x, y + HEIGHT);
y = y + HEIGHT;
y += HEIGHT;
}
}
private void drawTable(final Composite parent, GC gc, String[] name) ...{
for (int i = 0, x = WIDTH, y = HEIGHT; i < index; i++) ...{
if (i > 0)
y += 2 * HEIGHT;
if (i == click) ...{
gc.drawRectangle(x, y, WIDTH, HEIGHT);
gc.setBackground(parent.getShell().getDisplay().getSystemColor(
SWT.COLOR_CYAN));
gc.fillRectangle(x + 1, y + 1, WIDTH - 1, HEIGHT - 1);
gc.drawText(name[i], x + 5, y + 5);
} else ...{
gc.setBackground(parent.getShell().getDisplay().getSystemColor(
SWT.COLOR_WHITE));
gc.drawRectangle(x, y, WIDTH, HEIGHT);
gc.drawText(name[i], x + 5, y + 5);
}
}
}
private Table createTable(Composite composite) ...{
Table table = new Table(composite, SWT.MULTI | SWT.FULL_SELECTION
| SWT.BORDER);
GridData gd;
TableColumn tc = new TableColumn(table, SWT.LEFT);
tc.setWidth(100);
tc.setText("name");
tc = new TableColumn(table, SWT.LEFT);
tc.setWidth(100);
tc.setText("type");
table.setHeaderVisible(true);
table.setLinesVisible(true);
gd = new GridData();
gd.horizontalAlignment = GridData.FILL;
gd.verticalAlignment = GridData.FILL;
gd.grabExcessHorizontalSpace = true;
gd.horizontalSpan = 4;
table.setLayoutData(gd);
return table;
}
private Composite createTableBtnsComposite(Composite composite) ...{
GridLayout glayout;
GridData gd;
Composite tableBtnsComposite = new Composite(composite, SWT.NULL);
gd = new GridData(GridData.FILL_VERTICAL);
gd.horizontalAlignment = GridData.FILL;
gd.horizontalSpan = 1;
tableBtnsComposite.setLayoutData(gd);
glayout = new GridLayout(1, true);
tableBtnsComposite.setLayout(glayout);
return tableBtnsComposite;
}
private Button createTableBtn(Composite tableBtnsComposite, String text) ...{
GridData gd;
Button btn = new Button(tableBtnsComposite, SWT.PUSH);
btn.setText(text);
gd = new GridData(GridData.FILL_HORIZONTAL);
btn.setLayoutData(gd);
return btn;
}
private Button createUndoAndRedoBtn(Composite tableBtnsComposite,
String text) ...{
GridData gd;
final Button btn = new Button(tableBtnsComposite, SWT.PUSH);
btn.setText(text);
btn.setEnabled(false);
gd = new GridData(GridData.FILL_HORIZONTAL);
btn.setLayoutData(gd);
return btn;
}
private void addListener2MainBtnAdd(final Composite parent,
Button mainBtnAdd) ...{
mainBtnAdd.addSelectionListener(new SelectionAdapter() ...{
@Override
public void widgetSelected(SelectionEvent e) ...{
// TODO
SelectJoinTableDialog sjtd = new SelectJoinTableDialog(parent
.getShell());
sjtd.setInput(tableList);
sjtd.open();
int returnCode = sjtd.getReturnCode();
if (returnCode == OK) ...{
Object[] result = sjtd.getResult();
DataTable dt = (DataTable) result[0];
index++;
createImage(parent);
canvas.redraw();
}
}
});
}
private void addListener2AddBtn(Button add, final Button undo,
final Button redo) ...{
add.addSelectionListener(new SelectionAdapter() ...{
@Override
public void widgetSelected(SelectionEvent e) ...{
StructuredSelection selection = (StructuredSelection) initTableViewer
.getSelection();
columnMoveCommand = new ColumnMoveCommand(initDataTable,
resultDataTable, selection);
columnMoveCommand.execute();
undo.setEnabled(true);
redo.setEnabled(true);
}
});
}
private void addListener2RemoveBtn(Button remove, final Button undo,
final Button redo) ...{
remove.addSelectionListener(new SelectionAdapter() ...{
@Override
public void widgetSelected(SelectionEvent e) ...{
StructuredSelection selection = (StructuredSelection) resultTableViewer
.getSelection();
columnMoveCommand = new ColumnMoveCommand(resultDataTable,
initDataTable, selection);
columnMoveCommand.execute();
undo.setEnabled(true);
redo.setEnabled(true);
}
});
}
private void addListener2UndoBtn(final Button undo) ...{
undo.addSelectionListener(new SelectionAdapter() ...{
@Override
public void widgetSelected(SelectionEvent e) ...{
columnMoveCommand.undo();
}
});
}
private void addListener2RedoBtn(final Button redo) ...{
redo.addSelectionListener(new SelectionAdapter() ...{
@Override
public void widgetSelected(SelectionEvent e) ...{
columnMoveCommand.redo();
}
});
}
private void addListener2AddAllBtn(Button addAll, final Button undo,
final Button redo) ...{
addAll.addSelectionListener(new SelectionAdapter() ...{
@Override
public void widgetSelected(SelectionEvent e) ...{
columnMoveCommand = new ColumnMoveCommand(initDataTable,
resultDataTable);
columnMoveCommand.execute();
undo.setEnabled(true);
redo.setEnabled(true);
}
});
}
private void addListener2RemoveAllBtn(Button removeAll, final Button undo,
final Button redo) ...{
removeAll.addSelectionListener(new SelectionAdapter() ...{
@Override
public void widgetSelected(SelectionEvent e) ...{
columnMoveCommand = new ColumnMoveCommand(resultDataTable,
initDataTable);
columnMoveCommand.execute();
undo.setEnabled(true);
redo.setEnabled(true);
}
});
}
public void onEnterPage() ...{
AutoDataSetWizardController controller = ((AutoDataSetWizard) getWizard())
.getController();
tableList = controller.getTableList();
initDataTable = controller.getSelectedTable();
initTableViewer.setInput(initDataTable);
resultDataTable = DoradoFactory.eINSTANCE.createDataTable();
resultTableViewer.setInput(resultDataTable);
setNames();
redrawImage();
}
private void setNames() ...{
names = new String[tableList.size()];
int i = 0;
for (Iterator it = tableList.iterator(); it.hasNext(); i++) ...{
DataTable table = (DataTable) it.next();
names[i] = table.getName();
}
}
private void redrawImage() ...{
Composite parent = canvas.getParent();
createImage(parent);
canvas.redraw();
}
private class ColumnContentProvider implements IStructuredContentProvider ...{
public Object[] getElements(Object inputElement) ...{
DataTable table = (DataTable) inputElement;
return table.getColumns().toArray();
}
public void dispose() ...{
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) ...{
}
}
private class ColumnLabelProvider implements ITableLabelProvider ...{
public Image getColumnImage(Object element, int columnIndex) ...{
return null;
}
public String getColumnText(Object element, int columnIndex) ...{
Column column = (Column) element;
String text = "";
switch (columnIndex) ...{
case 0:
text = column.getName();
break;
case 1:
text = column.getType();
break;
}
return text;
}
public void addListener(ILabelProviderListener listener) ...{
}
public void dispose() ...{
}
public boolean isLabelProperty(Object element, String property) ...{
return false;
}
public void removeListener(ILabelProviderListener listener) ...{
}
}
private class ColumnMoveCommand ...{
DataTable src, dest;
List columns;
StructuredSelection selection;
public ColumnMoveCommand(DataTable src, DataTable dest) ...{
this.src = src;
this.dest = dest;
columns = new ArrayList();
for (Iterator it = src.getColumns().iterator(); it.hasNext();) ...{
Column column = (Column) it.next();
columns.add(column);
}
}
public ColumnMoveCommand(DataTable src, DataTable dest,
StructuredSelection selection) ...{
this.src = src;
this.dest = dest;
this.selection = selection;
columns = new ArrayList();
for (Iterator it = selection.iterator(); it.hasNext();) ...{
Column column = (Column) it.next();
columns.add(column);
}
}
public void execute() ...{
for (Iterator it = columns.iterator(); it.hasNext();) ...{
Column c = (Column) it.next();
src.getColumns().remove(c);
dest.getColumns().add(c);
}
refreshTable();
}
public void undo() ...{
for (Iterator it = columns.iterator(); it.hasNext();) ...{
Column c = (Column) it.next();
src.getColumns().add(c);
dest.getColumns().remove(c);
}
refreshTable();
}
public void redo() ...{
execute();
}
private void refreshTable() ...{
initTableViewer.refresh();
resultTableViewer.refresh();
}
}
}
* @author Rey
*/
public class AutoSqlDataSetPage extends WizardPage ... {
public static final String ID = "AutoSqlDataSetPage";
private static final int OK = 0;
private static final int CANCEL = -1;
private List tableList = null;
private DataTable initDataTable = null, resultDataTable = null;
private TableViewer initTableViewer = null, resultTableViewer = null;
private String[] names = new String[] ...{ "" };
public AutoSqlDataSetPage() ...{
super(ID);
}
private int index = 1;// input
private int click = -1;
private Image image = null;
private int WIDTH = 40, HEIGHT = 40;
private Canvas canvas = null;
private ColumnMoveCommand columnMoveCommand = null;
public void createControl(final Composite parent) ...{
setTitle("AutoSqlDataSet Wizard");
setMessage("XXXXXXXXXXXXXXXX", IMessageProvider.INFORMATION);
Composite composite = new Composite(parent, SWT.NULL);
GridLayout glayout = new GridLayout(9, true);
composite.setLayout(glayout);
Composite mainBtnsComposite = createMainBtnsComposite(composite);
Button mainBtnAdd = createMainBtn(mainBtnsComposite, "Add");
Button mainBtnRemove = createMainBtn(mainBtnsComposite, "Remove");
Button mainBtnProperties = createMainBtn(mainBtnsComposite, "Properties");
Button mainBtnPreview = createMainBtn(mainBtnsComposite, "Preview");
createSeparator(composite);
createImage(composite);
createCanvas(composite);
addListener2Canvas(parent);
Table initTable = createTable(composite);
initTableViewer = new TableViewer(initTable);
initTableViewer.setContentProvider(new ColumnContentProvider());
initTableViewer.setLabelProvider(new ColumnLabelProvider());
Composite tableBtnsComposite = createTableBtnsComposite(composite);
final Button add = createTableBtn(tableBtnsComposite, ">>");
final Button remove = createTableBtn(tableBtnsComposite, "<<");
final Button addAll = createTableBtn(tableBtnsComposite, ">>>");
final Button removeAll = createTableBtn(tableBtnsComposite, "<<<");
final Button undo = createUndoAndRedoBtn(tableBtnsComposite, "undo");
final Button redo = createUndoAndRedoBtn(tableBtnsComposite, "redo");
Table resultTable = createTable(composite);
resultTableViewer = new TableViewer(resultTable);
resultTableViewer.setContentProvider(new ColumnContentProvider());
resultTableViewer.setLabelProvider(new ColumnLabelProvider());
/** *//***********************************************************************
* Main Btns' SelectionListener
**********************************************************************/
addListener2MainBtnAdd(parent, mainBtnAdd);
/** *//***********************************************************************
* Table and Column Btns' SelectionListener
**********************************************************************/
addListener2AddBtn(add, undo, redo);
addListener2RemoveBtn(remove, undo, redo);
addListener2UndoBtn(undo);
addListener2RedoBtn(redo);
addListener2AddAllBtn(addAll, undo, redo);
addListener2RemoveAllBtn(removeAll, undo, redo);
setControl(composite);
setPageComplete(true);
}
private Composite createMainBtnsComposite(Composite composite) ...{
GridLayout glayout;
Composite mainBtnsComposite = new Composite(composite, SWT.NULL);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 9;
mainBtnsComposite.setLayoutData(gd);
glayout = new GridLayout(9, true);
mainBtnsComposite.setLayout(glayout);
return mainBtnsComposite;
}
private Button createMainBtn(Composite mainBtnsComposite, String text) ...{
GridData gd;
Button mainBtnAdd = new Button(mainBtnsComposite, SWT.PUSH);
mainBtnAdd.setText(text);
gd = new GridData(GridData.FILL_HORIZONTAL);
mainBtnAdd.setLayoutData(gd);
return mainBtnAdd;
}
private void createSeparator(Composite composite) ...{
GridData gd;
Label label = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL);
gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gd.horizontalSpan = 9;
label.setLayoutData(gd);
}
private void createCanvas(Composite composite) ...{
GridData gd;
canvas = new Canvas(composite, SWT.NO_REDRAW_RESIZE | SWT.V_SCROLL
| SWT.H_SCROLL);
gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 9;
canvas.setLayoutData(gd);
}
private void addListener2Canvas(final Composite parent) ...{
final Point origin = new Point(0, 0);
final ScrollBar hBar = canvas.getHorizontalBar();
hBar.addListener(SWT.Selection, new Listener() ...{
public void handleEvent(Event e) ...{
int hSelection = hBar.getSelection();
int destX = -hSelection - origin.x;
Rectangle rect = image.getBounds();
canvas.scroll(destX, 0, 0, 0, rect.width, rect.height, false);
origin.x = -hSelection;
}
});
final ScrollBar vBar = canvas.getVerticalBar();
vBar.addListener(SWT.Selection, new Listener() ...{
public void handleEvent(Event e) ...{
int vSelection = vBar.getSelection();
int destY = -vSelection - origin.y;
Rectangle rect = image.getBounds();
canvas.scroll(0, destY, 0, 0, rect.width, rect.height, false);
origin.y = -vSelection;
}
});
canvas.addListener(SWT.Resize, new Listener() ...{
public void handleEvent(Event e) ...{
Rectangle rect = image.getBounds();
Rectangle client = canvas.getClientArea();
hBar.setMaximum(rect.width);
vBar.setMaximum(rect.height);
hBar.setThumb(Math.min(rect.width, client.width));
vBar.setThumb(Math.min(rect.height, client.height));
int hPage = rect.width - client.width;
int vPage = rect.height - client.height;
int hSelection = hBar.getSelection();
int vSelection = vBar.getSelection();
if (hSelection >= hPage) ...{
if (hPage <= 0)
hSelection = 0;
origin.x = -hSelection;
}
if (vSelection >= vPage) ...{
if (vPage <= 0)
vSelection = 0;
origin.y = -vSelection;
}
canvas.redraw();
}
});
canvas.addListener(SWT.Paint, new Listener() ...{
public void handleEvent(Event e) ...{
GC gc = e.gc;
gc.drawImage(image, origin.x, origin.y);
Rectangle rect = image.getBounds();
Rectangle client = canvas.getClientArea();
int marginWidth = client.width - rect.width;
if (marginWidth > 0) ...{
gc.fillRectangle(rect.width, 0, marginWidth, client.height);
}
int marginHeight = client.height - rect.height;
if (marginHeight > 0) ...{
gc
.fillRectangle(0, rect.height, client.width,
marginHeight);
}
}
});
canvas.addMouseListener(new MouseListener() ...{
public void mouseDown(MouseEvent e) ...{
int x = e.x, y = e.y;
int min = HEIGHT, max = HEIGHT + HEIGHT;
if (WIDTH < x && x < WIDTH + WIDTH) ...{
for (int i = 0; i < index; i++) ...{
if (min < y && y < max) ...{
click = i;
createImage(parent);
canvas.redraw();
break;
}
min = max + HEIGHT;
max = min + HEIGHT;
}
}
}
public void mouseDoubleClick(MouseEvent e) ...{
}
public void mouseUp(MouseEvent e) ...{
}
});
}
private void createImage(final Composite parent) ...{
int CANVAS_WIDTH = 3 * WIDTH, CANVAS_HEIGHT = (2 * index + 1) * HEIGHT;
image = new Image(parent.getDisplay(), CANVAS_WIDTH, CANVAS_HEIGHT);
GC gc = new GC(image);
drawTable(parent, gc, names);
drawLine(gc);
gc.dispose();
}
private void drawLine(GC gc) ...{
for (int i = 0, x = (int) (WIDTH + 0.5 * WIDTH), y = 2 * HEIGHT; i < index - 1; i++) ...{
gc.drawLine(x, y, x, y + HEIGHT);
y = y + HEIGHT;
y += HEIGHT;
}
}
private void drawTable(final Composite parent, GC gc, String[] name) ...{
for (int i = 0, x = WIDTH, y = HEIGHT; i < index; i++) ...{
if (i > 0)
y += 2 * HEIGHT;
if (i == click) ...{
gc.drawRectangle(x, y, WIDTH, HEIGHT);
gc.setBackground(parent.getShell().getDisplay().getSystemColor(
SWT.COLOR_CYAN));
gc.fillRectangle(x + 1, y + 1, WIDTH - 1, HEIGHT - 1);
gc.drawText(name[i], x + 5, y + 5);
} else ...{
gc.setBackground(parent.getShell().getDisplay().getSystemColor(
SWT.COLOR_WHITE));
gc.drawRectangle(x, y, WIDTH, HEIGHT);
gc.drawText(name[i], x + 5, y + 5);
}
}
}
private Table createTable(Composite composite) ...{
Table table = new Table(composite, SWT.MULTI | SWT.FULL_SELECTION
| SWT.BORDER);
GridData gd;
TableColumn tc = new TableColumn(table, SWT.LEFT);
tc.setWidth(100);
tc.setText("name");
tc = new TableColumn(table, SWT.LEFT);
tc.setWidth(100);
tc.setText("type");
table.setHeaderVisible(true);
table.setLinesVisible(true);
gd = new GridData();
gd.horizontalAlignment = GridData.FILL;
gd.verticalAlignment = GridData.FILL;
gd.grabExcessHorizontalSpace = true;
gd.horizontalSpan = 4;
table.setLayoutData(gd);
return table;
}
private Composite createTableBtnsComposite(Composite composite) ...{
GridLayout glayout;
GridData gd;
Composite tableBtnsComposite = new Composite(composite, SWT.NULL);
gd = new GridData(GridData.FILL_VERTICAL);
gd.horizontalAlignment = GridData.FILL;
gd.horizontalSpan = 1;
tableBtnsComposite.setLayoutData(gd);
glayout = new GridLayout(1, true);
tableBtnsComposite.setLayout(glayout);
return tableBtnsComposite;
}
private Button createTableBtn(Composite tableBtnsComposite, String text) ...{
GridData gd;
Button btn = new Button(tableBtnsComposite, SWT.PUSH);
btn.setText(text);
gd = new GridData(GridData.FILL_HORIZONTAL);
btn.setLayoutData(gd);
return btn;
}
private Button createUndoAndRedoBtn(Composite tableBtnsComposite,
String text) ...{
GridData gd;
final Button btn = new Button(tableBtnsComposite, SWT.PUSH);
btn.setText(text);
btn.setEnabled(false);
gd = new GridData(GridData.FILL_HORIZONTAL);
btn.setLayoutData(gd);
return btn;
}
private void addListener2MainBtnAdd(final Composite parent,
Button mainBtnAdd) ...{
mainBtnAdd.addSelectionListener(new SelectionAdapter() ...{
@Override
public void widgetSelected(SelectionEvent e) ...{
// TODO
SelectJoinTableDialog sjtd = new SelectJoinTableDialog(parent
.getShell());
sjtd.setInput(tableList);
sjtd.open();
int returnCode = sjtd.getReturnCode();
if (returnCode == OK) ...{
Object[] result = sjtd.getResult();
DataTable dt = (DataTable) result[0];
index++;
createImage(parent);
canvas.redraw();
}
}
});
}
private void addListener2AddBtn(Button add, final Button undo,
final Button redo) ...{
add.addSelectionListener(new SelectionAdapter() ...{
@Override
public void widgetSelected(SelectionEvent e) ...{
StructuredSelection selection = (StructuredSelection) initTableViewer
.getSelection();
columnMoveCommand = new ColumnMoveCommand(initDataTable,
resultDataTable, selection);
columnMoveCommand.execute();
undo.setEnabled(true);
redo.setEnabled(true);
}
});
}
private void addListener2RemoveBtn(Button remove, final Button undo,
final Button redo) ...{
remove.addSelectionListener(new SelectionAdapter() ...{
@Override
public void widgetSelected(SelectionEvent e) ...{
StructuredSelection selection = (StructuredSelection) resultTableViewer
.getSelection();
columnMoveCommand = new ColumnMoveCommand(resultDataTable,
initDataTable, selection);
columnMoveCommand.execute();
undo.setEnabled(true);
redo.setEnabled(true);
}
});
}
private void addListener2UndoBtn(final Button undo) ...{
undo.addSelectionListener(new SelectionAdapter() ...{
@Override
public void widgetSelected(SelectionEvent e) ...{
columnMoveCommand.undo();
}
});
}
private void addListener2RedoBtn(final Button redo) ...{
redo.addSelectionListener(new SelectionAdapter() ...{
@Override
public void widgetSelected(SelectionEvent e) ...{
columnMoveCommand.redo();
}
});
}
private void addListener2AddAllBtn(Button addAll, final Button undo,
final Button redo) ...{
addAll.addSelectionListener(new SelectionAdapter() ...{
@Override
public void widgetSelected(SelectionEvent e) ...{
columnMoveCommand = new ColumnMoveCommand(initDataTable,
resultDataTable);
columnMoveCommand.execute();
undo.setEnabled(true);
redo.setEnabled(true);
}
});
}
private void addListener2RemoveAllBtn(Button removeAll, final Button undo,
final Button redo) ...{
removeAll.addSelectionListener(new SelectionAdapter() ...{
@Override
public void widgetSelected(SelectionEvent e) ...{
columnMoveCommand = new ColumnMoveCommand(resultDataTable,
initDataTable);
columnMoveCommand.execute();
undo.setEnabled(true);
redo.setEnabled(true);
}
});
}
public void onEnterPage() ...{
AutoDataSetWizardController controller = ((AutoDataSetWizard) getWizard())
.getController();
tableList = controller.getTableList();
initDataTable = controller.getSelectedTable();
initTableViewer.setInput(initDataTable);
resultDataTable = DoradoFactory.eINSTANCE.createDataTable();
resultTableViewer.setInput(resultDataTable);
setNames();
redrawImage();
}
private void setNames() ...{
names = new String[tableList.size()];
int i = 0;
for (Iterator it = tableList.iterator(); it.hasNext(); i++) ...{
DataTable table = (DataTable) it.next();
names[i] = table.getName();
}
}
private void redrawImage() ...{
Composite parent = canvas.getParent();
createImage(parent);
canvas.redraw();
}
private class ColumnContentProvider implements IStructuredContentProvider ...{
public Object[] getElements(Object inputElement) ...{
DataTable table = (DataTable) inputElement;
return table.getColumns().toArray();
}
public void dispose() ...{
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) ...{
}
}
private class ColumnLabelProvider implements ITableLabelProvider ...{
public Image getColumnImage(Object element, int columnIndex) ...{
return null;
}
public String getColumnText(Object element, int columnIndex) ...{
Column column = (Column) element;
String text = "";
switch (columnIndex) ...{
case 0:
text = column.getName();
break;
case 1:
text = column.getType();
break;
}
return text;
}
public void addListener(ILabelProviderListener listener) ...{
}
public void dispose() ...{
}
public boolean isLabelProperty(Object element, String property) ...{
return false;
}
public void removeListener(ILabelProviderListener listener) ...{
}
}
private class ColumnMoveCommand ...{
DataTable src, dest;
List columns;
StructuredSelection selection;
public ColumnMoveCommand(DataTable src, DataTable dest) ...{
this.src = src;
this.dest = dest;
columns = new ArrayList();
for (Iterator it = src.getColumns().iterator(); it.hasNext();) ...{
Column column = (Column) it.next();
columns.add(column);
}
}
public ColumnMoveCommand(DataTable src, DataTable dest,
StructuredSelection selection) ...{
this.src = src;
this.dest = dest;
this.selection = selection;
columns = new ArrayList();
for (Iterator it = selection.iterator(); it.hasNext();) ...{
Column column = (Column) it.next();
columns.add(column);
}
}
public void execute() ...{
for (Iterator it = columns.iterator(); it.hasNext();) ...{
Column c = (Column) it.next();
src.getColumns().remove(c);
dest.getColumns().add(c);
}
refreshTable();
}
public void undo() ...{
for (Iterator it = columns.iterator(); it.hasNext();) ...{
Column c = (Column) it.next();
src.getColumns().add(c);
dest.getColumns().remove(c);
}
refreshTable();
}
public void redo() ...{
execute();
}
private void refreshTable() ...{
initTableViewer.refresh();
resultTableViewer.refresh();
}
}
}