[539996] Improve monitor steps on export all representations as images

Monitor steps are no longer based on a fixed value but on the number of
representations to export as images

Bug: 539996
Change-Id: I81e195b061f6147100cf25af36480e56dcab69e5
Signed-off-by: Steve Monnier <steve.monnier@obeo.fr>
diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/api/actions/export/ExportAction.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/api/actions/export/ExportAction.java
index 64aeb1f..5d4e8fc 100644
--- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/api/actions/export/ExportAction.java
+++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/api/actions/export/ExportAction.java
@@ -134,7 +134,7 @@
     @Override
     protected void execute(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
         try {
-            monitor.beginTask(ExportAction.EXPORT_DIAGRAMS_AS_IMAGES_ACTION_TITLE, 7);
+            monitor.beginTask(ExportAction.EXPORT_DIAGRAMS_AS_IMAGES_ACTION_TITLE, dRepresentationsToExportAsImage.size());
             try {
                 createImageFiles(monitor);
             } catch (final OutOfMemoryError | SizeTooLargeException e) {
@@ -212,7 +212,9 @@
                     }
                     if (DialectUIManager.INSTANCE.canHandle(representation)) {
                         try {
+                            monitor.subTask("Export as image: " + representation.getName()); //$NON-NLS-1$
                             DialectUIManager.INSTANCE.export(representation, session, filePath, exportFormat, monitor, exportDecorations);
+                            monitor.worked(1);
                         } catch (CoreException exception) {
                             if (exception instanceof SizeTooLargeException) {
                                 errorDuringExport = true;
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 bb87fcc..97f4324 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
@@ -144,22 +144,22 @@
         @Override
         protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException {
             boolean isOpen = false;
-            SubMonitor subMonitor = SubMonitor.convert(monitor, Messages.ExportRepresentationsFromFileAction_exportTask, 10);
             try {
                 isOpen = session.isOpen();
                 if (!isOpen) {
-                    session = SessionManager.INSTANCE.openSession(sessionResourceURI, subMonitor.newChild(2), SiriusEditPlugin.getPlugin().getUiCallback());
+                    session = SessionManager.INSTANCE.openSession(sessionResourceURI, monitor, SiriusEditPlugin.getPlugin().getUiCallback());
                 }
                 if (session != null) {
                     // Get explicitly all representations (with loading them)
                     final Collection<DRepresentation> dRepresentationsToExportAsImage = DialectManager.INSTANCE.getAllRepresentations(session);
+                    SubMonitor subMonitor = SubMonitor.convert(monitor, Messages.ExportRepresentationsFromFileAction_exportTask, dRepresentationsToExportAsImage.size());
                     ExportAction exportAction = new ExportAction(session, dRepresentationsToExportAsImage, outputPath, imageFormat, exportToHtml, exportDecorations);
                     exportAction.setDiagramScaleLevel(scaleLevel);
-                    exportAction.run(subMonitor.newChild(7));
+                    exportAction.run(subMonitor.newChild(dRepresentationsToExportAsImage.size()));
                 }
             } finally {
                 if (!isOpen && session != null) {
-                    session.close(subMonitor.newChild(1));
+                    session.close(monitor);
                 }
                 monitor.done();
             }