diff options
author | Florian Barbin | 2018-02-07 14:24:05 +0000 |
---|---|---|
committer | Florian Barbin | 2018-02-13 15:57:52 +0000 |
commit | f149f029aef5d43315f6385e236e67f18c5394e4 (patch) | |
tree | f7573f1d1abf9bb9dc90a2b947dda90ed00d4d64 | |
parent | 18bd7f7145958f62878c09975602fb6eb3bb5576 (diff) | |
download | org.eclipse.sirius-f149f029aef5d43315f6385e236e67f18c5394e4.tar.gz org.eclipse.sirius-f149f029aef5d43315f6385e236e67f18c5394e4.tar.xz org.eclipse.sirius-f149f029aef5d43315f6385e236e67f18c5394e4.zip |
[530875] Avoid to close session after export representations as images
Bug: 497469
Bug: 530875
Cherry-picked-from: a225bf13e81605751bb3dce80c362755109f86e3
Change-Id: Ic7277a80cd92e5f32a07181e57bd2c64e08e4850
Signed-off-by: Florian Barbin <florian.barbin@obeo.fr>
2 files changed, 24 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 649ca8e55d..8488944d87 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) { final Collection<DRepresentation> dRepresentationsToExportAsImage = DialectManager.INSTANCE.getAllRepresentations(session); if (!dRepresentationsToExportAsImage.isEmpty()) { @@ -76,7 +76,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()); @@ -106,6 +106,13 @@ 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; @@ -116,30 +123,34 @@ 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(); 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); - 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 62ef05564a..eafd232667 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 @@ -144,8 +144,9 @@ 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} |