diff options
11 files changed, 136 insertions, 78 deletions
diff --git a/plugins/org.eclipse.eef.common.ui/src/org/eclipse/eef/common/ui/api/EEFWidgetFactory.java b/plugins/org.eclipse.eef.common.ui/src/org/eclipse/eef/common/ui/api/EEFWidgetFactory.java index e051efcc4..9c09da335 100644 --- a/plugins/org.eclipse.eef.common.ui/src/org/eclipse/eef/common/ui/api/EEFWidgetFactory.java +++ b/plugins/org.eclipse.eef.common.ui/src/org/eclipse/eef/common/ui/api/EEFWidgetFactory.java @@ -40,6 +40,7 @@ import org.eclipse.ui.internal.forms.widgets.FormUtil; * @author Stephane Begaudeau * @since 1.6.0 */ +@SuppressWarnings("restriction") public class EEFWidgetFactory extends FormToolkit { /** * The constructor. diff --git a/plugins/org.eclipse.eef.common.ui/src/org/eclipse/eef/common/ui/api/SWTUtils.java b/plugins/org.eclipse.eef.common.ui/src/org/eclipse/eef/common/ui/api/SWTUtils.java new file mode 100644 index 000000000..bd89ab292 --- /dev/null +++ b/plugins/org.eclipse.eef.common.ui/src/org/eclipse/eef/common/ui/api/SWTUtils.java @@ -0,0 +1,89 @@ +/******************************************************************************* + * Copyright (c) 2017 IBM Corporation and others. + * 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: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.eef.common.ui.api; + +import java.util.function.Consumer; + +import org.eclipse.swt.events.FocusAdapter; +import org.eclipse.swt.events.FocusEvent; +import org.eclipse.swt.events.FocusListener; +import org.eclipse.swt.events.KeyAdapter; +import org.eclipse.swt.events.KeyEvent; +import org.eclipse.swt.events.KeyListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; + +/** + * Utility methods for SWT. + * + * @author sbegaudeau + */ +public final class SWTUtils { + + /** + * The constructor. + */ + private SWTUtils() { + // Prevent instantiation + } + + /** + * Static helper method to create a selection listener for the {@link #widgetSelected(SelectionEvent event)}) method + * with a lambda expression. + * + * @param consumer + * the consumer of the event + * @return SelectionListener + */ + public static SelectionListener widgetSelectedAdapter(Consumer<SelectionEvent> consumer) { + return new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent event) { + consumer.accept(event); + } + }; + } + + /** + * Static helper method to create a focus listener for the {@link #focusLost(FocusEvent event)}) method with a + * lambda expression. + * + * @param consumer + * the consumer of the event + * @return FocusListener + */ + public static FocusListener focusLostAdapter(Consumer<FocusEvent> consumer) { + return new FocusAdapter() { + @Override + public void focusLost(FocusEvent event) { + consumer.accept(event); + } + }; + } + + /** + * Static helper method to create a key listener for the {@link #keyReleased(KeyEvent event)}) method with a lambda + * expression. + * + * @param consumer + * the consumer of the event + * @return KeyListener + */ + public static KeyListener keyReleasedAdapter(Consumer<KeyEvent> consumer) { + return new KeyAdapter() { + @Override + public void keyReleased(KeyEvent event) { + consumer.accept(event); + } + }; + } +} diff --git a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFHyperlinkController.java b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFHyperlinkController.java index 06ad3c1b1..acb3de57c 100644 --- a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFHyperlinkController.java +++ b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFHyperlinkController.java @@ -10,10 +10,9 @@ *******************************************************************************/ package org.eclipse.eef.core.internal.controllers; -import com.google.common.base.Objects; - import java.util.HashMap; import java.util.Map; +import java.util.Optional; import org.eclipse.core.runtime.IStatus; import org.eclipse.eef.EEFHyperlinkDescription; @@ -94,7 +93,7 @@ public class EEFHyperlinkController extends AbstractEEFWidgetController implemen variables.put(EEFExpressionUtils.EEFReference.VALUE, value); text = EvalFactory.of(this.interpreter, variables).logIfInvalidType(String.class).evaluate(displayExpression); } - return Objects.firstNonNull(text, ""); //$NON-NLS-1$ + return Optional.ofNullable(text).orElse(""); //$NON-NLS-1$ } /** diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/api/widgets/AbstractEEFWidgetLifecycleManager.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/api/widgets/AbstractEEFWidgetLifecycleManager.java index 79506bdc3..64ac4e3b3 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/api/widgets/AbstractEEFWidgetLifecycleManager.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/api/widgets/AbstractEEFWidgetLifecycleManager.java @@ -10,9 +10,8 @@ *******************************************************************************/ package org.eclipse.eef.ide.ui.api.widgets; -import com.google.common.base.Objects; - import java.util.Collection; +import java.util.Optional; import org.eclipse.eef.EEFDynamicMappingFor; import org.eclipse.eef.EEFDynamicMappingIf; @@ -282,14 +281,14 @@ public abstract class AbstractEEFWidgetLifecycleManager extends AbstractEEFLifec this.getController().onNewLabel((value) -> { if (!label.isDisposed() && !(label.getText() != null && label.getText().equals(value))) { - label.setText(Objects.firstNonNull(value, "")); //$NON-NLS-1$ + label.setText(Optional.ofNullable(value).orElse("")); //$NON-NLS-1$ } AbstractEEFWidgetLifecycleManager.this.setLabelFontStyle(); }); this.getController().onNewHelp((value) -> { if (help != null && !help.isDisposed() && !(help.getText() != null && help.getText().equals(value))) { - help.setToolTipText(Objects.firstNonNull(value, Messages.AbstractEEFWidgetLifecycleManager_noDescriptionAvailable)); + help.setToolTipText(Optional.ofNullable(value).orElse(Messages.AbstractEEFWidgetLifecycleManager_noDescriptionAvailable)); } }); diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/ActionButton.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/ActionButton.java index 1d207791a..ec4f6e9c9 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/ActionButton.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/ActionButton.java @@ -16,7 +16,7 @@ import org.eclipse.eef.core.api.utils.EvalFactory; import org.eclipse.sirius.common.interpreter.api.IInterpreter; import org.eclipse.sirius.common.interpreter.api.IVariableManager; import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; @@ -42,7 +42,7 @@ public class ActionButton { /** * The button listener. */ - private SelectionAdapter selectionListener; + private SelectionListener selectionListener; /** * The widget action. @@ -96,7 +96,7 @@ public class ActionButton { * @param listener * Selection listener */ - public void addSelectionListener(SelectionAdapter listener) { + public void addSelectionListener(SelectionListener listener) { if (!button.isDisposed()) { this.selectionListener = listener; button.addSelectionListener(selectionListener); diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFButtonLifecycleManager.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFButtonLifecycleManager.java index 1e9228d57..695e6a64b 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFButtonLifecycleManager.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFButtonLifecycleManager.java @@ -10,7 +10,7 @@ *******************************************************************************/ package org.eclipse.eef.ide.ui.internal.widgets; -import com.google.common.base.Objects; +import java.util.Optional; import org.eclipse.core.runtime.IStatus; import org.eclipse.eef.EEFButtonDescription; @@ -158,7 +158,7 @@ public class EEFButtonLifecycleManager extends AbstractEEFWidgetLifecycleManager this.controller.onNewButtonLabel((value) -> { if (!button.isDisposed() && !(button.getText() != null && button.getText().equals(value))) { - button.setText(Objects.firstNonNull(value, "")); //$NON-NLS-1$ + button.setText(Optional.ofNullable(value).orElse("")); //$NON-NLS-1$ } }); } diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFCheckboxLifecycleManager.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFCheckboxLifecycleManager.java index c86120b40..6d0a60732 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFCheckboxLifecycleManager.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFCheckboxLifecycleManager.java @@ -10,7 +10,7 @@ *******************************************************************************/ package org.eclipse.eef.ide.ui.internal.widgets; -import com.google.common.base.Objects; +import java.util.Optional; import org.eclipse.core.runtime.IStatus; import org.eclipse.eef.EEFCheckboxDescription; @@ -19,6 +19,7 @@ import org.eclipse.eef.EEFWidgetDescription; import org.eclipse.eef.EEFWidgetStyle; import org.eclipse.eef.common.ui.api.EEFWidgetFactory; import org.eclipse.eef.common.ui.api.IEEFFormContainer; +import org.eclipse.eef.common.ui.api.SWTUtils; import org.eclipse.eef.core.api.EditingContextAdapter; import org.eclipse.eef.core.api.controllers.EEFControllersFactory; import org.eclipse.eef.core.api.controllers.IEEFCheckboxController; @@ -30,7 +31,6 @@ import org.eclipse.eef.ide.ui.internal.EEFIdeUiPlugin; import org.eclipse.sirius.common.interpreter.api.IInterpreter; import org.eclipse.sirius.common.interpreter.api.IVariableManager; import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; @@ -156,28 +156,20 @@ public class EEFCheckboxLifecycleManager extends AbstractEEFWidgetLifecycleManag this.getController().onNewLabel((value) -> { if (!this.checkbox.isDisposed() && !(this.checkbox.getText() != null && this.checkbox.getText().equals(value))) { - this.checkbox.setText(Objects.firstNonNull(value, "")); //$NON-NLS-1$ + this.checkbox.setText(Optional.ofNullable(value).orElse("")); //$NON-NLS-1$ } }); // UI edited by user => update model if possible, revert UI change otherwise - this.selectionListener = new SelectionListener() { - @Override - public void widgetSelected(SelectionEvent event) { - IStatus result = controller.updateValue(checkbox.getSelection()); - if (result != null && result.getSeverity() == IStatus.ERROR) { - EEFIdeUiPlugin.INSTANCE.log(result); - checkbox.setSelection(referenceValue); - } else { - refresh(); - } - } - - @Override - public void widgetDefaultSelected(SelectionEvent e) { - // Nothing to do + this.selectionListener = SWTUtils.widgetSelectedAdapter((event) -> { + IStatus result = controller.updateValue(checkbox.getSelection()); + if (result != null && result.getSeverity() == IStatus.ERROR) { + EEFIdeUiPlugin.INSTANCE.log(result); + checkbox.setSelection(referenceValue); + } else { + refresh(); } - }; + }); this.checkbox.addSelectionListener(this.selectionListener); // Model changed => update UI diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFGroupLifecycleManager.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFGroupLifecycleManager.java index a99e8572e..a0058cc69 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFGroupLifecycleManager.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFGroupLifecycleManager.java @@ -10,10 +10,9 @@ *******************************************************************************/ package org.eclipse.eef.ide.ui.internal.widgets; -import com.google.common.base.Objects; - import java.util.ArrayList; import java.util.List; +import java.util.Optional; import org.eclipse.eef.EEFControlDescription; import org.eclipse.eef.EEFGroupConditionalStyle; @@ -153,7 +152,7 @@ public class EEFGroupLifecycleManager extends AbstractEEFLifecycleManager { String labelExpression = this.description.getLabelExpression(); EvalFactory.of(this.interpreter, this.variableManager).logIfInvalidType(String.class).call(labelExpression, - (value) -> this.section.setText(Objects.firstNonNull(value, ""))); //$NON-NLS-1$ + (value) -> this.section.setText(Optional.ofNullable(value).orElse(""))); //$NON-NLS-1$ this.section.setLayout(new GridLayout(1, false)); GridData sectionLayoutData = new GridData(SWT.FILL, SWT.BEGINNING, true, false); @@ -289,7 +288,7 @@ public class EEFGroupLifecycleManager extends AbstractEEFLifecycleManager { public void aboutToBeShown() { super.aboutToBeShown(); - this.controller.onNewLabel((value) -> this.section.setText(value)); + this.controller.onNewLabel((value) -> Optional.ofNullable(value).ifPresent(this.section::setText)); this.lifecycleManagers.forEach(IEEFLifecycleManager::aboutToBeShown); } diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFLabelLifecycleManager.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFLabelLifecycleManager.java index 3d44c8781..5c2023827 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFLabelLifecycleManager.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFLabelLifecycleManager.java @@ -10,10 +10,9 @@ *******************************************************************************/ package org.eclipse.eef.ide.ui.internal.widgets; -import com.google.common.base.Objects; - import java.util.ArrayList; import java.util.List; +import java.util.Optional; import org.eclipse.core.runtime.IStatus; import org.eclipse.eef.EEFLabelDescription; @@ -23,6 +22,7 @@ import org.eclipse.eef.EEFWidgetDescription; import org.eclipse.eef.EEFWidgetStyle; import org.eclipse.eef.common.ui.api.EEFWidgetFactory; import org.eclipse.eef.common.ui.api.IEEFFormContainer; +import org.eclipse.eef.common.ui.api.SWTUtils; import org.eclipse.eef.core.api.EditingContextAdapter; import org.eclipse.eef.core.api.controllers.EEFControllersFactory; import org.eclipse.eef.core.api.controllers.IEEFLabelController; @@ -35,8 +35,7 @@ import org.eclipse.sirius.common.interpreter.api.IInterpreter; import org.eclipse.sirius.common.interpreter.api.IVariableManager; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; -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.Composite; @@ -189,26 +188,23 @@ public class EEFLabelLifecycleManager extends AbstractEEFWidgetLifecycleManager this.controller.onNewValue((value) -> { if (!body.isDisposed()) { if (!(body.getText() != null && body.getText().equals(value))) { - body.setText(Objects.firstNonNull(value, "")); //$NON-NLS-1$ + body.setText(Optional.ofNullable(value).orElse("")); //$NON-NLS-1$ } this.setStyle(); } }); for (final ActionButton actionButton : actionButtons) { - SelectionAdapter selectionListener = new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (!EEFLabelLifecycleManager.this.container.isRenderingInProgress()) { - IStatus result = controller.action(actionButton.getAction()); - if (result != null && result.getSeverity() == IStatus.ERROR) { - EEFIdeUiPlugin.INSTANCE.log(result); - } else { - refresh(); - } + SelectionListener selectionListener = SWTUtils.widgetSelectedAdapter((event) -> { + if (!this.container.isRenderingInProgress()) { + IStatus result = controller.action(actionButton.getAction()); + if (result != null && result.getSeverity() == IStatus.ERROR) { + EEFIdeUiPlugin.INSTANCE.log(result); + } else { + refresh(); } } - }; + }); actionButton.addSelectionListener(selectionListener); } diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFTextLifecycleManager.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFTextLifecycleManager.java index e88b1ad63..76106d4de 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFTextLifecycleManager.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFTextLifecycleManager.java @@ -20,6 +20,7 @@ import org.eclipse.eef.EEFWidgetStyle; import org.eclipse.eef.common.api.utils.Util; import org.eclipse.eef.common.ui.api.EEFWidgetFactory; import org.eclipse.eef.common.ui.api.IEEFFormContainer; +import org.eclipse.eef.common.ui.api.SWTUtils; import org.eclipse.eef.core.api.EditingContextAdapter; import org.eclipse.eef.core.api.controllers.EEFControllersFactory; import org.eclipse.eef.core.api.controllers.IEEFTextController; @@ -33,9 +34,7 @@ import org.eclipse.sirius.common.interpreter.api.IInterpreter; import org.eclipse.sirius.common.interpreter.api.IVariableManager; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; -import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; -import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.graphics.Color; @@ -217,35 +216,19 @@ public class EEFTextLifecycleManager extends AbstractEEFWidgetLifecycleManager { }; this.text.addModifyListener(this.modifyListener); - this.focusListener = new FocusListener() { - @Override - public void focusLost(FocusEvent e) { - if (!EEFTextLifecycleManager.this.container.isRenderingInProgress() && EEFTextLifecycleManager.this.isDirty) { - EEFTextLifecycleManager.this.updateValue(false); - } - } - - @Override - public void focusGained(FocusEvent e) { - // do nothing + this.focusListener = SWTUtils.focusLostAdapter((event) -> { + if (!this.container.isRenderingInProgress() && this.isDirty) { + this.updateValue(false); } - }; + }); this.text.addFocusListener(this.focusListener); if (this.description.getLineCount() <= 1) { - this.keyListener = new KeyListener() { - @Override - public void keyReleased(KeyEvent e) { - if (e.character == '\r' || e.character == '\n') { - EEFTextLifecycleManager.this.updateValue(false); - } - } - - @Override - public void keyPressed(KeyEvent e) { - // do nothing + this.keyListener = SWTUtils.keyReleasedAdapter((event) -> { + if (event.character == '\r' || event.character == '\n') { + this.updateValue(false); } - }; + }); this.text.addKeyListener(this.keyListener); } diff --git a/plugins/org.eclipse.eef.ide/src/org/eclipse/eef/ide/api/extensions/impl/DescriptorRegistryEventListener.java b/plugins/org.eclipse.eef.ide/src/org/eclipse/eef/ide/api/extensions/impl/DescriptorRegistryEventListener.java index c6bbc7eb8..7a948fb0b 100644 --- a/plugins/org.eclipse.eef.ide/src/org/eclipse/eef/ide/api/extensions/impl/DescriptorRegistryEventListener.java +++ b/plugins/org.eclipse.eef.ide/src/org/eclipse/eef/ide/api/extensions/impl/DescriptorRegistryEventListener.java @@ -137,7 +137,7 @@ public class DescriptorRegistryEventListener<T> extends AbstractRegistryEventLis } catch (CoreException e) { String message = MessageFormat.format(Messages.DescriptorRegistryEventListener_cannotInstantiateExtension, configurationElement.getAttribute(IMPL_CLASS_DESCRIPTOR_ATTR)); - EEFIdePlugin.getPlugin().error(message); + EEFIdePlugin.getPlugin().error(message, e); return false; } |