ref #6359 improve reporting for longrunning tasks with UpdateResult in TaxEditor
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 11 May 2021 13:32:29 +0000 (15:32 +0200)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 11 May 2021 13:32:54 +0000 (15:32 +0200)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java

index c99f4153e7cd98b57afdab7d3060238888eaf05d..2713f1cbb8f8866ba3f21f52a93c43b01aa5cc9a 100644 (file)
@@ -60,6 +60,9 @@ import org.eclipse.ui.progress.IProgressConstants;
 import eu.etaxonomy.cdm.api.application.CdmApplicationState;
 import eu.etaxonomy.cdm.api.service.IProgressMonitorService;
 import eu.etaxonomy.cdm.api.service.UpdateResult;
+import eu.etaxonomy.cdm.api.service.dto.CdmEntityIdentifier;
+import eu.etaxonomy.cdm.common.CdmUtils;
+import eu.etaxonomy.cdm.common.SetMap;
 import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.io.common.ExportDataWrapper;
@@ -706,36 +709,55 @@ public abstract class AbstractUtility {
         if (remotingMonitor.getResult() instanceof ExportResult) {
             reportSb.append(((ExportResult)remotingMonitor.getResult()).createReport());
         }else if (remotingMonitor.getResult() instanceof UpdateResult){
-            if (((UpdateResult)remotingMonitor.getResult()).isOk()){
-                int count = ((UpdateResult)remotingMonitor.getResult()).getUpdatedObjects().size();
-                if (count == 0){
-                    count = ((UpdateResult)remotingMonitor.getResult()).getUpdatedCdmIds().size();
-                }
-
-                reportSb.append("Update successful. \n"+"Updated Objects: " +count);
-            }
-            if (!((UpdateResult)remotingMonitor.getResult()).getExceptions().isEmpty()){
-                reportSb.append(((UpdateResult)remotingMonitor.getResult()).getExceptions().toString());
-            }
+            UpdateResult result = (UpdateResult)remotingMonitor.getResult();
+            createUpdateResultReport(reportSb, result);
         }else if (remotingMonitor.getReports()!= null){
             for (String o:remotingMonitor.getReports()){
                 reportSb.append(o);
             }
         }
-        if(showResult && !StringUtils.isBlank(reportSb.toString()) && reportSb.length() != 0) {
+        String report = reportSb.toString();
+        if(showResult && !StringUtils.isBlank(report)) {
             Display.getDefault().asyncExec(new Runnable() {
                 @Override
                 public void run() {
                     // display reports with possibility to save
                     ReportTextDialog dialog = new ReportTextDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
                     dialog.setTitle(label + " Report");
-                    dialog.setReportText(reportSb.toString());
+                    dialog.setReportText(report);
                     dialog.open();
                 }
             });
         }
     }
 
+    public static void createUpdateResultReport(final StringBuilder reportSb, UpdateResult result) {
+        if (result.isOk() || result.isAbort()){
+            SetMap<Class<? extends CdmBase>, Integer> map = getUpdateResultStatistics(result);
+            reportSb.append("Update successful. \n"
+              + "Updated Objects: " + map.sizeAll() + "\n================\n");
+            for (Class<? extends CdmBase> clazz : map.keySet()){
+                reportSb.append( CdmUtils.userFriendlyClassName(clazz)+": " + map.get(clazz).size() + "\n");
+            }
+        }
+        if (!result.getExceptions().isEmpty()){
+            reportSb.append(result.getExceptions().toString());
+        }
+    }
+
+    //TODO move to cdmlib
+    public static SetMap<Class<? extends CdmBase>, Integer> getUpdateResultStatistics(UpdateResult result) {
+        SetMap<Class<? extends CdmBase>, Integer> map = new SetMap<>();
+        for (CdmBase cdmBase : result.getUpdatedObjects()){
+            map.putItem(cdmBase.getClass(), cdmBase.getId());
+        }
+        for (CdmEntityIdentifier entity : result.getUpdatedCdmIds()){
+            map.putItem(entity.getCdmClass(), entity.getId());
+        }
+
+        return map;
+    }
+
     private static void createExportResult(final String label, String urlString, boolean createZip,
             IRemotingProgressMonitor remotingMonitor) {