View | Details | Raw Unified | Return to bug 426431 | Differences between
and this patch

Collapse All | Expand All

(-)a/plugins/org.eclipse.sirius.diagram/src/org/eclipse/sirius/diagram/business/internal/dialect/DiagramDialectEditorInput.java (+49 lines)
Line 0 Link Here
1
package org.eclipse.sirius.diagram.business.internal.dialect;
2
3
import org.eclipse.emf.common.util.URI;
4
import org.eclipse.sirius.business.api.session.Session;
5
import org.eclipse.sirius.ui.business.api.session.SessionEditorInput;
6
import org.eclipse.sirius.viewpoint.DDiagram;
7
8
/**
9
 * A {@link DDiagram} {@link SessionEditorInput}.
10
 * 
11
 * @author <a href="mailto:yvan.lussaud@obeo.fr">Yvan Lussaud</a>
12
 * 
13
 */
14
public class DiagramDialectEditorInput extends SessionEditorInput {
15
16
    /**
17
     * The {@link DDiagram}.
18
     */
19
    private DDiagram diagram;
20
21
    /**
22
     * Create a new SessionEditorInput with the current session and ui session.
23
     * 
24
     * @param uri
25
     *            element URI.
26
     * @param name
27
     *            name of the editor.
28
     * @param session
29
     *            the current session.
30
     * @param the
31
     *            {@link DDiagram}
32
     */
33
    public DiagramDialectEditorInput(final URI uri, final String name, final Session session, final DDiagram diagram) {
34
        super(uri, name, session);
35
        this.diagram = diagram;
36
    }
37
38
    /**
39
     * Gets the attached {@link DDiagram} and forget it.
40
     * 
41
     * @return the attached {@link DDiagram}
42
     */
43
    public DDiagram getAndForgetDiagram() {
44
        final DDiagram res = diagram;
45
        diagram = null;
46
        return res;
47
    }
48
49
}
(-)a/plugins/org.eclipse.sirius.diagram/src/org/eclipse/sirius/diagram/business/internal/dialect/DiagramDialectUIServices.java (-104 / +66 lines)
Lines 63-68 import org.eclipse.sirius.business.api.session.Session; Link Here
63
import org.eclipse.sirius.business.api.session.SessionManager;
63
import org.eclipse.sirius.business.api.session.SessionManager;
64
import org.eclipse.sirius.common.tools.DslCommonPlugin;
64
import org.eclipse.sirius.common.tools.DslCommonPlugin;
65
import org.eclipse.sirius.common.tools.api.util.StringUtil;
65
import org.eclipse.sirius.common.tools.api.util.StringUtil;
66
import org.eclipse.sirius.diagram.business.api.view.SiriusGMFHelper;
66
import org.eclipse.sirius.diagram.business.api.view.refresh.CanonicalSynchronizer;
67
import org.eclipse.sirius.diagram.business.api.view.refresh.CanonicalSynchronizer;
67
import org.eclipse.sirius.diagram.business.api.view.refresh.CanonicalSynchronizerFactory;
68
import org.eclipse.sirius.diagram.business.api.view.refresh.CanonicalSynchronizerFactory;
68
import org.eclipse.sirius.diagram.business.internal.command.CreateAndStoreGMFDiagramCommand;
69
import org.eclipse.sirius.diagram.business.internal.command.CreateAndStoreGMFDiagramCommand;
Lines 131-177 public class DiagramDialectUIServices implements DialectUIServices { Link Here
131
    /**
132
    /**
132
     * {@inheritDoc}
133
     * {@inheritDoc}
133
     */
134
     */
134
    public IEditorPart openEditor(Session session, DRepresentation dRepresentation, IProgressMonitor monitor) {
135
    public IEditorPart openEditor(Session session, final DRepresentation dRepresentation, IProgressMonitor monitor) {
135
        DialectEditor result = null;
136
        DialectEditor result = null;
136
        try {
137
        try {
137
            monitor.beginTask("diagram opening", 15);
138
            monitor.beginTask("diagram opening", 15);
138
            DslCommonPlugin.PROFILER.startWork(SiriusTasksKey.OPEN_DIAGRAM_KEY);
139
            DslCommonPlugin.PROFILER.startWork(SiriusTasksKey.OPEN_DIAGRAM_KEY);
139
140
140
            if (dRepresentation instanceof DSemanticDiagram) {
141
            if (dRepresentation instanceof DSemanticDiagram) {
141
                final DSemanticDiagram diag = (DSemanticDiagram) dRepresentation;
142
                final IEditorInput editorInput = getEditorInput(session, dRepresentation);
142
                final Collection<EObject> gmfDiags = session.getServices().getCustomData(CustomDataConstants.GMF_DIAGRAMS, diag);
143
                if (editorInput != null) {
143
144
                if (gmfDiags.isEmpty()) {
145
                    /*
146
                     * we have our diagrams but not the gmf ones => old aird
147
                     * version or corrupted file
148
                     */
149
                    TransactionalEditingDomain domain = session.getTransactionalEditingDomain();
150
                    domain.getCommandStack().execute(new CreateAndStoreGMFDiagramCommand(session, diag));
151
152
                    gmfDiags.addAll(session.getServices().getCustomData(CustomDataConstants.GMF_DIAGRAMS, diag));
153
                    monitor.worked(1);
144
                    monitor.worked(1);
154
                }
145
                    monitor.subTask("diagram editor opening : " + dRepresentation.getName());
146
                    RunnableWithResult<DialectEditor> runnable = new RunnableWithResult.Impl<DialectEditor>() {
147
148
                        public void run() {
149
                            final IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
150
                            try {
151
                                IEditorPart editorPart = page.openEditor(editorInput, getEditorID(dRepresentation));
152
                                if (editorPart instanceof DialectEditor) {
153
                                    setResult((DialectEditor) editorPart);
154
                                }
155
                            } catch (final PartInitException e) {
156
                                SiriusDiagramEditorPlugin.getInstance().logError("diagram editor opening error", e);
157
                            }
158
                        }
155
159
156
                // If the current DDiagram is shared on a CDO repository and
160
                    };
157
                // some
161
                    PlatformUI.getWorkbench().getDisplay().syncExec(runnable);
158
                // needed Viewpoints are not activated (for example a
162
                    monitor.worked(10);
159
                // contributed
163
                    if (runnable.getResult() != null) {
160
                // activated layer)
164
                        result = runnable.getResult();
161
                Set<Viewpoint> viewpointsActivated = null;
162
                if (URIQuery.CDO_URI_SCHEME.equals(diag.eResource().getURI().scheme())) {
163
                    viewpointsActivated = activateNeededViewpoints(session, diag, monitor);
164
                }
165
                for (final EObject object : gmfDiags) {
166
                    final Diagram gmfDiag = (Diagram) object;
167
                    if (gmfDiag != null) {
168
                        result = openEditor(session, gmfDiag, dRepresentation, monitor);
169
                        new DiagramDialectArrangeOperation().arrange(result, diag);
170
                        monitor.worked(3);
171
                    }
165
                    }
172
                }
166
                    monitor.worked(3);
173
                if (viewpointsActivated != null && !viewpointsActivated.isEmpty()) {
174
                    informOfActivateNeededViewpoints(viewpointsActivated);
175
                }
167
                }
176
            }
168
            }
177
            DslCommonPlugin.PROFILER.stopWork(SiriusTasksKey.OPEN_DIAGRAM_KEY);
169
            DslCommonPlugin.PROFILER.stopWork(SiriusTasksKey.OPEN_DIAGRAM_KEY);
Lines 181-258 public class DiagramDialectUIServices implements DialectUIServices { Link Here
181
        return result;
173
        return result;
182
    }
174
    }
183
175
184
    private DialectEditor openEditor(Session session, Diagram gmfDiag, DRepresentation dRepresentation, IProgressMonitor monitor) {
185
        DialectEditor dialectEditor = null;
186
        URI uri = EcoreUtil.getURI(gmfDiag);
187
        String editorName = DialectUIManager.INSTANCE.getEditorName(dRepresentation);
188
        monitor.worked(1);
189
        final IEditorInput editorInput = new SessionEditorInput(uri, editorName, session);
190
        monitor.subTask("diagram editor opening : " + dRepresentation.getName());
191
        RunnableWithResult<DialectEditor> runnable = new RunnableWithResult.Impl<DialectEditor>() {
192
193
            public void run() {
194
                final IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
195
                try {
196
                    IEditorPart editorPart = page.openEditor(editorInput, DDiagramEditor.EDITOR_ID);
197
                    if (editorPart instanceof DialectEditor) {
198
                        setResult((DialectEditor) editorPart);
199
                    }
200
                } catch (final PartInitException e) {
201
                    SiriusDiagramEditorPlugin.getInstance().logError("diagram editor opening error", e);
202
                }
203
            }
204
205
        };
206
        PlatformUI.getWorkbench().getDisplay().syncExec(runnable);
207
        monitor.worked(10);
208
        if (runnable.getResult() != null) {
209
            dialectEditor = runnable.getResult();
210
        }
211
        return dialectEditor;
212
    }
213
214
    private Set<Viewpoint> activateNeededViewpoints(Session session, DDiagram dDiagram, IProgressMonitor monitor) {
215
        List<Layer> activatedLayers = dDiagram.getActivatedLayers();
216
        Set<Viewpoint> neededViewpoints = new LinkedHashSet<Viewpoint>();
217
        for (Layer activatedLayer : activatedLayers) {
218
            if (!activatedLayer.eIsProxy() && activatedLayer.eContainer() != null) {
219
                Viewpoint viewpoint = (Viewpoint) activatedLayer.eContainer().eContainer();
220
                neededViewpoints.add(viewpoint);
221
            }
222
        }
223
        Set<Viewpoint> selectedViewpoints = new LinkedHashSet<Viewpoint>();
224
        for (Viewpoint viewpoint : session.getSelectedViewpoints(false)) {
225
            selectedViewpoints.add(SiriusResourceHelper.getCorrespondingViewpoint(session, viewpoint));
226
        }
227
        neededViewpoints.removeAll(selectedViewpoints);
228
        if (!neededViewpoints.isEmpty()) {
229
            Command changeViewpointsSelectionCmd = new ChangeViewpointSelectionCommand(session, new ViewpointSelectionCallback(), neededViewpoints, Collections.<Viewpoint> emptySet(),
230
                    new SubProgressMonitor(monitor, neededViewpoints.size()));
231
            session.getTransactionalEditingDomain().getCommandStack().execute(changeViewpointsSelectionCmd);
232
            monitor.worked(1);
233
        }
234
        return neededViewpoints;
235
    }
236
237
    private void informOfActivateNeededViewpoints(Set<Viewpoint> viewpointsActivated) {
238
        Iterator<Viewpoint> iterator = viewpointsActivated.iterator();
239
        Viewpoint neededSirius = iterator.next();
240
        String viewpointsName = neededSirius.getName();
241
        while (iterator.hasNext()) {
242
            neededSirius = iterator.next();
243
            viewpointsName += ", " + neededSirius.getName();
244
        }
245
        final String description = viewpointsName;
246
        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
247
248
            public void run() {
249
                MessageDialog.openInformation(PlatformUI.getWorkbench().getDisplay().getActiveShell(), "Viewpoints selection", "The current diagram requires some viewpoints selected (" + description
250
                        + "), because some activated layers are contributed by these viewpoints");
251
            }
252
253
        });
254
    }
255
256
    /**
176
    /**
257
     * Synchronizes the GMF diagram model according to the viewpoint
177
     * Synchronizes the GMF diagram model according to the viewpoint
258
     * DSemanticDiagram model.
178
     * DSemanticDiagram model.
Lines 269-274 public class DiagramDialectUIServices implements DialectUIServices { Link Here
269
    /**
189
    /**
270
     * {@inheritDoc}
190
     * {@inheritDoc}
271
     * 
191
     * 
192
     * @see org.eclipse.sirius.ui.business.api.dialect.DialectUIServices#getEditorID(org.eclipse.sirius.viewpoint.DRepresentation)
193
     */
194
    public String getEditorID(DRepresentation dRepresentation) {
195
        return DDiagramEditor.EDITOR_ID;
196
    }
197
    
198
    @Override
199
    public SessionEditorInput getEditorInput(Session session, DRepresentation dRepresentation) {
200
        final SessionEditorInput res;
201
        
202
        if (dRepresentation instanceof DSemanticDiagram) {
203
            final DSemanticDiagram diag = (DSemanticDiagram) dRepresentation;
204
            Diagram gmfDiag = SiriusGMFHelper.getGmfDiagram(diag);
205
206
            if (gmfDiag == null) {
207
                /*
208
                 * we have our diagrams but not the gmf ones => old aird
209
                 * version or corrupted file
210
                 */
211
                TransactionalEditingDomain domain = session.getTransactionalEditingDomain();
212
                domain.getCommandStack().execute(new CreateAndStoreGMFDiagramCommand(session, diag));
213
214
                gmfDiag = SiriusGMFHelper.getGmfDiagram(diag);
215
            }
216
217
            if (gmfDiag != null) {
218
                final URI uri = EcoreUtil.getURI(gmfDiag);
219
                final String editorName = DialectUIManager.INSTANCE.getEditorName(dRepresentation);
220
                res = new DiagramDialectEditorInput(uri, editorName, session,(DSemanticDiagram) dRepresentation);
221
            } else {
222
                res = null;
223
            }
224
        } else {
225
            res = null;
226
        }
227
        
228
        return res;
229
    }
230
    
231
    /**
232
     * {@inheritDoc}
233
     * 
272
     * @see org.eclipse.sirius.ui.business.api.dialect.DialectUIServices#canHandleEditor(org.eclipse.ui.IEditorPart)
234
     * @see org.eclipse.sirius.ui.business.api.dialect.DialectUIServices#canHandleEditor(org.eclipse.ui.IEditorPart)
273
     */
235
     */
274
    public boolean canHandleEditor(final IEditorPart editorPart) {
236
    public boolean canHandleEditor(final IEditorPart editorPart) {
(-)a/plugins/org.eclipse.sirius.diagram/src/org/eclipse/sirius/diagram/tools/internal/editor/DDiagramEditorImpl.java (+77 lines)
Lines 13-21 package org.eclipse.sirius.diagram.tools.internal.editor; Link Here
13
import java.util.ArrayList;
13
import java.util.ArrayList;
14
import java.util.Arrays;
14
import java.util.Arrays;
15
import java.util.Collection;
15
import java.util.Collection;
16
import java.util.Collections;
16
import java.util.Iterator;
17
import java.util.Iterator;
18
import java.util.LinkedHashSet;
17
import java.util.List;
19
import java.util.List;
18
import java.util.Map;
20
import java.util.Map;
21
import java.util.Set;
19
22
20
import org.eclipse.core.commands.operations.IOperationHistoryListener;
23
import org.eclipse.core.commands.operations.IOperationHistoryListener;
21
import org.eclipse.core.commands.operations.IUndoContext;
24
import org.eclipse.core.commands.operations.IUndoContext;
Lines 28-33 import org.eclipse.core.runtime.IStatus; Link Here
28
import org.eclipse.core.runtime.NullProgressMonitor;
31
import org.eclipse.core.runtime.NullProgressMonitor;
29
import org.eclipse.core.runtime.Platform;
32
import org.eclipse.core.runtime.Platform;
30
import org.eclipse.core.runtime.Status;
33
import org.eclipse.core.runtime.Status;
34
import org.eclipse.core.runtime.SubProgressMonitor;
31
import org.eclipse.core.runtime.jobs.Job;
35
import org.eclipse.core.runtime.jobs.Job;
32
import org.eclipse.core.runtime.preferences.InstanceScope;
36
import org.eclipse.core.runtime.preferences.InstanceScope;
33
import org.eclipse.emf.common.command.Command;
37
import org.eclipse.emf.common.command.Command;
Lines 78-83 import org.eclipse.gmf.runtime.notation.Diagram; Link Here
78
import org.eclipse.gmf.runtime.notation.View;
82
import org.eclipse.gmf.runtime.notation.View;
79
import org.eclipse.jface.action.IAction;
83
import org.eclipse.jface.action.IAction;
80
import org.eclipse.jface.action.IToolBarManager;
84
import org.eclipse.jface.action.IToolBarManager;
85
import org.eclipse.jface.dialogs.MessageDialog;
81
import org.eclipse.jface.resource.ImageDescriptor;
86
import org.eclipse.jface.resource.ImageDescriptor;
82
import org.eclipse.jface.text.AbstractInformationControlManager;
87
import org.eclipse.jface.text.AbstractInformationControlManager;
83
import org.eclipse.jface.text.IDocument;
88
import org.eclipse.jface.text.IDocument;
Lines 90-96 import org.eclipse.jface.viewers.IStructuredSelection; Link Here
90
import org.eclipse.jface.viewers.StructuredSelection;
95
import org.eclipse.jface.viewers.StructuredSelection;
91
import org.eclipse.sirius.business.api.dialect.DialectManager;
96
import org.eclipse.sirius.business.api.dialect.DialectManager;
92
import org.eclipse.sirius.business.api.dialect.command.RefreshRepresentationsCommand;
97
import org.eclipse.sirius.business.api.dialect.command.RefreshRepresentationsCommand;
98
import org.eclipse.sirius.business.api.helper.SiriusResourceHelper;
93
import org.eclipse.sirius.business.api.query.DDiagramElementQuery;
99
import org.eclipse.sirius.business.api.query.DDiagramElementQuery;
100
import org.eclipse.sirius.business.api.query.URIQuery;
94
import org.eclipse.sirius.business.api.session.Session;
101
import org.eclipse.sirius.business.api.session.Session;
95
import org.eclipse.sirius.business.api.session.SessionListener;
102
import org.eclipse.sirius.business.api.session.SessionListener;
96
import org.eclipse.sirius.business.api.session.SessionManager;
103
import org.eclipse.sirius.business.api.session.SessionManager;
Lines 103-108 import org.eclipse.sirius.diagram.business.api.view.SiriusGMFHelper; Link Here
103
import org.eclipse.sirius.diagram.business.api.view.refresh.CanonicalSynchronizer;
110
import org.eclipse.sirius.diagram.business.api.view.refresh.CanonicalSynchronizer;
104
import org.eclipse.sirius.diagram.business.api.view.refresh.CanonicalSynchronizerFactory;
111
import org.eclipse.sirius.diagram.business.api.view.refresh.CanonicalSynchronizerFactory;
105
import org.eclipse.sirius.diagram.business.internal.command.RefreshDiagramOnOpeningCommand;
112
import org.eclipse.sirius.diagram.business.internal.command.RefreshDiagramOnOpeningCommand;
113
import org.eclipse.sirius.diagram.business.internal.dialect.DiagramDialectArrangeOperation;
114
import org.eclipse.sirius.diagram.business.internal.dialect.DiagramDialectEditorInput;
106
import org.eclipse.sirius.diagram.business.internal.session.DiagramSessionHelper;
115
import org.eclipse.sirius.diagram.business.internal.session.DiagramSessionHelper;
107
import org.eclipse.sirius.diagram.edit.api.part.AbstractDDiagramEditPart;
116
import org.eclipse.sirius.diagram.edit.api.part.AbstractDDiagramEditPart;
108
import org.eclipse.sirius.diagram.edit.api.part.AbstractDiagramNameEditPart;
117
import org.eclipse.sirius.diagram.edit.api.part.AbstractDiagramNameEditPart;
Lines 177-182 import org.eclipse.sirius.ui.business.api.session.IEditingSession; Link Here
177
import org.eclipse.sirius.ui.business.api.session.SessionEditorInput;
186
import org.eclipse.sirius.ui.business.api.session.SessionEditorInput;
178
import org.eclipse.sirius.ui.business.api.session.SessionEditorInputFactory;
187
import org.eclipse.sirius.ui.business.api.session.SessionEditorInputFactory;
179
import org.eclipse.sirius.ui.business.api.session.SessionUIManager;
188
import org.eclipse.sirius.ui.business.api.session.SessionUIManager;
189
import org.eclipse.sirius.ui.business.api.viewpoint.ViewpointSelectionCallback;
190
import org.eclipse.sirius.ui.business.internal.commands.ChangeViewpointSelectionCommand;
180
import org.eclipse.sirius.viewpoint.DDiagram;
191
import org.eclipse.sirius.viewpoint.DDiagram;
181
import org.eclipse.sirius.viewpoint.DDiagramElement;
192
import org.eclipse.sirius.viewpoint.DDiagramElement;
182
import org.eclipse.sirius.viewpoint.DRepresentation;
193
import org.eclipse.sirius.viewpoint.DRepresentation;
Lines 184-189 import org.eclipse.sirius.viewpoint.DRepresentationElement; Link Here
184
import org.eclipse.sirius.viewpoint.DSemanticDecorator;
195
import org.eclipse.sirius.viewpoint.DSemanticDecorator;
185
import org.eclipse.sirius.viewpoint.DSemanticDiagram;
196
import org.eclipse.sirius.viewpoint.DSemanticDiagram;
186
import org.eclipse.sirius.viewpoint.SiriusPlugin;
197
import org.eclipse.sirius.viewpoint.SiriusPlugin;
198
import org.eclipse.sirius.viewpoint.description.Layer;
199
import org.eclipse.sirius.viewpoint.description.Viewpoint;
187
import org.eclipse.swt.SWT;
200
import org.eclipse.swt.SWT;
188
import org.eclipse.swt.graphics.Image;
201
import org.eclipse.swt.graphics.Image;
189
import org.eclipse.swt.layout.FillLayout;
202
import org.eclipse.swt.layout.FillLayout;
Lines 341-346 public class DDiagramEditorImpl extends SiriusDiagramEditor implements DDiagramE Link Here
341
     */
354
     */
342
    @Override
355
    @Override
343
    public void init(final IEditorSite site, IEditorInput input) throws PartInitException {
356
    public void init(final IEditorSite site, IEditorInput input) throws PartInitException {
357
        // If the current DDiagram is shared on a CDO repository and
358
        // some
359
        // needed Viewpoints are not activated (for example a
360
        // contributed
361
        // activated layer)
362
        final DDiagram diag;
363
        if (input instanceof DiagramDialectEditorInput) {
364
            diag = ((DiagramDialectEditorInput) input).getAndForgetDiagram();
365
        } else {
366
            diag = null;
367
        }
368
        Set<Viewpoint> viewpointsActivated = null;
369
        if (diag != null && URIQuery.CDO_URI_SCHEME.equals(diag.eResource().getURI().scheme())) {
370
            viewpointsActivated = activateNeededViewpoints(session, diag, new NullProgressMonitor());
371
        }
372
344
        IEditorInput correctedInput = getCorrectedInput(input);
373
        IEditorInput correctedInput = getCorrectedInput(input);
345
374
346
        if (correctedInput instanceof SessionEditorInput) {
375
        if (correctedInput instanceof SessionEditorInput) {
Lines 393-398 public class DDiagramEditorImpl extends SiriusDiagramEditor implements DDiagramE Link Here
393
            SiriusDiagramEditorPlugin.getInstance().getLog().log(new Status(IStatus.ERROR, SiriusDiagramEditorPlugin.ID, "Error while getting the session.", e));
422
            SiriusDiagramEditorPlugin.getInstance().getLog().log(new Status(IStatus.ERROR, SiriusDiagramEditorPlugin.ID, "Error while getting the session.", e));
394
        }
423
        }
395
424
425
        if (viewpointsActivated != null && !viewpointsActivated.isEmpty()) {
426
            informOfActivateNeededViewpoints(viewpointsActivated);
427
        }
428
        if (diag != null) {
429
            new DiagramDialectArrangeOperation().arrange(this, diag);
430
        }
431
    }
432
433
    private Set<Viewpoint> activateNeededViewpoints(Session session, DDiagram dDiagram, IProgressMonitor monitor) {
434
        List<Layer> activatedLayers = dDiagram.getActivatedLayers();
435
        Set<Viewpoint> neededViewpoints = new LinkedHashSet<Viewpoint>();
436
        for (Layer activatedLayer : activatedLayers) {
437
            if (!activatedLayer.eIsProxy() && activatedLayer.eContainer() != null) {
438
                Viewpoint viewpoint = (Viewpoint) activatedLayer.eContainer().eContainer();
439
                neededViewpoints.add(viewpoint);
440
            }
441
        }
442
        Set<Viewpoint> selectedViewpoints = new LinkedHashSet<Viewpoint>();
443
        for (Viewpoint viewpoint : session.getSelectedViewpoints(false)) {
444
            selectedViewpoints.add(SiriusResourceHelper.getCorrespondingViewpoint(session, viewpoint));
445
        }
446
        neededViewpoints.removeAll(selectedViewpoints);
447
        if (!neededViewpoints.isEmpty()) {
448
            Command changeViewpointsSelectionCmd = new ChangeViewpointSelectionCommand(session, new ViewpointSelectionCallback(), neededViewpoints, Collections.<Viewpoint> emptySet(),
449
                    new SubProgressMonitor(monitor, neededViewpoints.size()));
450
            session.getTransactionalEditingDomain().getCommandStack().execute(changeViewpointsSelectionCmd);
451
            monitor.worked(1);
452
        }
453
        return neededViewpoints;
454
    }
455
456
    private void informOfActivateNeededViewpoints(Set<Viewpoint> viewpointsActivated) {
457
        Iterator<Viewpoint> iterator = viewpointsActivated.iterator();
458
        Viewpoint neededSirius = iterator.next();
459
        String viewpointsName = neededSirius.getName();
460
        while (iterator.hasNext()) {
461
            neededSirius = iterator.next();
462
            viewpointsName += ", " + neededSirius.getName();
463
        }
464
        final String description = viewpointsName;
465
        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
466
467
            public void run() {
468
                MessageDialog.openInformation(PlatformUI.getWorkbench().getDisplay().getActiveShell(), "Viewpoints selection", "The current diagram requires some viewpoints selected (" + description
469
                        + "), because some activated layers are contributed by these viewpoints");
470
            }
471
472
        });
396
    }
473
    }
397
474
398
    private void initUndoContext() {
475
    private void initUndoContext() {
(-)a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/business/internal/dialect/TableDialectUIServices.java (-9 / +40 lines)
Lines 88-104 public class TableDialectUIServices implements DialectUIServices { Link Here
88
                DslCommonPlugin.PROFILER.startWork(SiriusTasksKey.OPEN_TABLE_KEY);
88
                DslCommonPlugin.PROFILER.startWork(SiriusTasksKey.OPEN_TABLE_KEY);
89
                final URI uri = EcoreUtil.getURI(dTable);
89
                final URI uri = EcoreUtil.getURI(dTable);
90
                final String editorName = DialectUIManager.INSTANCE.getEditorName(dTable);
90
                final String editorName = DialectUIManager.INSTANCE.getEditorName(dTable);
91
                monitor.worked(2);
92
                final IEditorInput editorInput = new SessionEditorInput(uri, editorName, session);
91
                final IEditorInput editorInput = new SessionEditorInput(uri, editorName, session);
92
                monitor.worked(2);
93
93
94
                final String editorId;
94
                final String editorId = getEditorID(dRepresentation);
95
                if (dTable.getDescription() instanceof EditionTableDescription) {
96
                    editorId = DTableEditionEditor.ID;
97
                } else if (dTable.getDescription() instanceof CrossTableDescription) {
98
                    editorId = DTableCrossEditor.ID;
99
                } else {
100
                    editorId = null;
101
                }
102
                if (editorId != null) {
95
                if (editorId != null) {
103
                    monitor.subTask("table opening : " + dRepresentation.getName());
96
                    monitor.subTask("table opening : " + dRepresentation.getName());
104
                    RunnableWithResult<IEditorPart> runnable = new RunnableWithResult.Impl<IEditorPart>() {
97
                    RunnableWithResult<IEditorPart> runnable = new RunnableWithResult.Impl<IEditorPart>() {
Lines 127-132 public class TableDialectUIServices implements DialectUIServices { Link Here
127
    }
120
    }
128
121
129
    /**
122
    /**
123
     *  {@inheritDoc}
124
     *  
125
     * @see org.eclipse.sirius.ui.business.api.dialect.DialectUIServices#getEditorID(org.eclipse.sirius.viewpoint.DRepresentation)
126
     */
127
    public String getEditorID(DRepresentation dRepresentation) {
128
        final String editorId;
129
        if (dRepresentation instanceof DTable) {
130
            DTable dTable = (DTable) dRepresentation;
131
            if (dTable.getDescription() instanceof EditionTableDescription) {
132
                editorId = DTableEditionEditor.ID;
133
            } else if (dTable.getDescription() instanceof CrossTableDescription) {
134
                editorId = DTableCrossEditor.ID;
135
            } else {
136
                editorId = null;
137
            }
138
        } else {
139
            editorId = null;
140
        }
141
        return editorId;
142
    }
143
    
144
    @Override
145
    public SessionEditorInput getEditorInput(Session session, DRepresentation dRepresentation) {
146
        final SessionEditorInput res;
147
        
148
        if (dRepresentation instanceof DTable) {
149
            final DTable dTable = (DTable) dRepresentation;
150
            final URI uri = EcoreUtil.getURI(dTable);
151
            final String editorName = DialectUIManager.INSTANCE.getEditorName(dTable);
152
            res = new SessionEditorInput(uri, editorName, session);
153
        } else {
154
            res = null;
155
        }
156
        
157
        return res;
158
    }
159
    
160
    /**
130
     * 
161
     * 
131
     * {@inheritDoc}
162
     * {@inheritDoc}
132
     */
163
     */
(-)a/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/business/internal/dialect/TreeDialectUIServices.java (-4 / +26 lines)
Lines 88-108 public class TreeDialectUIServices implements DialectUIServices { Link Here
88
    /**
88
    /**
89
     * {@inheritDoc}
89
     * {@inheritDoc}
90
     */
90
     */
91
    public IEditorPart openEditor(Session session, DRepresentation dRepresentation, IProgressMonitor monitor) {
91
    public IEditorPart openEditor(final Session session, final DRepresentation dRepresentation, IProgressMonitor monitor) {
92
        IEditorPart editorPart = null;
92
        IEditorPart editorPart = null;
93
        try {
93
        try {
94
            monitor.beginTask("tree opening", 10);
94
            monitor.beginTask("tree opening", 10);
95
            if (dRepresentation instanceof DTree) {
95
            if (dRepresentation instanceof DTree) {
96
                DslCommonPlugin.PROFILER.startWork(SiriusTasksKey.OPEN_TREE_KEY);
96
                DslCommonPlugin.PROFILER.startWork(SiriusTasksKey.OPEN_TREE_KEY);
97
                URI uri = EcoreUtil.getURI(dRepresentation);
97
                final IEditorInput editorInput = getEditorInput(session, dRepresentation);
98
                final IEditorInput editorInput = new SessionEditorInput(uri, getEditorName(dRepresentation), session);
99
                monitor.worked(2);
98
                monitor.worked(2);
100
                monitor.subTask("tree opening : " + dRepresentation.getName());
99
                monitor.subTask("tree opening : " + dRepresentation.getName());
101
                RunnableWithResult<IEditorPart> runnable = new RunnableWithResult.Impl<IEditorPart>() {
100
                RunnableWithResult<IEditorPart> runnable = new RunnableWithResult.Impl<IEditorPart>() {
102
                    public void run() {
101
                    public void run() {
103
                        final IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
102
                        final IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
104
                        try {
103
                        try {
105
                            setResult(page.openEditor(editorInput, DTreeEditor.ID));
104
                            setResult(page.openEditor(editorInput, getEditorID(dRepresentation)));
106
                        } catch (final PartInitException e) {
105
                        } catch (final PartInitException e) {
107
                            // silent catch
106
                            // silent catch
108
                        }
107
                        }
Lines 125-130 public class TreeDialectUIServices implements DialectUIServices { Link Here
125
    /**
124
    /**
126
     * {@inheritDoc}
125
     * {@inheritDoc}
127
     * 
126
     * 
127
     * @see org.eclipse.sirius.ui.business.api.dialect.DialectUIServices#getEditorID(org.eclipse.sirius.viewpoint.DRepresentation)
128
     */
129
    public String getEditorID(DRepresentation dRepresentation) {
130
        return DTreeEditor.ID;
131
    }
132
    
133
    @Override
134
    public SessionEditorInput getEditorInput(Session session, DRepresentation dRepresentation) {
135
        final SessionEditorInput res;
136
        
137
        if (dRepresentation instanceof DTree) {
138
            final URI uri = EcoreUtil.getURI(dRepresentation);
139
            res = new SessionEditorInput(uri, getEditorName(dRepresentation), session);
140
        } else {
141
            res = null;
142
        }
143
        
144
        return res;
145
    }
146
    
147
    /**
148
     * {@inheritDoc}
149
     * 
128
     * @see org.eclipse.sirius.ui.business.api.dialect.DialectUIServices#getEditorName(org.eclipse.sirius.viewpoint.DRepresentation)
150
     * @see org.eclipse.sirius.ui.business.api.dialect.DialectUIServices#getEditorName(org.eclipse.sirius.viewpoint.DRepresentation)
129
     */
151
     */
130
    public String getEditorName(DRepresentation representation) {
152
    public String getEditorName(DRepresentation representation) {
(-)a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/dialect/DialectUIServices.java (+21 lines)
Lines 20-25 import org.eclipse.emf.ecore.EObject; Link Here
20
import org.eclipse.emf.edit.command.CommandParameter;
20
import org.eclipse.emf.edit.command.CommandParameter;
21
import org.eclipse.jface.viewers.ILabelProvider;
21
import org.eclipse.jface.viewers.ILabelProvider;
22
import org.eclipse.sirius.business.api.session.Session;
22
import org.eclipse.sirius.business.api.session.Session;
23
import org.eclipse.sirius.ui.business.api.session.SessionEditorInput;
23
import org.eclipse.sirius.ui.tools.api.actions.export.SizeTooLargeException;
24
import org.eclipse.sirius.ui.tools.api.actions.export.SizeTooLargeException;
24
import org.eclipse.sirius.viewpoint.DRepresentation;
25
import org.eclipse.sirius.viewpoint.DRepresentation;
25
import org.eclipse.sirius.viewpoint.DRepresentationElement;
26
import org.eclipse.sirius.viewpoint.DRepresentationElement;
Lines 100-105 public interface DialectUIServices { Link Here
100
    IEditorPart openEditor(Session session, DRepresentation dRepresentation, IProgressMonitor monitor);
101
    IEditorPart openEditor(Session session, DRepresentation dRepresentation, IProgressMonitor monitor);
101
102
102
    /**
103
    /**
104
     * Gets the editor ID for the given representation.
105
     * @param dRepresentation
106
     *            {@link DRepresentation} to open.
107
     * 
108
     * @return the editor ID for the given representation if any, <code>null</code> otherwise.
109
     */
110
    String getEditorID(DRepresentation dRepresentation);
111
    
112
    /**
113
     * Gets the {@link SessionEditorInput} for the given {@link Session} and {@link DRepresentation}. 
114
     *  
115
     * @param session
116
     *            the current {@link Session}.
117
     * @param dRepresentation
118
     *            {@link DRepresentation} to open.
119
     * @return the {@link SessionEditorInput} for the given {@link Session} and {@link DRepresentation}, or <code>null</code> if none could be created
120
     */
121
    SessionEditorInput getEditorInput(Session session, DRepresentation dRepresentation);    
122
    
123
    /**
103
     * Sets the given {@link DRepresentationElement}s as current selection for
124
     * Sets the given {@link DRepresentationElement}s as current selection for
104
     * the editor.
125
     * the editor.
105
     * 
126
     * 
(-)a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/internal/dialect/DialectUIManagerImpl.java (+24 lines)
Lines 31-36 import org.eclipse.sirius.ui.business.api.dialect.DialectEditor; Link Here
31
import org.eclipse.sirius.ui.business.api.dialect.DialectUI;
31
import org.eclipse.sirius.ui.business.api.dialect.DialectUI;
32
import org.eclipse.sirius.ui.business.api.dialect.DialectUIManager;
32
import org.eclipse.sirius.ui.business.api.dialect.DialectUIManager;
33
import org.eclipse.sirius.ui.business.api.dialect.ExportFormat;
33
import org.eclipse.sirius.ui.business.api.dialect.ExportFormat;
34
import org.eclipse.sirius.ui.business.api.session.SessionEditorInput;
34
import org.eclipse.sirius.ui.tools.api.actions.export.SizeTooLargeException;
35
import org.eclipse.sirius.ui.tools.api.actions.export.SizeTooLargeException;
35
import org.eclipse.sirius.viewpoint.DRepresentation;
36
import org.eclipse.sirius.viewpoint.DRepresentation;
36
import org.eclipse.sirius.viewpoint.DRepresentationElement;
37
import org.eclipse.sirius.viewpoint.DRepresentationElement;
Lines 99-104 public class DialectUIManagerImpl implements DialectUIManager { Link Here
99
     * 
100
     * 
100
     * {@inheritDoc}
101
     * {@inheritDoc}
101
     */
102
     */
103
    public String getEditorID(DRepresentation dRepresentation) {
104
        for (final DialectUI dialect : dialects.values()) {
105
            if (dialect.getServices().canHandle(dRepresentation)) {
106
                return dialect.getServices().getEditorID(dRepresentation);
107
            }
108
        }
109
        return null;
110
    }
111
    
112
    @Override
113
    public SessionEditorInput getEditorInput(Session session, DRepresentation dRepresentation) {
114
        for (final DialectUI dialect : dialects.values()) {
115
            if (dialect.getServices().canHandle(dRepresentation)) {
116
                return dialect.getServices().getEditorInput(session, dRepresentation);
117
            }
118
        }
119
        return null;
120
    }
121
    
122
    /**
123
     * 
124
     * {@inheritDoc}
125
     */
102
    public Collection<CommandParameter> provideNewChildDescriptors() {
126
    public Collection<CommandParameter> provideNewChildDescriptors() {
103
        final Collection<CommandParameter> result = new ArrayList<CommandParameter>();
127
        final Collection<CommandParameter> result = new ArrayList<CommandParameter>();
104
        for (final DialectUI dialect : dialects.values()) {
128
        for (final DialectUI dialect : dialects.values()) {

Return to bug 426431