Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Barbin2018-11-16 15:55:05 +0000
committerFlorian Barbin2018-11-23 14:04:42 +0000
commit7f8dfd96be7ce7449b2a19357d84a6a4f7e2fe8f (patch)
tree0f93e8c9272747a625b5045b1c774d588094c693
parentfc668519489a5c2d7b5702ea83664e6b8512b624 (diff)
downloadorg.eclipse.sirius-7f8dfd96be7ce7449b2a19357d84a6a4f7e2fe8f.tar.gz
org.eclipse.sirius-7f8dfd96be7ce7449b2a19357d84a6a4f7e2fe8f.tar.xz
org.eclipse.sirius-7f8dfd96be7ce7449b2a19357d84a6a4f7e2fe8f.zip
[507064] Catch CCE and NPE at diagram opening.
* Sometimes, the GMF model can be unsynchronized with the Sirius one. In that case, a ClassCastException or an NPE can occurs during the edit parts creation. We now catch those exceptions and invite the end user to refresh his diagram. Bug: 507064 Change-Id: If769c303924da47a27454db09b5efd26f296e3ac Signed-off-by: Florian Barbin <florian.barbin@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/plugin.properties2
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/DDiagramEditorImpl.java66
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java6
3 files changed, 48 insertions, 26 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/plugin.properties b/plugins/org.eclipse.sirius.diagram.ui/plugin.properties
index 1843e5888f..973f3870e2 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/plugin.properties
+++ b/plugins/org.eclipse.sirius.diagram.ui/plugin.properties
@@ -830,6 +830,8 @@ CustomTreeSelectionDialog_regexpTitle = Filter elements by name
CustomTreeSelectionDialog_regexpTooltip = Expression that will be used to filer elements by name (for example 'abc', 'a?c', '*c'...)
CustomTreeSelectionDialog_showLabelText = Show
CustomTreeSelectionDialog_uncheckAllButtonTooltip = Uncheck All
+DDiagramEditorImpl_diagramRefreshTitle = Refresh the diagram
+DDiagramEditorImpl_shouldWeRefreshQuestion = This diagram needs to be refreshed before opening. Would you like to refresh it now?
DDiagramEditorImpl_editorToBeClosedAndReopenedSinceContentIsNotAccessible={0}\nContent access has failed at editor opening, you can try to reopen this editor.
DDiagramEditorImpl_cdoServerConnectionPbMsg = Error while connecting to remote CDO server
DDiagramEditorImpl_noAssociatedGMFDiagramMsg = The gmf diagram is expected to be created before calling setInput() on the editor
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/DDiagramEditorImpl.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/DDiagramEditorImpl.java
index 27180bf6b7..ec606a3e50 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/DDiagramEditorImpl.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/DDiagramEditorImpl.java
@@ -86,6 +86,7 @@ import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.PreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.text.AbstractInformationControlManager;
@@ -130,8 +131,8 @@ import org.eclipse.sirius.diagram.ui.business.api.view.SiriusGMFHelper;
import org.eclipse.sirius.diagram.ui.business.internal.command.RefreshDiagramOnOpeningCommand;
import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDDiagramEditPart;
import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramNameEditPart;
-import org.eclipse.sirius.diagram.ui.edit.internal.part.listener.RepresentationLinkPostCommitListener;
import org.eclipse.sirius.diagram.ui.edit.internal.part.listener.DiagramHeaderPostCommitListener;
+import org.eclipse.sirius.diagram.ui.edit.internal.part.listener.RepresentationLinkPostCommitListener;
import org.eclipse.sirius.diagram.ui.edit.internal.part.listener.SynchronizedStatusPostCommitListener;
import org.eclipse.sirius.diagram.ui.edit.internal.part.listener.VisibilityPostCommitListener;
import org.eclipse.sirius.diagram.ui.internal.refresh.SiriusDiagramSessionEventBroker;
@@ -558,35 +559,48 @@ public class DDiagramEditorImpl extends SiriusDiagramEditor implements DDiagramE
@Override
public void createPartControl(Composite parent) {
- super.createPartControl(parent);
- // Display the status message to inform user about reason why the
- // session opening failed
- if (session == null && getEditorInput() instanceof SessionEditorInput) {
- SessionEditorInput sessionEditorInput = (SessionEditorInput) getEditorInput();
- IStatus status = sessionEditorInput.getStatus();
- if (status.getSeverity() >= IStatus.ERROR) {
- RootEditPart rootEditPart = getGraphicalViewer().getRootEditPart();
- if (rootEditPart instanceof LayerManager) {
- LayerManager layerManager = (LayerManager) rootEditPart;
- IFigure layer = layerManager.getLayer(LayerConstants.PRINTABLE_LAYERS);
- String message = MessageFormat.format(Messages.DDiagramEditorImpl_editorToBeClosedAndReopenedSinceContentIsNotAccessible, status.getMessage());
- layer.add(new Label(message));
+ try {
+ super.createPartControl(parent);
+ // Display the status message to inform user about reason why the
+ // session opening failed
+ if (session == null && getEditorInput() instanceof SessionEditorInput) {
+ SessionEditorInput sessionEditorInput = (SessionEditorInput) getEditorInput();
+ IStatus status = sessionEditorInput.getStatus();
+ if (status.getSeverity() >= IStatus.ERROR) {
+ RootEditPart rootEditPart = getGraphicalViewer().getRootEditPart();
+ if (rootEditPart instanceof LayerManager) {
+ LayerManager layerManager = (LayerManager) rootEditPart;
+ IFigure layer = layerManager.getLayer(LayerConstants.PRINTABLE_LAYERS);
+ String message = MessageFormat.format(Messages.DDiagramEditorImpl_editorToBeClosedAndReopenedSinceContentIsNotAccessible, status.getMessage());
+ layer.add(new Label(message));
+ }
+ return;
}
- return;
}
- }
- if (getEditingDomain() != null) {
- tabbarPostCommitListener = new TabbarRefresher(getEditingDomain());
- visibilityPostCommitListener = new VisibilityPostCommitListener(getDiagramEditPart());
- statusBarPostCommitListener = new SynchronizedStatusPostCommitListener(this);
- linkNotePostCommitListener = new RepresentationLinkPostCommitListener(this);
- if (isHeaderSectionEnabled()) {
- diagramHeaderPostCommitListener = new DiagramHeaderPostCommitListener(getEditingDomain(), getDiagramHeader());
+ if (getEditingDomain() != null) {
+ tabbarPostCommitListener = new TabbarRefresher(getEditingDomain());
+ visibilityPostCommitListener = new VisibilityPostCommitListener(getDiagramEditPart());
+ statusBarPostCommitListener = new SynchronizedStatusPostCommitListener(this);
+ linkNotePostCommitListener = new RepresentationLinkPostCommitListener(this);
+ if (isHeaderSectionEnabled()) {
+ diagramHeaderPostCommitListener = new DiagramHeaderPostCommitListener(getEditingDomain(), getDiagramHeader());
+ }
+ // Update palette : should be hidden if diagram is not editable
+ if (!getPermissionAuthority().canEditInstance(getRepresentation())) {
+ notify(REPRESENTATION_EDITION_PERMISSION_DENIED);
+ }
}
- // Update palette : should be hidden if diagram is not editable
- if (!getPermissionAuthority().canEditInstance(getRepresentation())) {
- notify(REPRESENTATION_EDITION_PERMISSION_DENIED);
+ } catch (ClassCastException | NullPointerException e) {
+
+ Boolean response = MessageDialog.openConfirm(parent.getShell(), Messages.DDiagramEditorImpl_diagramRefreshTitle, Messages.DDiagramEditorImpl_shouldWeRefreshQuestion);
+ close(false);
+ if (response) {
+ launchRefresh(true);
+ DRepresentation currentDRepresentation = getRepresentation();
+ Display.getCurrent().asyncExec(() -> {
+ DialectUIManager.INSTANCE.openEditor(session, currentDRepresentation, new NullProgressMonitor());
+ });
}
}
}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java b/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java
index 76f7e584cd..c2b50292b3 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java
@@ -246,6 +246,9 @@ public final class Messages {
public static String CustomTreeSelectionDialog_uncheckAllButtonTooltip;
@TranslatableMessage
+ public static String DDiagramEditorImpl_diagramRefreshTitle;
+
+ @TranslatableMessage
public static String DDiagramEditorImpl_editorToBeClosedAndReopenedSinceContentIsNotAccessible;
@TranslatableMessage
@@ -264,6 +267,9 @@ public final class Messages {
public static String DDiagramEditorImpl_refreshJobLabel;
@TranslatableMessage
+ public static String DDiagramEditorImpl_shouldWeRefreshQuestion;
+
+ @TranslatableMessage
public static String DeactivateBehaviorToolsCommand_label;
@TranslatableMessage

Back to the top