package org.insightech.er.editor.view.dialog.tracking;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.commands.Command;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
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.Control;
import org.eclipse.swt.widgets.MessageBox;
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.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;
import org.insightech.er.ResourceString;
import org.insightech.er.common.widgets.CompositeFactory;
import org.insightech.er.editor.controller.command.tracking.AddChangeTrackingCommand;
import org.insightech.er.editor.controller.command.tracking.CalculateChangeTrackingCommand;
import org.insightech.er.editor.controller.command.tracking.ChangeTrackingCommand;
import org.insightech.er.editor.controller.command.tracking.DeleteChangeTrackingCommand;
import org.insightech.er.editor.controller.command.tracking.ResetChangeTrackingCommand;
import org.insightech.er.editor.controller.command.tracking.UpdateChangeTrackingCommand;
import org.insightech.er.editor.model.ERDiagram;
import org.insightech.er.editor.model.diagram_contents.element.node.NodeSet;
import org.insightech.er.editor.model.tracking.ChangeTracking;
import org.insightech.er.util.Check;
public class ChangeTrackingDialog extends Dialog {
private static final DateFormat DATE_FORMAT = new SimpleDateFormat(
"yyyy/MM/dd HH:mm:ss");
private Table changeTrackingTable;
private Text textArea = null;
private Button registerButton;
private Button updateButton;
private Button deleteButton;
private Button replaceButton;
private Button comparisonDisplayButton;
private Button comparisonResetButton;
private GraphicalViewer viewer;
private ERDiagram diagram;
public ChangeTrackingDialog(Shell parentShell, GraphicalViewer viewer,
ERDiagram diagram) {
super(parentShell);
this.viewer = viewer;
this.diagram = diagram;
}
/**
* {@inheritDoc}
*/
@Override
protected Control createDialogArea(Composite parent) {
this.getShell().setText(
ResourceString
.getResourceString("dialog.title.change.tracking"));
Composite composite = (Composite) super.createDialogArea(parent);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 6;
composite.setLayout(gridLayout);
this.initialize(composite);
this.setData();
return composite;
}
private void initialize(Composite composite) {
GridData tableGridData = new GridData();
tableGridData.widthHint = 520;
tableGridData.horizontalSpan = 6;
tableGridData.heightHint = 150;
this.changeTrackingTable = new Table(composite, SWT.BORDER | SWT.SINGLE
| SWT.FULL_SELECTION);
this.changeTrackingTable.setHeaderVisible(true);
this.changeTrackingTable.setLayoutData(tableGridData);
this.changeTrackingTable.setLinesVisible(true);
CompositeFactory.createLabel(composite, "label.contents.of.change", 6);
this.textArea = CompositeFactory.createTextArea(null, composite, null,
-1, 100, 6, true);
this.registerButton = new Button(composite, SWT.NONE);
this.registerButton.setText(ResourceString
.getResourceString("label.button.register"));
this.updateButton = new Button(composite, SWT.NONE);
this.updateButton.setText(ResourceString
.getResourceString("label.button.update"));
this.deleteButton = new Button(composite, SWT.NONE);
this.deleteButton.setText(ResourceString
.getResourceString("label.button.delete"));
this.replaceButton = new Button(composite, SWT.NONE);
this.replaceButton.setText(ResourceString
.getResourceString("label.button.change.tracking"));
this.comparisonDisplayButton = new Button(composite, SWT.NONE);
this.comparisonDisplayButton.setText(ResourceString
.getResourceString("label.button.comparison.display"));
this.comparisonResetButton = new Button(composite, SWT.NONE);
this.comparisonResetButton.setText(ResourceString
.getResourceString("label.button.comparison.reset"));
TableColumn tableColumn0 = new TableColumn(this.changeTrackingTable,
SWT.LEFT);
tableColumn0.setWidth(150);
tableColumn0.setText(ResourceString.getResourceString("label.date"));
TableColumn tableColumn1 = new TableColumn(this.changeTrackingTable,
SWT.LEFT);
tableColumn1.setWidth(400);
tableColumn1.setText(ResourceString
.getResourceString("label.contents.of.change"));
this.changeTrackingTable.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(SelectionEvent e) {
int index = changeTrackingTable.getSelectionIndex();
if (index == -1) {
return;
}
selectChangeTracking(index);
}
});
this.registerButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(SelectionEvent e) {
ChangeTracking changeTracking = new ChangeTracking(diagram
.getDiagramContents());
changeTracking.setComment(textArea.getText());
Command command = new AddChangeTrackingCommand(diagram,
changeTracking);
viewer.getEditDomain().getCommandStack().execute(command);
int index = changeTrackingTable.getItemCount();
setData();
selectChangeTracking(index);
}
});
this.updateButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(SelectionEvent e) {
int index = changeTrackingTable.getSelectionIndex();
if (index == -1) {
return;
}
ChangeTracking changeTracking = diagram.getChangeTrackingList()
.get(index);
Command command = new UpdateChangeTrackingCommand(
changeTracking, textArea.getText());
viewer.getEditDomain().getCommandStack().execute(command);
setData();
selectChangeTracking(index);
}
});
this.deleteButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(SelectionEvent e) {
int index = changeTrackingTable.getSelectionIndex();
if (index == -1) {
return;
}
Command command = new DeleteChangeTrackingCommand(diagram,
index);
viewer.getEditDomain().getCommandStack().execute(command);
setData();
if (index >= changeTrackingTable.getItemCount()) {
index = changeTrackingTable.getItemCount() - 1;
}
selectChangeTracking(index);
}
});
this.replaceButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(SelectionEvent e) {
int index = changeTrackingTable.getSelectionIndex();
if (index == -1) {
return;
}
MessageBox messageBox = new MessageBox(PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getShell(),
SWT.ICON_QUESTION | SWT.YES | SWT.NO);
messageBox.setText(ResourceString
.getResourceString("dialog.title.change.tracking"));
messageBox.setMessage(ResourceString
.getResourceString("dialog.message.change.tracking"));
if (messageBox.open() == SWT.YES) {
ChangeTracking changeTracking = new ChangeTracking(diagram
.getDiagramContents());
changeTracking.setComment("");
diagram.getChangeTrackingList().addChangeTracking(
changeTracking);
setData();
changeTrackingTable.select(index);
}
ChangeTracking changeTracking = diagram.getChangeTrackingList()
.get(index);
ChangeTracking copy = new ChangeTracking(changeTracking
.getDiagramContents());
Command command = new ChangeTrackingCommand(diagram, copy
.getDiagramContents());
viewer.getEditDomain().getCommandStack().execute(command);
}
});
this.comparisonDisplayButton
.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(SelectionEvent e) {
int index = changeTrackingTable.getSelectionIndex();
if (index == -1) {
return;
}
ChangeTracking changeTracking = diagram
.getChangeTrackingList().get(index);
NodeSet nodeElementList = changeTracking
.getDiagramContents().getContents();
Command command = new CalculateChangeTrackingCommand(
diagram, nodeElementList);
viewer.getEditDomain().getCommandStack().execute(
command);
comparisonResetButton.setEnabled(true);
}
});
this.comparisonResetButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(SelectionEvent e) {
Command command = new ResetChangeTrackingCommand(diagram);
viewer.getEditDomain().getCommandStack().execute(command);
comparisonResetButton.setEnabled(false);
}
});
this.textArea.setFocus();
}
/**
* {@inheritDoc}
*/
@Override
protected void createButtonsForButtonBar(Composite parent) {
this.createButton(parent, IDialogConstants.CLOSE_ID,
IDialogConstants.CLOSE_LABEL, false);
}
/**
* {@inheritDoc}
*/
@Override
protected void buttonPressed(int buttonId) {
if (buttonId == IDialogConstants.CLOSE_ID) {
setReturnCode(buttonId);
close();
}
super.buttonPressed(buttonId);
}
private void setData() {
this.changeTrackingTable.removeAll();
this.setButtonEnabled(false);
this.comparisonDisplayButton.setEnabled(false);
for (ChangeTracking changeTracking : this.diagram
.getChangeTrackingList().getList()) {
TableItem tableItem = new TableItem(this.changeTrackingTable,
SWT.NONE);
String date = DATE_FORMAT.format(changeTracking.getUpdatedDate());
tableItem.setText(0, date);
if (!Check.isEmpty(changeTracking.getComment())) {
tableItem.setText(1, changeTracking.getComment());
} else {
tableItem.setText(1, "*** empty log message ***");
}
}
this.comparisonResetButton.setEnabled(this.diagram
.getChangeTrackingList().isCalculated());
}
private void setButtonEnabled(boolean enabled) {
this.updateButton.setEnabled(enabled);
this.deleteButton.setEnabled(enabled);
this.replaceButton.setEnabled(enabled);
this.comparisonDisplayButton.setEnabled(enabled);
}
private void selectChangeTracking(int index) {
this.changeTrackingTable.select(index);
ChangeTracking changeTracking = this.diagram.getChangeTrackingList()
.get(index);
if (changeTracking.getComment() != null) {
this.textArea.setText(changeTracking.getComment());
} else {
this.textArea.setText("");
}
if (index >= 0) {
this.setButtonEnabled(true);
} else {
this.setButtonEnabled(false);
}
}
}