Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Barbin2018-02-07 14:24:05 +0000
committerFlorian Barbin2018-02-13 14:59:34 +0000
commit42ee8ff9babc9d50ff3e7a700c1b18bc3007e7bf (patch)
treed96babb40009dbc16bee218adef19bebc859c69e
parentcbe0d76108e5142c81e9f2ea8de2ce5a197c2a39 (diff)
downloadorg.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>
-rw-r--r--plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/actions/export/ExportRepresentationsFromFileAction.java30
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/session/SessionManager.java4
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}

Back to the top