diff options
| author | Pierre Guilet | 2018-05-09 13:04:18 +0000 |
|---|---|---|
| committer | Pierre Guilet | 2018-05-15 08:51:11 +0000 |
| commit | b00bb1589bae98f71f4325c87a620bf47b917f52 (patch) | |
| tree | e1a8fbd13b2071e97ba7e94f620a795028510ba3 | |
| parent | 42f27392a7aa09301b7b7e5f8f437b19e78df1e4 (diff) | |
| download | org.eclipse.sirius-b00bb1589bae98f71f4325c87a620bf47b917f52.tar.gz org.eclipse.sirius-b00bb1589bae98f71f4325c87a620bf47b917f52.tar.xz org.eclipse.sirius-b00bb1589bae98f71f4325c87a620bf47b917f52.zip | |
[509070] Fix various NPE when ELK plugin is not installed
When org.eclipse.sirius.diagram.elk is not installed with Sirius, it
does not cause anymore NPE when manipulating the odesign and a diagram
representation with an ELK layout. The fix also applies for any new
layout added in the Sirius environment.
Bug: 509070
Change-Id: Ibecc3291e9efc915901623753bc97ab998a545cc
Signed-off-by: Pierre Guilet <pierre.guilet@obeo.fr>
4 files changed, 27 insertions, 17 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/internal/description/provider/CustomLayoutConfigurationItemProviderSpec.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/internal/description/provider/CustomLayoutConfigurationItemProviderSpec.java index 1fb5302a44..2fb5019af1 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/internal/description/provider/CustomLayoutConfigurationItemProviderSpec.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/internal/description/provider/CustomLayoutConfigurationItemProviderSpec.java @@ -53,13 +53,15 @@ public class CustomLayoutConfigurationItemProviderSpec extends CustomLayoutConfi CustomLayoutConfiguration layout = (CustomLayoutConfiguration) object; CustomLayoutAlgorithm genericLayoutProviderSupplier = layoutProviderRegistry.get(layout.getId()); - Map<String, LayoutOption> layoutOptions = genericLayoutProviderSupplier.getLayoutOptions(); - for (LayoutOption layoutOption : layoutOptions.values()) { - LayoutOption copy = EcoreUtil.copy(layoutOption); - if (copy instanceof EnumOption) { - ((EnumOption) copy).getChoices().clear(); + if (genericLayoutProviderSupplier != null) { + Map<String, LayoutOption> layoutOptions = genericLayoutProviderSupplier.getLayoutOptions(); + for (LayoutOption layoutOption : layoutOptions.values()) { + LayoutOption copy = EcoreUtil.copy(layoutOption); + if (copy instanceof EnumOption) { + ((EnumOption) copy).getChoices().clear(); + } + newChildDescriptors.add(createChildParameter(org.eclipse.sirius.diagram.description.DescriptionPackage.Literals.CUSTOM_LAYOUT_CONFIGURATION__LAYOUT_OPTIONS, copy)); } - newChildDescriptors.add(createChildParameter(org.eclipse.sirius.diagram.description.DescriptionPackage.Literals.CUSTOM_LAYOUT_CONFIGURATION__LAYOUT_OPTIONS, copy)); } } diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/internal/description/provider/EnumLayoutOptionItemProviderSpec.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/internal/description/provider/EnumLayoutOptionItemProviderSpec.java index b4ee5b0333..626197c136 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/internal/description/provider/EnumLayoutOptionItemProviderSpec.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/internal/description/provider/EnumLayoutOptionItemProviderSpec.java @@ -55,11 +55,13 @@ public class EnumLayoutOptionItemProviderSpec extends EnumLayoutOptionItemProvid EnumLayoutOption layoutOption = (EnumLayoutOption) object; CustomLayoutConfiguration layout = (CustomLayoutConfiguration) layoutOption.eContainer(); CustomLayoutAlgorithm genericLayoutProviderSupplier = layoutProviderRegistry.get(layout.getId()); - Map<String, LayoutOption> layoutOptions = genericLayoutProviderSupplier.getLayoutOptions(); - EnumLayoutOption layoutOptionTemplate = (EnumLayoutOption) layoutOptions.get(layoutOption.getId()); - EList<EnumLayoutValue> choices = layoutOptionTemplate.getChoices(); - for (EnumLayoutValue enumLayoutValue : choices) { - newChildDescriptors.add(createChildParameter(org.eclipse.sirius.diagram.description.DescriptionPackage.Literals.ENUM_LAYOUT_OPTION__VALUE, EcoreUtil.copy(enumLayoutValue))); + if (genericLayoutProviderSupplier != null) { + Map<String, LayoutOption> layoutOptions = genericLayoutProviderSupplier.getLayoutOptions(); + EnumLayoutOption layoutOptionTemplate = (EnumLayoutOption) layoutOptions.get(layoutOption.getId()); + EList<EnumLayoutValue> choices = layoutOptionTemplate.getChoices(); + for (EnumLayoutValue enumLayoutValue : choices) { + newChildDescriptors.add(createChildParameter(org.eclipse.sirius.diagram.description.DescriptionPackage.Literals.ENUM_LAYOUT_OPTION__VALUE, EcoreUtil.copy(enumLayoutValue))); + } } } diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/internal/description/provider/EnumSetLayoutOptionItemProviderSpec.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/internal/description/provider/EnumSetLayoutOptionItemProviderSpec.java index 4b34a289c7..54c6141e2a 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/internal/description/provider/EnumSetLayoutOptionItemProviderSpec.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/internal/description/provider/EnumSetLayoutOptionItemProviderSpec.java @@ -56,11 +56,13 @@ public class EnumSetLayoutOptionItemProviderSpec extends EnumSetLayoutOptionItem EnumSetLayoutOption layoutOption = (EnumSetLayoutOption) object; CustomLayoutConfiguration layout = (CustomLayoutConfiguration) layoutOption.eContainer(); CustomLayoutAlgorithm genericLayoutProviderSupplier = layoutProviderRegistry.get(layout.getId()); - Map<String, LayoutOption> layoutOptions = genericLayoutProviderSupplier.getLayoutOptions(); - EnumSetLayoutOption layoutOptionTemplate = (EnumSetLayoutOption) layoutOptions.get(layoutOption.getId()); - EList<EnumLayoutValue> choices = layoutOptionTemplate.getChoices(); - for (EnumLayoutValue enumLayoutValue : choices) { - newChildDescriptors.add(createChildParameter(org.eclipse.sirius.diagram.description.DescriptionPackage.Literals.ENUM_SET_LAYOUT_OPTION__VALUES, EcoreUtil.copy(enumLayoutValue))); + if (genericLayoutProviderSupplier != null) { + Map<String, LayoutOption> layoutOptions = genericLayoutProviderSupplier.getLayoutOptions(); + EnumSetLayoutOption layoutOptionTemplate = (EnumSetLayoutOption) layoutOptions.get(layoutOption.getId()); + EList<EnumLayoutValue> choices = layoutOptionTemplate.getChoices(); + for (EnumLayoutValue enumLayoutValue : choices) { + newChildDescriptors.add(createChildParameter(org.eclipse.sirius.diagram.description.DescriptionPackage.Literals.ENUM_SET_LAYOUT_OPTION__VALUES, EcoreUtil.copy(enumLayoutValue))); + } } } diff --git a/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/internal/layout/GenericLayoutProvider.java b/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/internal/layout/GenericLayoutProvider.java index fd2b5293e5..94e8bdbbba 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/internal/layout/GenericLayoutProvider.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/internal/layout/GenericLayoutProvider.java @@ -19,6 +19,7 @@ import org.eclipse.sirius.diagram.DDiagram; import org.eclipse.sirius.diagram.description.CustomLayoutConfiguration; import org.eclipse.sirius.diagram.description.DiagramDescription; import org.eclipse.sirius.diagram.description.Layout; +import org.eclipse.sirius.diagram.ui.api.layout.CustomLayoutAlgorithm; import org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin; import org.eclipse.sirius.diagram.ui.tools.api.layout.provider.DefaultLayoutProvider; import org.eclipse.sirius.diagram.ui.tools.api.layout.provider.LayoutProvider; @@ -86,7 +87,10 @@ public class GenericLayoutProvider implements LayoutProvider { private DefaultLayoutProvider getGenericLayoutProvider(final IGraphicalEditPart container) { CustomLayoutConfiguration customLayoutConfiguration = getCustomLayoutConfiguration(container); if (customLayoutConfiguration != null) { - return DiagramUIPlugin.getPlugin().getLayoutAlgorithms().get(customLayoutConfiguration.getId()).getLayoutAlgorithmInstance(); + CustomLayoutAlgorithm customLayoutAlgorithm = DiagramUIPlugin.getPlugin().getLayoutAlgorithms().get(customLayoutConfiguration.getId()); + if (customLayoutAlgorithm != null) { + return customLayoutAlgorithm.getLayoutAlgorithmInstance(); + } } return null; } |
