blob: f99b848286c3f044002ad32117e2811dfca5c758 [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.io.IOException;
import java.util.Map.Entry;
import org.eclipse.jdt.apt.core.internal.util.FactoryContainer;
import org.eclipse.jdt.apt.core.internal.util.FactoryPath;
import org.eclipse.jdt.apt.ui.internal.util.ExceptionHandler;
import org.eclipse.jdt.apt.ui.internal.util.IAptHelpContextIds;
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.SelectionButtonDialogField;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
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.ui.PlatformUI;
/**
* Dialog to display "advanced options" on a FactoryPathEntry,
* typically in the context of the factory path config UI.
* Advanced options are those which do not normally need to
* be configured, and which may require deeper-than-usual
* understanding of the annotation processing architecture.
*/
public class AdvancedFactoryPathOptionsDialog extends Dialog {
private final static int LIST_WIDTH= 70; // width (in chars) of factory list
private final static int LIST_HEIGHT= 10; // number of lines in factory list
private class FieldAdapter implements IDialogFieldListener {
public void dialogFieldChanged(DialogField field) {
}
}
// shallow copies, because they are not changed by this code
private final FactoryContainer _fc;
private final FactoryPath.Attributes _attr;
// Dialog controls
private SelectionButtonDialogField _batchModeField;
private ListViewer _contentsField;
public AdvancedFactoryPathOptionsDialog(
Shell parent, FactoryContainer fc, FactoryPath.Attributes attr) {
super(parent);
setShellStyle(getShellStyle() | SWT.RESIZE);
_fc= fc;
_attr= attr;
}
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText(Messages.AdvancedFactoryPathOptionsDialog_advancedOptions);
PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, IAptHelpContextIds.ADVANCED_FACTORYPATH_OPTIONS_DIALOG);
}
protected Control createDialogArea(Composite parent) {
Composite dlgArea= (Composite) super.createDialogArea(parent);
// Set up "batch mode" checkbox.
FieldAdapter adapter = new FieldAdapter();
_batchModeField = new SelectionButtonDialogField(SWT.CHECK);
_batchModeField.setSelection(_attr.runInBatchMode());
_batchModeField.setLabelText(Messages.AdvancedFactoryPathOptionsDialog_batchMode);
_batchModeField.setDialogFieldListener(adapter);
_batchModeField.doFillIntoGrid(dlgArea, 2);
// Plugins can't run in APT compatibility mode.
boolean isPlugin = _fc.getType() == FactoryContainer.FactoryType.PLUGIN;
_batchModeField.setEnabled(!isPlugin);
DialogField.createEmptySpace(dlgArea, 1);
// Set up label for processor contents list
Label description= new Label(dlgArea, SWT.WRAP);
description.setText(Messages.AdvancedFactoryPathOptionsDialog_label_processorsInThisContainer);
GridData gdLabel= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gdLabel.horizontalSpan= 2;
description.setLayoutData(gdLabel);
// Set up processor contents list
_contentsField= new ListViewer(dlgArea, SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.heightHint = convertHeightInCharsToPixels(LIST_HEIGHT);
data.widthHint = convertWidthInCharsToPixels(LIST_WIDTH);
_contentsField.getList().setLayoutData(data);
_contentsField.getList().setFont(parent.getFont());
try {
for (Entry<String, String> entry : _fc.getFactoryNames().entrySet()) {
String name = entry.getKey();
_contentsField.add(name);
//TODO: display the processor type (i.e., entry.getValue())
}
}
catch (IOException e) {
final String message = "Unable to load factory names from container [" + _fc.getId() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
ExceptionHandler.log(e, message);
}
_contentsField.setSelection(null, false);
applyDialogFont(dlgArea);
return dlgArea;
}
/**
* Return a new Attributes representing the original value updated
* with any changes made by the user. Changes will be included even
* if the dialog was cancelled, so this should only be called if the
* dialog returned OK.
*/
public FactoryPath.Attributes getResult() {
boolean batchMode = _batchModeField.isSelected();
return new FactoryPath.Attributes(_attr.isEnabled(), batchMode);
}
}