blob: 5ce4f60b34270cd56447da7fb7ccf225efafd98d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2007 BEA Systems, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* wharley@bea.com - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.apt.ui.internal.preferences;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jdt.apt.core.util.AptConfig;
import org.eclipse.jdt.apt.ui.internal.preferences.AptConfigurationBlock.ProcessorOption;
import org.eclipse.jdt.apt.ui.internal.util.IAptHelpContextIds;
import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
import org.eclipse.jface.dialogs.StatusDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
/**
* Dialog to edit or add an APT processor option
*/
public class ProcessorOptionInputDialog extends StatusDialog {
private class FieldAdapter implements IDialogFieldListener {
public void dialogFieldChanged(DialogField field) {
doValidation();
}
}
private StringDialogField fKeyField;
private StringDialogField fValueField;
private List<String> fExistingNames;
public ProcessorOptionInputDialog(Shell parent, ProcessorOption option, List<ProcessorOption> existingEntries) {
super(parent);
fExistingNames= new ArrayList<String>(existingEntries.size());
for (ProcessorOption o : existingEntries) {
if (!o.equals(option)) {
fExistingNames.add(o.key);
}
}
if (option == null) {
setTitle(Messages.ProcessorOptionInputDialog_newProcessorOption);
} else {
setTitle(Messages.ProcessorOptionInputDialog_editProcessorOption);
}
FieldAdapter adapter= new FieldAdapter();
fKeyField= new StringDialogField();
fKeyField.setLabelText(Messages.ProcessorOptionInputDialog_key);
fKeyField.setDialogFieldListener(adapter);
fValueField= new StringDialogField();
fValueField.setLabelText(Messages.ProcessorOptionInputDialog_value);
fValueField.setDialogFieldListener(adapter);
fKeyField.setText((option != null) ? option.key : ""); //$NON-NLS-1$
fValueField.setText((option != null) ? option.value : ""); //$NON-NLS-1$
}
public ProcessorOption getResult() {
ProcessorOption option = new ProcessorOption();
option.key= fKeyField.getText().trim();
option.value= fValueField.getText().trim();
return option;
}
protected Control createDialogArea(Composite parent) {
Composite composite= (Composite) super.createDialogArea(parent);
Composite inner= new Composite(composite, SWT.NONE);
GridLayout layout= new GridLayout();
layout.marginHeight= 0;
layout.marginWidth= 0;
layout.numColumns= 2;
inner.setLayout(layout);
fKeyField.doFillIntoGrid(inner, 2);
fValueField.doFillIntoGrid(inner, 2);
LayoutUtil.setHorizontalGrabbing(fKeyField.getTextControl(null));
LayoutUtil.setWidthHint(fKeyField.getTextControl(null), convertWidthInCharsToPixels(50));
LayoutUtil.setHorizontalGrabbing(fValueField.getTextControl(null));
LayoutUtil.setWidthHint(fValueField.getTextControl(null), convertWidthInCharsToPixels(50));
fKeyField.postSetFocusOnDialogField(parent.getDisplay());
applyDialogFont(composite);
return composite;
}
private void doValidation() {
StatusInfo status= new StatusInfo();
String newKey= fKeyField.getText();
String newVal= fValueField.getText();
// TODO: thorough validation of both key and value
if (newKey.length() == 0) {
status.setError(Messages.ProcessorOptionInputDialog_emptyKey);
} else if (fExistingNames.contains(newKey)) {
status.setError(Messages.ProcessorOptionInputDialog_keyAlreadyInUse);
} else if (newVal.indexOf('=') >= 0) {
status.setError(Messages.ProcessorOptionInputDialog_equalsSignNotValid);
} else if (AptConfig.isAutomaticProcessorOption(newKey)) {
status.setWarning(Messages.AptConfigurationBlock_warningIgnoredOptions);
}
updateStatus(status);
}
/*
* @see org.eclipse.jface.window.Window#configureShell(Shell)
*/
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IAptHelpContextIds.PROCESSOR_OPTION_INPUT_DIALOG);
}
}