diff options
| author | Florian Barbin | 2018-02-07 14:24:05 +0000 |
|---|---|---|
| committer | Florian Barbin | 2018-02-13 14:59:34 +0000 |
| commit | 42ee8ff9babc9d50ff3e7a700c1b18bc3007e7bf (patch) | |
| tree | d96babb40009dbc16bee218adef19bebc859c69e | |
| parent | cbe0d76108e5142c81e9f2ea8de2ce5a197c2a39 (diff) | |
| download | org.eclipse.sirius-42ee8ff9babc9d50ff3e7a700c1b18bc3007e7bf.tar.gz org.eclipse.sirius-42ee8ff9babc9d50ff3e7a700c1b18bc3007e7bf.tar.xz org.eclipse.sirius-42ee8ff9babc9d50ff3e7a700c1b18bc3007e7bf.zip | |
[530817] Avoid to close session after export representations as images
Bug: 530817
Bug: 497469
Cherry-picked-from: a225bf13e81605751bb3dce80c362755109f86e3
Change-Id: Ic7277a80cd92e5f32a07181e57bd2c64e08e4850
Signed-off-by: Florian Barbin <florian.barbin@obeo.fr>
2 files changed, 22 insertions, 12 deletions
diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/actions/export/ExportRepresentationsFromFileAction.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/actions/export/ExportRepresentationsFromFileAction.java index f13f2275ba..7c5fa9b44a 100644 --- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/actions/export/ExportRepresentationsFromFileAction.java +++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/actions/export/ExportRepresentationsFromFileAction.java @@ -20,7 +20,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.core.runtime.SubMonitor; import org.eclipse.emf.common.util.URI; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; @@ -64,7 +64,7 @@ public class ExportRepresentationsFromFileAction implements IObjectActionDelegat final Shell shell = Display.getCurrent().getActiveShell(); final IPath targetPath = this.sessionResourceFile.getParent().getLocation(); final URI sessionResourceURI = URI.createPlatformResourceURI(sessionResourceFile.getFullPath().toOSString(), true); - Session session = SessionManager.INSTANCE.getSession(sessionResourceURI, new SubProgressMonitor(new NullProgressMonitor(), 1)); + Session session = SessionManager.INSTANCE.getSession(sessionResourceURI, new NullProgressMonitor()); if (session != null) { // Get only rep desc to avoid loading representation here if we are in lazy. final Collection<DRepresentationDescriptor> dRepresentationsDescToExportAsImage = DialectManager.INSTANCE.getAllRepresentationDescriptors(session); @@ -77,7 +77,7 @@ public class ExportRepresentationsFromFileAction implements IObjectActionDelegat final ProgressMonitorDialog pmd = new ProgressMonitorDialog(shell); try { - pmd.run(false, false, new ExportRepresentationsWorkspaceModifyOperation(dialog, sessionResourceURI)); + pmd.run(false, false, new ExportRepresentationsWorkspaceModifyOperation(dialog, sessionResourceURI, session)); } catch (final InvocationTargetException e) { SiriusEditPlugin.getPlugin().getLog().log(new Status(IStatus.ERROR, SiriusEditPlugin.ID, e.getLocalizedMessage(), e)); MessageDialog.openError(shell, Messages.ExportRepresentationsFromFileAction_errorDialog_title, e.getTargetException().getMessage()); @@ -107,6 +107,12 @@ public class ExportRepresentationsFromFileAction implements IObjectActionDelegat } } + /** + * A {@link WorkspaceModifyOperation} that will execute the Export as images action. + * + * @author fbarbin + * + */ private class ExportRepresentationsWorkspaceModifyOperation extends WorkspaceModifyOperation { private IPath outputPath; @@ -123,7 +129,9 @@ public class ExportRepresentationsFromFileAction implements IObjectActionDelegat private URI sessionResourceURI; - ExportRepresentationsWorkspaceModifyOperation(ExportSeveralRepresentationsAsImagesDialog dialog, URI sessionResourceURI) { + private Session session; + + ExportRepresentationsWorkspaceModifyOperation(ExportSeveralRepresentationsAsImagesDialog dialog, URI sessionResourceURI, Session session) { this.outputPath = dialog.getOutputPath(); this.imageFormat = dialog.getImageFormat(); this.exportToHtml = dialog.isExportToHtml(); @@ -131,27 +139,29 @@ public class ExportRepresentationsFromFileAction implements IObjectActionDelegat this.autoScale = dialog.isAutoScaleDiagram(); this.scaleLevel = dialog.getDiagramScaleLevelInPercent(); this.sessionResourceURI = sessionResourceURI; + this.session = session; } @Override protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException { - Session session = null; boolean isOpen = false; + SubMonitor subMonitor = SubMonitor.convert(monitor, Messages.ExportRepresentationsFromFileAction_exportTask, 10); try { - monitor.beginTask(Messages.ExportRepresentationsFromFileAction_exportTask, 10); - session = SessionManager.INSTANCE.openSession(sessionResourceURI, new SubProgressMonitor(monitor, 2), SiriusEditPlugin.getPlugin().getUiCallback()); - + isOpen = session.isOpen(); + if (!isOpen) { + session = SessionManager.INSTANCE.openSession(sessionResourceURI, subMonitor.newChild(2), SiriusEditPlugin.getPlugin().getUiCallback()); + } if (session != null) { // Get explicitly all representations (with loading them) final Collection<DRepresentation> dRepresentationsToExportAsImage = DialectManager.INSTANCE.getAllRepresentations(session); ExportAction exportAction = new ExportAction(session, dRepresentationsToExportAsImage, outputPath, imageFormat, exportToHtml, exportDecorations); exportAction.setAutoScaleDiagram(autoScale); exportAction.setDiagramScaleLevel(scaleLevel); - exportAction.run(new SubProgressMonitor(monitor, 7)); + exportAction.run(subMonitor.newChild(7)); } } finally { if (!isOpen && session != null) { - session.close(new SubProgressMonitor(monitor, 1)); + session.close(subMonitor.newChild(1)); } monitor.done(); } diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/session/SessionManager.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/session/SessionManager.java index ee52056f80..ca686352ac 100644 --- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/session/SessionManager.java +++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/session/SessionManager.java @@ -142,8 +142,8 @@ public interface SessionManager { Session getExistingSession(URI sessionResourceURI); /** - * Try to open a session. If there is a version mismatch, the user may be asked if he wants to open the session - * anyway. + * Try to open a session. If the session is already opened, it returns the opened session. If there is a version + * mismatch, the user may be asked if he wants to open the session anyway. * * @param sessionResourceURI * a session Resource {@link URI} |
