package org.objectstyle.wolips.wodclipse.core.refactoring;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
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.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.objectstyle.wolips.wodclipse.core.Activator;
public class AddKeyDialog extends Dialog {
private static final String PREPEND_GET_METHOD = "AddKeyDialog.prependGetMethod";
private Text _nameField;
private Button _typeAsGivenButton;
private Button _arrayOfButton;
private Button _mutableArrayOfButton;
private Combo _typeCombo;
private Button _instanceVariableButton;
private Button _getMethodButton;
private Button _prependGetButton;
private Button _setMethodButton;
private AddKeyInfo _addKeyInfo;
private IDialogSettings _settings = Activator.getDefault().getDialogSettings();
/**
* Create the dialog
*
* @param parentShell
*/
public AddKeyDialog(AddKeyInfo addKeyInfo, Shell parentShell) {
super(parentShell);
_addKeyInfo = addKeyInfo;
}
/**
* Create contents of the dialog
*
* @param parent
*/
@Override
protected Control createDialogArea(Composite parent) {
Composite container = (Composite) super.createDialogArea(parent);
final GridLayout gridLayout = new GridLayout();
gridLayout.marginBottom = 10;
gridLayout.marginTop = 10;
gridLayout.marginRight = 10;
gridLayout.marginLeft = 10;
gridLayout.numColumns = 3;
container.setLayout(gridLayout);
final Label _nameLabel = new Label(container, SWT.NONE);
final GridData gd_nameLabel = new GridData(SWT.RIGHT, SWT.CENTER, false, false);
_nameLabel.setLayoutData(gd_nameLabel);
_nameLabel.setText("Name:");
new Label(container, SWT.NONE);
_nameField = new Text(container, SWT.BORDER);
final GridData gd_nameButton = new GridData(SWT.FILL, SWT.CENTER, true, false);
_nameField.setLayoutData(gd_nameButton);
final Label _typeLabel = new Label(container, SWT.NONE);
final GridData gd_typeLabel = new GridData(SWT.RIGHT, SWT.CENTER, false, false);
gd_typeLabel.verticalIndent = 5;
_typeLabel.setLayoutData(gd_typeLabel);
_typeLabel.setText("Type:");
new Label(container, SWT.NONE);
_typeAsGivenButton = new Button(container, SWT.RADIO);
final GridData gd_typeAsGivenButton = new GridData();
gd_typeAsGivenButton.verticalIndent = 5;
_typeAsGivenButton.setLayoutData(gd_typeAsGivenButton);
_typeAsGivenButton.setText("... (type as given)");
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
_arrayOfButton = new Button(container, SWT.RADIO);
_arrayOfButton.setText("Array of ...");
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
_mutableArrayOfButton = new Button(container, SWT.RADIO);
_mutableArrayOfButton.setText("Mutable array of ...");
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
_typeCombo = new Combo(container, SWT.BORDER);
_typeCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
final Label _generateLabel = new Label(container, SWT.NONE);
final GridData gd_generateLabel = new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1);
gd_generateLabel.verticalIndent = 10;
_generateLabel.setLayoutData(gd_generateLabel);
_generateLabel.setText("Generate source code for:");
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
_instanceVariableButton = new Button(container, SWT.CHECK);
_instanceVariableButton.setSelection(true);
_instanceVariableButton.setText("An instance variable");
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
_getMethodButton = new Button(container, SWT.CHECK);
_getMethodButton.setSelection(true);
_getMethodButton.setText("A method getting the value");
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
_prependGetButton = new Button(container, SWT.CHECK);
final GridData gd_prependGetButton = new GridData();
gd_prependGetButton.horizontalIndent = 20;
_prependGetButton.setLayoutData(gd_prependGetButton);
_prependGetButton.setText("Prepend \"get\" to method name");
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
_setMethodButton = new Button(container, SWT.CHECK);
_setMethodButton.setSelection(true);
_setMethodButton.setText("A method setting the value");
//
String name = _addKeyInfo.getName();
if (name == null) {
name = "newKey";
}
_nameField.setText(name);
_typeCombo.setItems(_addKeyInfo.getEntityNames());
if (_addKeyInfo.getParameterTypeName() != null) {
_typeCombo.setText(_addKeyInfo.getParameterTypeName());
if (_addKeyInfo.getTypeName() != null) {
String typeName = _addKeyInfo.getTypeName();
if ("com.webobjects.foundation.NSArray".equals(typeName)) {
_arrayOfButton.setSelection(true);
}
else {
_mutableArrayOfButton.setSelection(true);
}
}
}
else if (_addKeyInfo.getTypeName() != null) {
_typeCombo.setText(_addKeyInfo.getTypeName());
_typeAsGivenButton.setSelection(true);
}
else {
_typeCombo.setText("java.lang.String");
_typeAsGivenButton.setSelection(true);
}
_addKeyInfo.setPrependGetToAccessorMethod(_settings.getBoolean(PREPEND_GET_METHOD));
_instanceVariableButton.setSelection(_addKeyInfo.isCreateField());
_getMethodButton.setSelection(_addKeyInfo.isCreateAccessorMethod());
_prependGetButton.setSelection(_addKeyInfo.isPrependGetToAccessorMethod());
_setMethodButton.setSelection(_addKeyInfo.isCreateMutatorMethod());
return container;
}
/**
* Create contents of the button bar
*
* @param parent
*/
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, "Add", true);
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}
/**
* Return the initial size of the dialog
*/
@Override
protected Point getInitialSize() {
return new Point(345, 358);
}
@Override
protected void buttonPressed(int buttonId) {
_addKeyInfo.setName(_nameField.getText());
if (_typeAsGivenButton.getSelection()) {
_addKeyInfo.setParameterTypeName(null);
_addKeyInfo.setTypeName(_typeCombo.getText());
}
else if (_arrayOfButton.getSelection()) {
_addKeyInfo.setParameterTypeName(_typeCombo.getText());
_addKeyInfo.setTypeName("com.webobjects.foundation.NSArray");
}
else if (_mutableArrayOfButton.getSelection()) {
_addKeyInfo.setParameterTypeName(_typeCombo.getText());
_addKeyInfo.setTypeName("com.webobjects.foundation.NSMutableArray");
}
else {
_addKeyInfo.setParameterTypeName(null);
_addKeyInfo.setTypeName(null);
}
_addKeyInfo.setCreateField(_instanceVariableButton.getSelection());
_addKeyInfo.setCreateAccessorMethod(_getMethodButton.getSelection());
_addKeyInfo.setPrependGetToAccessorMethod(_prependGetButton.getSelection());
_addKeyInfo.setCreateMutatorMethod(_setMethodButton.getSelection());
_settings.put(PREPEND_GET_METHOD, _prependGetButton.getSelection());
super.buttonPressed(buttonId);
}
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText("Add Key");
}
public static void open(AddKeyInfo info, Shell shell) throws CoreException {
AddKeyDialog dialog = new AddKeyDialog(info, shell);
if (dialog.open() == IDialogConstants.OK_ID) {
AddKeyOperation.addKey(info);
}
}
}