diff options
5 files changed, 71 insertions, 16 deletions
diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/SetupTaskPerformer.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/SetupTaskPerformer.java index 98f83e6bd6..924e8c80ca 100644 --- a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/SetupTaskPerformer.java +++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/SetupTaskPerformer.java @@ -298,6 +298,17 @@ public class SetupTaskPerformer extends AbstractSetupTaskContext throw new RuntimeException("Missing variables for " + undeclaredVariables); } + if (!unresolvedVariables.isEmpty()) + { + if (!ProgressDialog.promptUnresolvedVariables(UIUtil.getShell(), Collections.singletonList(this))) + { + return neededSetupTasks; + } + + resolveSettings(); + unresolvedVariables.clear(); + } + if (triggeredSetupTasks != null) { for (Iterator<SetupTask> it = triggeredSetupTasks.iterator(); it.hasNext();) @@ -452,7 +463,7 @@ public class SetupTaskPerformer extends AbstractSetupTaskContext private void expandStrings(EList<SetupTask> setupTasks) { - Set<String> keys = new HashSet<String>(); + Set<String> keys = new LinkedHashSet<String>(); for (SetupTask setupTask : setupTasks) { expand(keys, unresolvedSettings, setupTask); diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/ProgressDialog.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/ProgressDialog.java index f6f8a05397..340c9b419c 100644 --- a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/ProgressDialog.java +++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/ProgressDialog.java @@ -560,7 +560,7 @@ public class ProgressDialog extends AbstractSetupDialog implements ProgressLog } } - private static boolean promptUnresolvedVariables(Shell shell, List<SetupTaskPerformer> setupTaskPerformers) + public static boolean promptUnresolvedVariables(Shell shell, List<SetupTaskPerformer> setupTaskPerformers) { final PromptDialog promptDialog = new PromptDialog(shell, setupTaskPerformers); diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/PromptDialog.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/PromptDialog.java index 407a2de6a0..f5fa15af4b 100644 --- a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/PromptDialog.java +++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/PromptDialog.java @@ -25,12 +25,17 @@ import org.eclipse.emf.edit.ui.provider.ExtendedFontRegistry; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.ScrolledComposite; +import org.eclipse.swt.events.ControlAdapter; +import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.graphics.Font; +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.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; @@ -47,7 +52,7 @@ public class PromptDialog extends AbstractSetupDialog public PromptDialog(Shell parentShell, List<SetupTaskPerformer> setupTaskPerformers) { - super(parentShell, "Unspecified Variables", 400, 400); + super(parentShell, "Unspecified Variables", 500, 400); this.setupTaskPerformers = setupTaskPerformers; } @@ -68,25 +73,52 @@ public class PromptDialog extends AbstractSetupDialog { headerFont = ExtendedFontRegistry.INSTANCE.getFont(parent.getFont(), URI.createURI("font:///+2/bold")); - GridLayout layout = (GridLayout)parent.getLayout(); - layout.numColumns = 4; + GridLayout parentLayout = (GridLayout)parent.getLayout(); + parentLayout.numColumns = 1; + parentLayout.marginHeight = 0; + parentLayout.marginWidth = 0; + + final ScrolledComposite scrolledComposite = new ScrolledComposite(parent, SWT.VERTICAL); + scrolledComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + scrolledComposite.setExpandHorizontal(true); + scrolledComposite.setExpandVertical(true); + + GridLayout layout = new GridLayout(4, false); layout.horizontalSpacing = 10; - layout.verticalSpacing = 10; + layout.verticalSpacing = 20; + + final Composite composite = new Composite(scrolledComposite, SWT.NONE); + composite.setLayout(layout); + scrolledComposite.setContent(composite); + composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); for (SetupTaskPerformer setupTaskPerformer : setupTaskPerformers) { List<ContextVariableTask> variables = setupTaskPerformer.getUnresolvedVariables(); if (!variables.isEmpty()) { - createHeader(parent, setupTaskPerformer); + createHeader(composite, setupTaskPerformer); for (ContextVariableTask variable : variables) { PropertyField<?, ?> field = createField(variable); - field.fill(parent); + field.fill(composite); } } } + + ControlAdapter resizeListener = new ControlAdapter() + { + @Override + public void controlResized(ControlEvent event) + { + Point size = composite.computeSize(scrolledComposite.getClientArea().width, SWT.DEFAULT); + scrolledComposite.setMinSize(size); + } + }; + scrolledComposite.addControlListener(resizeListener); + composite.addControlListener(resizeListener); + composite.notifyListeners(SWT.Resize, new Event()); } @Override diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/PropertyField.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/PropertyField.java index 0973154e01..fb6abc7b24 100644 --- a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/PropertyField.java +++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/PropertyField.java @@ -37,6 +37,7 @@ import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.DirectoryDialog; +import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Layout; import org.eclipse.swt.widgets.Shell; @@ -157,7 +158,7 @@ public abstract class PropertyField<CONTROL extends Control, HELPER extends Cont valueListeners.remove(listener); } - public final void fill(Composite parent) + public final void fill(final Composite parent) { checkParentLayout(parent); @@ -200,16 +201,23 @@ public abstract class PropertyField<CONTROL extends Control, HELPER extends Cont helpButton.setImage(JFaceResources.getImage(Dialog.DLG_IMG_HELP)); helpButton.setToolTipText("Show variable description"); final Label description = new Label(parent, SWT.WRAP | SWT.BORDER); - GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, false, 4, 1); - description.setLayoutData(gridData); - description.setText(descriptionText); + final GridData invisibleGridData = new GridData(0, 0); + invisibleGridData.horizontalSpan = 4; + invisibleGridData.heightHint = 0; + final GridData visibleGridData = new GridData(SWT.FILL, SWT.TOP, true, false, 4, 1); + description.setLayoutData(invisibleGridData); description.setVisible(false); + description.setText(descriptionText); helpButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - description.setVisible(!description.getVisible()); + boolean visible = !description.getVisible(); + description.setVisible(visible); + description.setLayoutData(visible ? visibleGridData : invisibleGridData); + parent.layout(); + parent.notifyListeners(SWT.Resize, new Event()); } }); } diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/JRETaskImpl.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/JRETaskImpl.java index a4b51d8f09..035ed63e7e 100644 --- a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/JRETaskImpl.java +++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/JRETaskImpl.java @@ -263,7 +263,7 @@ public class JRETaskImpl extends SetupTaskImpl implements JRETask public boolean isNeeded(SetupTaskContext context) throws Exception { - return JREHelper.isNeeded(context, getVersion()); + return JREHelper.isNeeded(context, getVersion(), getLocation()); } public void perform(SetupTaskContext context) throws Exception @@ -313,7 +313,7 @@ public class JRETaskImpl extends SetupTaskImpl implements JRETask } } - public static boolean isNeeded(SetupTaskContext context, String version) throws Exception + public static boolean isNeeded(SetupTaskContext context, String version, String location) throws Exception { IExecutionEnvironment[] executionEnvironments = JavaRuntime.getExecutionEnvironmentsManager() .getExecutionEnvironments(); @@ -328,7 +328,11 @@ public class JRETaskImpl extends SetupTaskImpl implements JRETask { if (executionEnvironment.isStrictlyCompatible(vmInstall)) { - return false; + File installLocation = vmInstall.getInstallLocation(); + if (new File(location).equals(installLocation)) + { + return false; + } } } } |