/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.wizards.toolintegration;
import java.util.Map;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.wizard.IWizard;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import de.rcenvironment.core.component.integration.ToolIntegrationConstants;
import de.rcenvironment.core.utils.common.StringUtils;
/**
* Extends the {@link WizardDialog} for adding a "save as" button to the ButtonBar.
*
* @author Sascha Zur
*/
public class ToolIntegrationWizardDialog extends WizardDialog {
private static final Object LOCK_OBJECT = new Object();
protected Button backButton;
protected Button nextButton;
protected Button finishButton;
protected Button cancelButton;
protected Button saveAsButton;
private final boolean isEdit;
public ToolIntegrationWizardDialog(Shell parentShell, IWizard newWizard,
boolean isEdit) {
super(parentShell, newWizard);
setShellStyle(SWT.CLOSE | SWT.MAX | SWT.TITLE | SWT.BORDER | SWT.RESIZE
| getDefaultOrientation());
this.isEdit = isEdit;
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
((GridLayout) parent.getLayout()).makeColumnsEqualWidth = false;
if (getWizard().isHelpAvailable()) {
createButton(parent, IDialogConstants.HELP_ID,
IDialogConstants.HELP_LABEL, false);
}
if (getWizard().needsPreviousAndNextButtons()) {
backButton = createButton(parent, IDialogConstants.BACK_ID,
IDialogConstants.BACK_LABEL, true);
nextButton = createButton(parent, IDialogConstants.NEXT_ID,
IDialogConstants.NEXT_LABEL, true);
}
saveAsButton = createButton(parent, IDialogConstants.OPEN_ID,
Messages.saveAsLabel, false);
String buttonText = Messages.integrateLabel;
if (isEdit) {
buttonText = Messages.updateLabel;
}
finishButton = createButton(parent, IDialogConstants.FINISH_ID,
buttonText, true);
cancelButton = createButton(parent, IDialogConstants.CANCEL_ID,
IDialogConstants.CANCEL_LABEL, true);
}
@Override
public void updateButtons() {
boolean canFlipToNextPage = false;
boolean canFinish = true;
for (IWizardPage p : getWizard().getPages()) {
canFinish &= p.isPageComplete();
}
if (backButton != null) {
backButton.setEnabled(getCurrentPage().getPreviousPage() != null);
}
if (nextButton != null) {
canFlipToNextPage = getCurrentPage().canFlipToNextPage();
nextButton.setEnabled(canFlipToNextPage);
saveAsButton.setEnabled(canFlipToNextPage);
}
finishButton.setEnabled(canFinish);
saveAsButton.setEnabled(canFinish);
// finish is default unless it is disabled and next is enabled
if (canFlipToNextPage && !canFinish) {
getShell().setDefaultButton(nextButton);
} else {
getShell().setDefaultButton(finishButton);
}
}
/*
* (non-Javadoc) Method declared on Dialog.
*/
@Override
protected void buttonPressed(int buttonId) {
switch (buttonId) {
case IDialogConstants.HELP_ID:
helpPressed();
break;
case IDialogConstants.BACK_ID:
backPressed();
break;
case IDialogConstants.NEXT_ID:
nextPressed();
break;
case IDialogConstants.FINISH_ID:
if (!isEdit) {
finishPressed();
if (((ToolIntegrationWizard) getWizard()).isConfigOK() && this.getParentShell() != null) {
MessageBox infoDialog = new MessageBox(this.getParentShell(),
SWT.ICON_INFORMATION | SWT.OK);
infoDialog.setText("Tool integrated");
Map<String, Object> configurationMap = ((ToolIntegrationWizard) getWizard())
.getConfigurationMap();
String groupName = (String) configurationMap
.get(ToolIntegrationConstants.KEY_TOOL_GROUPNAME);
if (groupName == null || groupName.isEmpty()) {
groupName = ToolIntegrationConstants.DEFAULT_COMPONENT_GROUP_ID;
}
infoDialog.setMessage(StringUtils.format("Tool \"%s\" was successfully integrated to group \"%s\".",
configurationMap.get(ToolIntegrationConstants.KEY_TOOL_NAME), groupName));
infoDialog.open();
}
break;
}
synchronized (LOCK_OBJECT) {
((ToolIntegrationWizard) getWizard()).removeOldIntegration();
finishPressed();
if (((ToolIntegrationWizard) getWizard()).isConfigOK() && this.getParentShell() != null) {
MessageBox infoDialog = new MessageBox(this.getParentShell(),
SWT.ICON_INFORMATION | SWT.OK);
infoDialog.setText("Tool updated");
infoDialog
.setMessage(StringUtils
.format("Tool \"%s\" was successfully updated.",
((ToolIntegrationWizard) getWizard())
.getConfigurationMap()
.get(ToolIntegrationConstants.KEY_TOOL_NAME)));
infoDialog.open();
}
}
break;
case IDialogConstants.OPEN_ID:
DirectoryDialog dialog = new DirectoryDialog(getShell());
String folder = dialog.open();
if (folder != null) {
((ToolIntegrationWizard) getWizard()).performSaveAs(folder);
}
break;
case IDialogConstants.CANCEL_ID:
cancelPressed();
break;
// The Cancel button has a listener which calls cancelPressed
// directly
default:
}
}
@Override
public int open() {
int returnValue = super.open();
((ToolIntegrationWizard) getWizard()).open();
return returnValue;
}
}