Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Barbin2018-02-07 14:24:05 +0000
committerFlorian Barbin2018-02-13 15:57:52 +0000
commitf149f029aef5d43315f6385e236e67f18c5394e4 (patch)
treef7573f1d1abf9bb9dc90a2b947dda90ed00d4d64
parent18bd7f7145958f62878c09975602fb6eb3bb5576 (diff)
downloadorg.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>
-rw-r--r--plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/actions/export/ExportRepresentationsFromFileAction.java31
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/session/SessionManager.java5
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}

Back to the top