/*
* Copyright (C) Yutaka Matsuno 2010-2012 All rights reserved.
*/
package net.dependableos.dcase.diagram.editor.ui;
import java.math.BigDecimal;
import java.util.List;
import net.dependableos.dcase.diagram.common.constant.SystemDefinitionConst;
import net.dependableos.dcase.diagram.common.exception.DcaseSystemException;
import net.dependableos.dcase.diagram.common.util.MessageTypeImpl;
import net.dependableos.dcase.diagram.editor.message.Messages;
import net.dependableos.dcase.diagram.editor.parameter.ParameterDataItem;
import net.dependableos.dcase.diagram.editor.parameter.ParameterDataItem.DoubleParameterType;
import net.dependableos.dcase.diagram.editor.parameter.ParameterDataItem.EnumParameterType;
import net.dependableos.dcase.diagram.editor.parameter.ParameterDataItem.IntegerParameterType;
import net.dependableos.dcase.diagram.editor.parameter.ParameterDataItem.RawParameterType;
import net.dependableos.dcase.diagram.editor.parameter.ParameterDataItem.StringParameterType;
import net.dependableos.dcase.diagram.editor.verifier.DataTypeVerifier;
import net.dependableos.dcase.diagram.editor.verifier.EnumVerifier;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Text;
/**
* A wizard to edit parameter data types.
*/
public class ParameterDefinitionWizard extends Wizard {
/**
* the text width.
*/
private static final int TEXT_WIDTH = 250;
/**
* the button width.
*/
private static final int BUTTON_WIDTH = 80;
/**
* the list height.
*/
private static final int HEIGHT_HINT = 200;
/**
* Array of data types.
*/
private static final String[] DATA_TYPE_ARRAY = new String[]{
SystemDefinitionConst.DATA_TYPE_STRING,
SystemDefinitionConst.DATA_TYPE_INT,
SystemDefinitionConst.DATA_TYPE_DOUBLE,
SystemDefinitionConst.DATA_TYPE_ENUM,
SystemDefinitionConst.DATA_TYPE_RAW
};
/**
* Array of parameter data.
*/
@SuppressWarnings("unchecked")
private static final Class<? extends ParameterDataItem >[] PARAM_DATA_CLASS_ARRAY = new Class[] {
StringParameterType.class,
IntegerParameterType.class,
DoubleParameterType.class,
EnumParameterType.class,
RawParameterType.class
};
/**
* Array of parameter data setting pages.
*/
private final ParamSettingWizardPage[] paramSettingPageArray = new ParamSettingWizardPage[] {
new StringParamSettingWizardPage(),
new IntParamSettingWizardPage(),
new DoubleParamSettingWizardPage(),
new EnumParamSettingWizardPage(),
new RawParamSettingWizardPage()
};
/**
* The list of parameter data.
*/
private final List<ParameterDataItem> parameterList;
/**
* The index of the selected parameter data in dialog.
*/
private int index = -1;
/**
* The selected parameter data in dialog.
*/
private ParameterDataItem originalParameterData;
/**
* The editing parameter data in this wizard.
*/
private ParameterDataItem selectedParameterData;
/**
* The first wizard page.
*/
private ParamDefinitionPage firstPage;
/**
* The second wizard page to set the parameter data value.
*/
private ParamSettingWizardPage parameterSettingPage;
/**
* Returns result of editing parameter data.
* In the case of create or edit, return result parameter data,
* in the case of cancel, return, return original parameter data.
* @return the selectedParameterData.
*/
public ParameterDataItem getResultedParameterdata() {
return selectedParameterData;
}
/**
* Constructor in the case of creation.
* @param parameterList the list of parameter data
*/
public ParameterDefinitionWizard(List<ParameterDataItem> parameterList) {
super();
setForcePreviousAndNextButtons(true);
this.parameterList = parameterList;
firstPage = new ParamDefinitionPage();
}
/**
* Constructor in the case of edit.
* @param ind the index of the selected parameter data in the dialog.
* @param parameterList the list of parameter data.
*/
public ParameterDefinitionWizard(int ind, List<ParameterDataItem> parameterList) {
super();
setForcePreviousAndNextButtons(true);
this.index = ind;
this.parameterList = parameterList;
try {
this.originalParameterData = (ParameterDataItem) parameterList.get(ind);
this.selectedParameterData = (ParameterDataItem) this.originalParameterData.clone();
} catch (CloneNotSupportedException e) {
throw new DcaseSystemException(e.getMessage(), null, MessageTypeImpl.UNDEFINED);
}
firstPage = new ParamDefinitionPage();
}
/**
* Adds first page to this wizard.
* (non-Javadoc)
* @see org.eclipse.jface.wizard.Wizard#addPages()
*/
@Override
public void addPages() {
addPage(firstPage);
}
/**
* Returns the previous page.
* when current page is ParamSettingWizardPage, return firstPage,
* in other case, return null.
* @param page the current page
* @return the previous page
* @see org.eclipse.jface.wizard.Wizard#getPreviousPage(IWizardPage)
*/
public IWizardPage getPreviousPage(IWizardPage page) {
if (page instanceof ParamSettingWizardPage) {
return firstPage;
} else {
return null;
}
}
/**
* Returns the next page.
* when current page is firstPage, return it's next page,
* in other case, return null.
* @param page the current page
* @return next page
* @see org.eclipse.jface.wizard.Wizard#getNextPage(IWizardPage)
*/
public IWizardPage getNextPage(IWizardPage page) {
if (page == firstPage) {
return page.getNextPage();
} else {
return null;
}
}
/**
* Checks if this wizard can finish or not.
*
* @return if this wizard can finish, returns true.
* @see org.eclipse.jface.wizard.Wizard#canFinish()
*/
public boolean canFinish() {
if (getContainer().getCurrentPage() == firstPage) {
return false;
} else if (getContainer().getCurrentPage() == parameterSettingPage) {
return parameterSettingPage.isPageComplete();
}
return true;
}
/**
* When the finish button is pushed, selectedParameterData is set and
* patameterList is updated.
*
* @return true
* @see org.eclipse.jface.wizard.Wizard#performFinish()
*/
@Override
public boolean performFinish() {
selectedParameterData = parameterSettingPage.getParameter();
if (index >= 0) {
parameterList.remove(index);
parameterList.add(index, selectedParameterData);
} else {
parameterList.add(selectedParameterData);
}
return true;
}
/**
* When The cancel button is pushed,
* original parameter data is set to selectedParameterData.
*
* @return true
* @see org.eclipse.jface.wizard.Wizard#performCancel()
*/
@Override
public boolean performCancel() {
selectedParameterData = originalParameterData;
return super.performCancel();
}
/**
* Returns the editing parameter data.
* @return the editing parameter data.
*/
public ParameterDataItem getEditParamDatatypeItem() {
if (parameterSettingPage != null) {
return parameterSettingPage.getParameter();
}
return null;
}
/**
* The first page class.
*/
private class ParamDefinitionPage extends WizardPage {
/**
* column number.
*/
private static final int GRID_COLUMNS = 2;
/**
* the text control for the name.
*/
private Text nameText;
/**
* the combo box for the data type.
*/
private Combo typeCombo;
/**
* Constructor.
*/
protected ParamDefinitionPage() {
super("ParamDifinitionPage"); //$NON-NLS-1$
if (index >= 0) {
setTitle(Messages.ParameterDatatypeWizard_EditParamDefinitionPageTitle);
} else {
setTitle(Messages.ParameterDatatypeWizard_CreationParamDefinitionPage);
}
setPageComplete(false);
}
/**
* Creates dialog controls.
* @param parent the parent composite
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NULL);
composite.setLayout(new GridLayout(GRID_COLUMNS, false));
createWizardControl(composite);
setControl(composite);
}
/**
* Creates wizard page controls.
* @param parent the parent composite
*/
public void createWizardControl(Composite parent) {
//Name
Label label = new Label(parent, SWT.WRAP);
label.setText(Messages.ParameterDatatypeWizard_ParamDifinitionPage_NameLabel);
nameText = new Text(parent, SWT.SINGLE | SWT.BORDER);
nameText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent arg0) {
validateComplete();
}
});
GridData nameTextData = new GridData();
nameTextData.horizontalAlignment = GridData.FILL;
nameTextData.widthHint = TEXT_WIDTH;
nameText.setLayoutData(nameTextData);
//Requirement
Label labe2 = new Label(parent, SWT.WRAP);
labe2.setText(Messages.ParameterDatatypeWizard_ParamDifinitionPage_TypeLabel);
typeCombo = new Combo(parent, SWT.DROP_DOWN | SWT.BORDER | SWT.READ_ONLY);
typeCombo.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent arg0) {
validateComplete();
}
public void widgetDefaultSelected(SelectionEvent arg0) {
}
});
for (String type : DATA_TYPE_ARRAY) {
typeCombo.add(type);
}
GridData typeCombodata = new GridData();
typeCombodata.horizontalAlignment = GridData.FILL;
typeCombodata.widthHint = TEXT_WIDTH;
typeCombo.setLayoutData(typeCombodata);
//in the edit case.
if (selectedParameterData != null) {
nameText.setText(selectedParameterData.getName());
nameText.setEditable(false);
setComboSelect(selectedParameterData);
setPageComplete(true);
}
}
/**
* Sets the selection of combo box.
* @param selectedParameterData the selected parameter data.
*/
private void setComboSelect(ParameterDataItem selectedParameterData) {
for (int i = 0; i < PARAM_DATA_CLASS_ARRAY.length; i++) {
Class<? extends ParameterDataItem> paramClass = PARAM_DATA_CLASS_ARRAY[i];
if (paramClass.isInstance(selectedParameterData)) {
typeCombo.select(i);
typeCombo.setEnabled(false);
}
}
}
/**
* Sets the finish button enable when the wizard can finish.
*/
private void validateComplete() {
if ((nameText.getText() != null && nameText.getText().length() > 0)
&& typeCombo.getSelectionIndex() >= 0) {
// checks if forbidden characters exist.
try {
DataTypeVerifier.validString(
false, SystemDefinitionConst.DATA_ATTRIBUTE_NAME, nameText.getText());
} catch (Exception e) {
setErrorMessage(e.getMessage());
setPageComplete(false);
return;
}
// checks duplication of parameter names.
for (ParameterDataItem param : parameterList) {
if (param != originalParameterData
&& nameText.getText().equals(param.getName())) {
setErrorMessage(Messages.ParameterDatatypeWizard_ParamDifinitionPage_NameDuplicationErrMessage);
setPageComplete(false);
return;
}
}
setErrorMessage(null);
setPageComplete(true);
} else {
setPageComplete(false);
}
}
/**
* Returns the next page.
* @return the next page
*/
@Override
public IWizardPage getNextPage() {
ParamSettingWizardPage page
= paramSettingPageArray[typeCombo.getSelectionIndex()];
ParameterDefinitionWizard.this.parameterSettingPage = page;
return ParameterDefinitionWizard.this.parameterSettingPage;
}
/**
* Returns the parameter name that user input.
* @return the parameter name.
*/
protected String getParamName() {
return nameText.getText();
}
}
/**
* The base class of the wizard page to set parameter data value.
*/
private abstract class ParamSettingWizardPage extends WizardPage {
/**
* Constructor.
* @param pageName the page name
* @param title the page title
*/
protected ParamSettingWizardPage(String pageName, String title) {
super(pageName);
setTitle(title);
setWizard(ParameterDefinitionWizard.this);
setControl(null);
}
/**
* Returns the editing parameter data.
* @return the editing parameter data.
*/
protected abstract ParameterDataItem getParameter();
/**
* Returns the next page.
* @return null
*/
@Override
public IWizardPage getNextPage() {
return null;
}
/**
*/
protected void validate() {
try {
getParameter().validate();
setErrorMessage(null);
setPageComplete(true);
} catch (Exception e) {
setErrorMessage(e.getMessage());
setPageComplete(false);
}
}
}
/**
* The wizard page class to configure the string data type.
*/
private class StringParamSettingWizardPage extends ParamSettingWizardPage {
/**
* the Grid number.
*/
private static final int GRID_NUM = 4;
/**
* the default value of min.
*/
private static final int DEFAULT_MIN = 0;
/**
* the default value of min.
*/
private static final int MAX_MIN = 1;
/**
* the initial value of max for creation.
*/
private static final int INITIAL_MAX = 256;
/**
* the default value of max for edit.
*/
private static final int DEFAULT_MAX = Integer.MAX_VALUE;
/**
* the incremental value.
*/
private static final int INC = 1;
/**
* the class for creating the editing parameter data.
*/
private final Class<? extends ParameterDataItem> paramDataClass;
/**
* the spinner control for minimum.
*/
private Spinner minSpinner;
/**
* the spinner control for maximum.
*/
private Spinner maxSpinner;
/**
* the text control for element name.
*/
private String elementName;
/**
* the spinner listener.
*/
private ParamDataSelectionListener listener = new ParamDataSelectionListener();
/**
* Constructor.
*/
public StringParamSettingWizardPage() {
super(
"StringParamSettingWizardPage", //$NON-NLS-1$
Messages.ParameterDatatypeWizard_StringParamSettingWizardPage_PageTile);
paramDataClass = StringParameterType.class;
this.elementName = Messages.ParameterDatatypeWizard_StringParamSettingWizardPage_LengthLabel;
}
/**
* @return the paramDatatypeClass
*/
public Class<? extends ParameterDataItem> getParamDataClass() {
return paramDataClass;
}
/**
* Constructor.
*
* @param paramDataClass the parameter data class
* @param pageName the page name
* @param title the page title
*/
protected StringParamSettingWizardPage(
Class<? extends ParameterDataItem> paramDataClass, String pageName, String title) {
super(pageName , title);
this.paramDataClass = paramDataClass;
this.elementName = Messages.ParameterDatatypeWizard_StringParamSettingWizardPage_LengthLabel;
}
/**
* Constructor.
* @param paramDataClass the parameter data class
* @param pageName the page name
* @param title the page title
* @param elementName the element name
*/
protected StringParamSettingWizardPage(
Class<? extends ParameterDataItem> paramDataClass,
String pageName,
String title,
String elementName) {
super(pageName, title);
this.paramDataClass = paramDataClass;
this.elementName = elementName;
}
/**
* Creates dialog controls.
* @param parent the parent composite
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NULL);
composite.setLayout(new GridLayout(GRID_NUM, false));
createWizardControl(composite);
setValuesToControl();
setControl(composite);
}
/**
* Creates the wizard controls.
* @param parent the parent composite
*/
protected void createWizardControl(Composite parent) {
//Range
Label label1 = new Label(parent, SWT.WRAP);
label1.setText(elementName);
// min
minSpinner = new Spinner(parent, SWT.BORDER);
minSpinner.setMinimum(DEFAULT_MIN);
minSpinner.setMaximum(Integer.MAX_VALUE);
minSpinner.setIncrement(INC);
minSpinner.setSelection(DEFAULT_MIN);
minSpinner.addSelectionListener(listener);
GridData minData = new GridData();
minData.horizontalAlignment = GridData.FILL;
minData.widthHint = TEXT_WIDTH;
minSpinner.setLayoutData(minData);
//-
Label label2 = new Label(parent, SWT.WRAP);
label2.setText("-"); //$NON-NLS-1$
//max
maxSpinner = new Spinner(parent, SWT.BORDER);
maxSpinner.setMinimum(MAX_MIN);
maxSpinner.setMaximum(Integer.MAX_VALUE);
maxSpinner.setIncrement(INC);
if (ParameterDefinitionWizard.this.selectedParameterData == null) {
// In the creation case, sets 255 to the max spinner.
maxSpinner.setSelection(INITIAL_MAX);
} else {
// In the edit case, sets Integer.MAX_VALUE to the max spinner.
maxSpinner.setSelection(DEFAULT_MAX);
}
maxSpinner.addSelectionListener(listener);
GridData maxData = new GridData();
maxData.horizontalAlignment = GridData.FILL;
maxData.widthHint = TEXT_WIDTH;
maxSpinner.setLayoutData(maxData);
}
/**
* Sets the parameter values to controls, and validates.
*/
protected void setValuesToControl() {
//in the edit case, set values to controls.
if (ParameterDefinitionWizard.this.selectedParameterData != null
&& ParameterDefinitionWizard.this.selectedParameterData.getClass() == getParamDataClass()) {
ParameterDataItem param = ParameterDefinitionWizard.this.selectedParameterData;
setParameter(param);
} else {
setParameter(null);
}
validate();
}
/**
* Sets the value of parameter data to controls.
* @param param the parameter data
*/
protected void setParameter(ParameterDataItem param) {
if (param != null && param.getMin() != null) {
minSpinner.setSelection(param.getMin());
}
if (param != null && param.getMax() != null) {
maxSpinner.setSelection(param.getMax());
}
}
/**
* Returns the editing parameter data.
* @return the editing parameter data
* @see net.dependableos.dcase.diagram.editor.ui.ParameterDefinitionWizard.ParamSettingWizardPage#getParameter()
*/
@Override
public ParameterDataItem getParameter() {
StringParameterType param = new StringParameterType();
param.setName(firstPage.getParamName());
if (minSpinner.getText() != null && minSpinner.getText().length() > 0) {
param.setMin(minSpinner.getSelection());
}
if (maxSpinner.getText() != null && maxSpinner.getText().length() > 0) {
param.setMax(maxSpinner.getSelection());
}
return param;
}
/**
* Validates the range.
*/
protected void validate() {
try {
getParameter().validate();
setErrorMessage(null);
setPageComplete(true);
} catch (DcaseSystemException e) {
setErrorMessage(e.getMessage());
setPageComplete(false);
}
}
/**
* Returns the minText.
* @return the minText
*/
public Spinner getMinSpinner() {
return minSpinner;
}
/**
* Returns the maxText.
* @return the maxText
*/
public Spinner getMaxSpinner() {
return maxSpinner;
}
/**
* the listener class to validate the range of length.
*/
private class ParamDataSelectionListener extends SelectionAdapter {
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e) {
if (e.getSource() == minSpinner || e.getSource() == maxSpinner) {
validate();
}
}
}
}
/**
* The wizard page class to configure the int data type.
*/
private class IntParamSettingWizardPage extends StringParamSettingWizardPage {
/**
* the initial max value for creation.
*/
private static final int INITIAL_MAX = 100;
/**
* Constructor.
*/
public IntParamSettingWizardPage() {
super(
IntegerParameterType.class,
"IntParamSettingWizardPage", //$NON-NLS-1$
Messages.ParameterDatatypeWizard_IntParamSettingWizardPage_PageTitle,
Messages.ParameterDatatypeWizard_IntParamSettingWizardPage_RangeLabel);
}
/**
* {@inheritDoc}
*/
@Override
protected void createWizardControl(Composite parent) {
super.createWizardControl(parent);
getMaxSpinner().setMinimum(Integer.MIN_VALUE);
getMinSpinner().setMinimum(Integer.MIN_VALUE);
}
/**
* Set the value of parameter data to controls.
* @param param the parameter data
*/
protected void setParameter(ParameterDataItem param) {
super.setParameter(param);
if (param == null) {
getMaxSpinner().setSelection(INITIAL_MAX);
} else {
getMaxSpinner().setSelection(Integer.MAX_VALUE);
}
if (param != null && param.getMax() != null) {
getMaxSpinner().setSelection(param.getMax());
}
}
/**
* Returns the editing enum parameter data.
* @return the editing int parameter data
*/
@Override
public ParameterDataItem getParameter() {
IntegerParameterType param = new IntegerParameterType();
param.setName(firstPage.getParamName());
if (getMinSpinner().getText() != null && getMinSpinner().getText().length() > 0) {
param.setMin(Integer.parseInt(getMinSpinner().getText()));
}
if (getMaxSpinner().getText() != null && getMaxSpinner().getText().length() > 0) {
param.setMax(Integer.parseInt(getMaxSpinner().getText()));
}
return param;
}
}
/**
* The wizard page class to configure the double data type.
*/
private class DoubleParamSettingWizardPage extends ParamSettingWizardPage {
/**
* the number of horizontal grid.
*/
private static final int GRID_NUM = 4;
/**
* the number of horizontal span.
*/
private static final int HORIZONTAL_SPAN = 3;
/**
* the radix of decimal number.
*/
private static final int DECIMAL_RADIX = 10;
/**
* the constant value of digit.
*/
private static final int CONST_DIGIT = 1;
/**
* the default value of digit.
*/
private static final int DEFAULT_DIGIT = 2;
/**
* the minimum value to input range.
*/
private static final double INITIAL_MIN = 0.0d;
/**
* the initial maximum value to input range for create.
*/
private static final double INITIAL_MAX = 100.0d;
/**
* the default maximum value to input range for edit.
*/
private static final double DEFAULT_MAX = Integer.MAX_VALUE;
/**
* the initial value of incremental.
*/
private static final double INITIAL_INC = 0.1d;
/**
* the min value of incremental.
*/
private static final int MIN_INC = 1;
/**
* the sinner control for the minimum.
*/
private Spinner minSpinner;
/**
* the sinner control for the maximum.
*/
private Spinner maxSpinner;
/**
* the sinner control for the digit.
*/
private Spinner digitSpinner;
/**
* the sinner control for the incremental.
*/
private Spinner incrementalSpinner;
/**
* the spinner listener.
*/
private DoubleParamDataSelectionListener listener = new DoubleParamDataSelectionListener();
/**
* Constructor.
*/
public DoubleParamSettingWizardPage() {
super(
"DoubleParamSettingWizardPage", //$NON-NLS-1$
Messages.ParameterDatatypeWizard_DoubleParamSettingWizardPage_PageTitle);
}
/**
* Creates dialog controls.
* @param parent the parent composite
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NULL);
composite.setLayout(new GridLayout(GRID_NUM, false));
createWizardControl(composite);
setControl(composite);
}
/**
* Creates wizard controls.
* @param parent the parent composite
*/
private void createWizardControl(Composite parent) {
// Range
Label label1 = new Label(parent, SWT.WRAP);
label1.setText(Messages.ParameterDatatypeWizard_DoubleParamSettingWizardPage_RangeLabel);
// min
minSpinner = new Spinner(parent, SWT.BORDER);
minSpinner.setMaximum(Integer.MAX_VALUE);
minSpinner.setMinimum(Integer.MIN_VALUE);
minSpinner.setDigits(DEFAULT_DIGIT);
minSpinner.setIncrement(MIN_INC);
minSpinner
.setSelection(convertIntValue(INITIAL_MIN));
minSpinner.addSelectionListener(listener);
GridData minData = new GridData();
minData.horizontalAlignment = GridData.FILL;
minData.widthHint = TEXT_WIDTH;
minSpinner.setLayoutData(minData);
// -
Label label2 = new Label(parent, SWT.WRAP);
label2.setText("-"); //$NON-NLS-1$
// max
maxSpinner = new Spinner(parent, SWT.BORDER);
maxSpinner.setMaximum(Integer.MAX_VALUE);
maxSpinner.setMinimum(Integer.MIN_VALUE);
maxSpinner.setDigits(DEFAULT_DIGIT);
maxSpinner.setIncrement(MIN_INC);
if (ParameterDefinitionWizard.this.selectedParameterData == null) {
// In the creation case, sets 100.0d to the max spinner.
maxSpinner.setSelection(convertIntValue(INITIAL_MAX));
} else {
// In the edit case, sets nteger.MAX_VALUE to the max spinner.
maxSpinner.setSelection(convertIntValue(DEFAULT_MAX));
}
maxSpinner.addSelectionListener(listener);
GridData maxData = new GridData();
maxData.horizontalAlignment = GridData.FILL;
maxData.widthHint = TEXT_WIDTH;
maxSpinner.setLayoutData(maxData);
// digit
Label label3 = new Label(parent, SWT.WRAP);
label3.setText(Messages.ParameterDatatypeWizard_DoubleParamSettingWizardPage_DigitLabel);
digitSpinner = new Spinner(parent, SWT.BORDER);
digitSpinner.setMaximum(Integer.MAX_VALUE);
digitSpinner.setMinimum(CONST_DIGIT);
digitSpinner.addSelectionListener(listener);
digitSpinner.setSelection(DEFAULT_DIGIT);
GridData digitData = new GridData();
digitData.horizontalAlignment = GridData.FILL;
digitData.widthHint = TEXT_WIDTH;
digitData.horizontalSpan = HORIZONTAL_SPAN;
digitSpinner.setLayoutData(digitData);
// incremental
Label label4 = new Label(parent, SWT.WRAP);
label4.setText(Messages.ParameterDatatypeWizard_DoubleParamSettingWizardPage_IncrementalLabel);
incrementalSpinner = new Spinner(parent, SWT.BORDER);
incrementalSpinner.setMaximum(Integer.MAX_VALUE);
incrementalSpinner.setMinimum(MIN_INC);
incrementalSpinner.setIncrement(MIN_INC);
incrementalSpinner.setDigits(DEFAULT_DIGIT);
incrementalSpinner.setSelection(convertIntValue(INITIAL_INC));
incrementalSpinner.addSelectionListener(listener);
GridData incrementalData = new GridData();
incrementalData.horizontalAlignment = GridData.FILL;
incrementalData.widthHint = TEXT_WIDTH;
incrementalData.horizontalSpan = HORIZONTAL_SPAN;
incrementalSpinner.setLayoutData(incrementalData);
// In the edit case, set the value of the selected parameter data to
// controls.
if (ParameterDefinitionWizard.this.selectedParameterData instanceof DoubleParameterType) {
DoubleParameterType param = (DoubleParameterType) ParameterDefinitionWizard.this.selectedParameterData;
int digit = DEFAULT_DIGIT;
if (param.getDigit() != null) {
digit = param.getDigit();
digitSpinner.setSelection(digit);
}
applyDigit();
if (param.getDoubleMin() != null) {
minSpinner.setSelection(convertIntValue(digit,
param.getDoubleMin()));
}
if (param.getDoubleMax() != null) {
maxSpinner.setSelection(convertIntValue(digit,
param.getDoubleMax()));
}
if (param.getIncremental() != null) {
incrementalSpinner.setSelection(convertIntValue(digit,
param.getIncremental()));
}
}
validate();
}
/**
* Returns the editing double parameter data.
*
* @return the editing double parameter data
* @see net.dependableos.dcase.diagram.editor.ui.ParameterDefinitionWizard.ParamSettingWizardPage
* #getParameter()
*/
public ParameterDataItem getParameter() {
DoubleParameterType param = new DoubleParameterType();
param.setName(firstPage.getParamName());
if (minSpinner.getText() != null && minSpinner.getText().length() > 0) {
param.setDoubleMin(convertDoubleValue(minSpinner));
}
if (maxSpinner.getText() != null && maxSpinner.getText().length() > 0) {
param.setDoubleMax(convertDoubleValue(maxSpinner));
}
if (digitSpinner.getText() != null && digitSpinner.getText().length() > 0) {
param.setDigit(Integer.parseInt(digitSpinner.getText()));
}
if (incrementalSpinner.getText() != null && incrementalSpinner.getText().length() > 0) {
param.setIncremental(convertDoubleValue(incrementalSpinner));
}
return param;
}
/**
* Returns the int value of argument to represent in spinner control.
* @param value the double value.
* @return the int value to represent in spinner control.
*/
private int convertIntValue(double value) {
return convertIntValue(DEFAULT_DIGIT, value);
}
/**
* Returns the int value to set to a spinner control.
*
* @param digit the digits.
* @param value the double value.
* @return the int value to set to a spinner control.
*/
private int convertIntValue(int digit, double value) {
BigDecimal multipler = new BigDecimal(String.valueOf(DECIMAL_RADIX));
multipler = multipler.pow(digit);
BigDecimal result = new BigDecimal(String.valueOf(value));
result = result.multiply(multipler);
return result.intValue();
}
/**
* Returns the double value that is specified with a spinner control.
* @param spinner the source spinner.
* @return the double value.
*/
private double convertDoubleValue(Spinner spinner) {
return Double.parseDouble(spinner.getText());
}
/**
* Applies the specified digit to controls.
*/
private void applyDigit() {
double inc = convertDoubleValue(incrementalSpinner);
double max = convertDoubleValue(maxSpinner);
double min = convertDoubleValue(minSpinner);
int digit = digitSpinner.getSelection();
// sets digit
incrementalSpinner.setDigits(digit);
maxSpinner.setDigits(digit);
minSpinner.setDigits(digit);
// sets selection
incrementalSpinner.setSelection(convertIntValue(digit, inc));
maxSpinner.setSelection(convertIntValue(digit, max));
minSpinner.setSelection(convertIntValue(digit, min));
}
/**
* the listener class to validate the range.
*/
private class DoubleParamDataSelectionListener extends SelectionAdapter {
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e) {
if (e.getSource() == minSpinner) {
validate();
} else if (e.getSource() == maxSpinner) {
validate();
} else if (e.getSource() == incrementalSpinner) {
validate();
} else if (e.getSource() == digitSpinner) {
applyDigit();
}
}
}
}
/**
* The wizard page class for the enum parameter data type.
*/
private class EnumParamSettingWizardPage extends ParamSettingWizardPage {
/**
* the number of horizontal grid.
*/
private static final int GRID_NUM = 4;
/**
* the list of enum items.
*/
private org.eclipse.swt.widgets.List enumulationList;
/**
* the text control for item.
*/
private Text itemText;
/**
* the item creation button.
*/
private Button addBut;
/**
* the item deletion button.
*/
private Button delBut;
/**
* Constructor.
*/
public EnumParamSettingWizardPage() {
super(
"EnumParamSettingWizardPage", //$NON-NLS-1$
Messages.ParameterDatatypeWizard_EnumParamSettingWizardPage_PageTitle);
}
/**
* Creates dialog controls.
* @param parent the parent composite
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NULL);
composite.setLayout(new GridLayout(2, false));
createWizardControl(composite);
setControl(composite);
}
/**
* Creates wizard controls.
* @param parent the parent composite
*/
private void createWizardControl(Composite parent) {
//List
enumulationList = new org.eclipse.swt.widgets.List(
parent, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL | SWT.FULL_SELECTION);
enumulationList.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if (enumulationList.getSelectionIndex() >= 0) {
delBut.setEnabled(true);
} else {
delBut.setEnabled(false);
}
}
});
GridData listData = new GridData(GridData.FILL_BOTH);
listData.grabExcessVerticalSpace = true;
listData.verticalSpan = GRID_NUM;
listData.heightHint = HEIGHT_HINT;
enumulationList.setLayoutData(listData);
//Name
itemText = new Text(parent, SWT.SINGLE | SWT.BORDER);
itemText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent arg0) {
validate();
}
});
GridData itemTextData = new GridData();
itemTextData.horizontalAlignment = GridData.FILL;
itemTextData.widthHint = TEXT_WIDTH;
itemText.setLayoutData(itemTextData);
//item creation
addBut = new Button(parent, SWT.PUSH | SWT.CENTER);
addBut.setText(Messages.ParameterDatatypeWizard_EnumParamSettingWizardPage_CreationButton);
addBut.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
enumulationList.add(itemText.getText());
itemText.setText(""); //$NON-NLS-1$
validate();
}
});
GridData addButData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
addButData.widthHint = BUTTON_WIDTH;
addBut.setLayoutData(addButData);
addBut.setEnabled(false);
//item deletion
delBut = new Button(parent, SWT.PUSH | SWT.CENTER);
delBut.setText(Messages.ParameterDatatypeWizard_EnumParamSettingWizardPage_DeletionButton);
delBut.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
enumulationList.remove(enumulationList.getSelectionIndex());
delBut.setEnabled(false);
validate();
}
});
GridData delButData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
delButData.widthHint = BUTTON_WIDTH;
delBut.setLayoutData(delButData);
delBut.setEnabled(false);
// in the edit case.
if (ParameterDefinitionWizard.this.selectedParameterData instanceof EnumParameterType) {
EnumParameterType param =
(EnumParameterType) ParameterDefinitionWizard.this.selectedParameterData;
for (String item : param.getEnumList()) {
enumulationList.add(item);
}
}
validate();
}
/**
* Validates the enum parameter data.
*/
protected void validate() {
String newItem = itemText.getText();
if (newItem != null && newItem.length() > 0) {
// checks if item value is valid or not.
try {
EnumVerifier.validItemString(newItem);
} catch (Exception e) {
setErrorMessage(e.getMessage());
addBut.setEnabled(false);
return;
}
for (String item : enumulationList.getItems()) {
// checks if item name is duplicated nor not.
if (newItem.equals(item)) {
setErrorMessage(
Messages.ParameterDatatypeWizard_EnumParamSettingWizardPage_ItemDuplicationErrMessage);
addBut.setEnabled(false);
return;
}
}
addBut.setEnabled(true);
} else {
addBut.setEnabled(false);
}
super.validate();
}
/**
* Returns the editing enum parameter data.
*
* @return the editing enum parameter data
* @see net.dependableos.dcase.diagram.editor.ui.ParameterDefinitionWizard.ParamSettingWizardPage
* #getParameter()
*/
public ParameterDataItem getParameter() {
EnumParameterType param = new EnumParameterType();
param.setName(firstPage.getParamName());
for (String item : enumulationList.getItems()) {
param.addEnumList(item);
}
return param;
}
}
/**
* The wizard page class for the raw parameter data type.
*/
private class RawParamSettingWizardPage extends StringParamSettingWizardPage {
/**
* Constructor.
*/
public RawParamSettingWizardPage() {
super(
RawParameterType.class,
"RawParamSettingWizardPage", //$NON-NLS-1$
Messages.ParameterDatatypeWizard_RawParamSettingWizardPage_PageTitle);
}
/**
* Returns the editing raw parameter data.
*
* @return the editing raw parameter data
* @see net.dependableos.dcase.diagram.editor.ui.ParameterDefinitionWizard.StringParamSettingWizardPage
* #getParameter()
*/
public ParameterDataItem getParameter() {
RawParameterType param = new RawParameterType();
param.setName(firstPage.getParamName());
if (getMinSpinner().getText() != null && getMinSpinner().getText().length() > 0) {
param.setMin(Integer.parseInt(getMinSpinner().getText()));
}
if (getMaxSpinner().getText() != null && getMaxSpinner().getText().length() > 0) {
param.setMax(Integer.parseInt(getMaxSpinner().getText()));
}
return param;
}
}
}