From: Andreas Müller Date: Tue, 11 May 2021 13:32:29 +0000 (+0200) Subject: ref #6359 improve reporting for longrunning tasks with UpdateResult in TaxEditor X-Git-Tag: 5.23.0^2~28 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/63fb5a6ded56258656ec5a772cd9d01dc2277ace ref #6359 improve reporting for longrunning tasks with UpdateResult in TaxEditor --- diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java index c99f4153e..2713f1cbb 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java @@ -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, Integer> map = getUpdateResultStatistics(result); + reportSb.append("Update successful. \n" + + "Updated Objects: " + map.sizeAll() + "\n================\n"); + for (Class 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, Integer> getUpdateResultStatistics(UpdateResult result) { + SetMap, 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) {