X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/b4af1c2e935612a9b2a6715eb918a8c596cd8082..c4731c58dec835d6bd04bb5eec348042073e0824:/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java 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 b39a7f7ab..85c65e7c8 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 @@ -39,6 +39,7 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.SubMonitor; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.e4.ui.di.UISynchronize; @@ -58,6 +59,7 @@ 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.common.monitor.IRemotingProgressMonitor; import eu.etaxonomy.cdm.io.common.ExportDataWrapper; import eu.etaxonomy.cdm.io.common.ExportResult; @@ -69,7 +71,6 @@ import eu.etaxonomy.taxeditor.operation.AbstractPostOperation; import eu.etaxonomy.taxeditor.operation.IFeedbackGenerator; import eu.etaxonomy.taxeditor.operation.IPostMoniteredOperationEnabled; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; -import eu.etaxonomy.taxeditor.operation.RemotingCdmHandler; import eu.etaxonomy.taxeditor.operation.e4.RemotingCdmHandlerE4; import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin; @@ -86,7 +87,7 @@ import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart; */ public abstract class AbstractUtility { - private static final Logger logger = Logger.getLogger(AbstractUtility.class); + protected static final Logger logger = Logger.getLogger(AbstractUtility.class); /** Constant statusLineManager */ protected static IStatusLineManager statusLineManager; @@ -161,7 +162,7 @@ public abstract class AbstractUtility { job.setUser(true); job.schedule(); } catch (Exception e) { - MessagingUtils.messageDialog("Error executing operation", AbstractUtility.class, "An error occured while executing " + operation.getLabel(), e); + MessagingUtils.messageDialog("Error executing operation", AbstractUtility.class, "An error occurred while executing " + operation.getLabel(), e); } return Status.OK_STATUS; @@ -171,11 +172,7 @@ public abstract class AbstractUtility { return executeOperation_internal(operation, handler, sync); } - public static IStatus executeOperation(final AbstractOperation operation, final RemotingCdmHandler handler, UISynchronize sync) { - return executeOperation_internal(operation, handler, sync); - } - - private static IStatus executeOperation_internal(final AbstractOperation operation, final Object handler, + private static IStatus executeOperation_internal(final AbstractOperation operation, final RemotingCdmHandlerE4 handler, UISynchronize sync) { if (getOperationHistory() == null) { throw new IllegalArgumentException( @@ -195,12 +192,7 @@ public abstract class AbstractUtility { operation.addContext(IOperationHistory.GLOBAL_UNDO_CONTEXT); status = operation.execute(monitor, uiInfoAdapter); - if(handler instanceof RemotingCdmHandler) { - ((RemotingCdmHandler) handler).postOperation(status); - } - else if(handler instanceof RemotingCdmHandlerE4) { - ((RemotingCdmHandlerE4) handler).postOperation(status); - } + handler.postOperation(status); } catch (ExecutionException e) { MessagingUtils.operationDialog(AbstractUtility.class, e, TaxeditorStorePlugin.PLUGIN_ID, operationlabel, null); } finally { @@ -217,7 +209,7 @@ public abstract class AbstractUtility { job.setUser(true); sync.syncExec(()->job.schedule()); } catch (Exception e) { - MessagingUtils.messageDialog("Error executing operation", AbstractUtility.class, "An error occured while executing " + operation.getLabel(), e); + MessagingUtils.messageDialog("Error executing operation", AbstractUtility.class, "An error occurred while executing " + operation.getLabel(), e); } return Status.OK_STATUS; @@ -250,6 +242,9 @@ public abstract class AbstractUtility { if(firstRemotingMonitor == null) { throw new IllegalStateException("Remoting progress monitor is null"); } + if (firstRemotingMonitor.isDone()){ + createExportResult(label, urlString, createZip, firstRemotingMonitor); + } Job job = new Job(label) { @@ -257,7 +252,8 @@ public abstract class AbstractUtility { @Override public IStatus run(IProgressMonitor monitor) { // run the monitor until the operation is finished - monitor.beginTask("Start", 100); + SubMonitor subMonitor = SubMonitor.convert(monitor, 100); + //subMonitor.beginTask("Start", 100); IRemotingProgressMonitor remotingMonitor; try { remotingMonitor = CdmStore.getProgressMonitorClientManager().pollMonitor(label, @@ -265,100 +261,17 @@ public abstract class AbstractUtility { pollInterval, postOp, feedbackGenerator, - monitor); + subMonitor); } catch (Exception ex) { return new Status(Status.ERROR, TaxeditorStorePlugin.PLUGIN_ID, "Operation Interrupted", ex); } - final StringBuilder reportSb = new StringBuilder(); - if (remotingMonitor.getResult() instanceof ExportResult){ - ExportResult result = (ExportResult)remotingMonitor.getResult(); - - reportSb.append(result.createReport()); - - if(!StringUtils.isBlank(reportSb.toString())) { - 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.open(); - } - }); - } - - if (urlString != null){ - ExportDataWrapper data = result.getExportData(); - try{ - if (result.getExportData().getType().equals(ExportResultType.BYTE_ARRAY)){ - byte[] exportData = (byte[])data.getExportData(); - if(exportData != null){ - File file = new File(urlString); - FileOutputStream stream = new FileOutputStream(file); - Writer out = new BufferedWriter(new OutputStreamWriter( - stream, "UTF8")); - - stream.write(exportData); - out.flush(); - stream.close(); - } - } else if (result.getExportData().getType().equals(ExportResultType.MAP_BYTE_ARRAY)){ - Map resultMap = (Map)data.getExportData(); - Set keySet = resultMap.keySet(); - SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW); - Calendar cal = Calendar.getInstance(); - String fileEnding = ".csv"; - - if (createZip){ - File file = new File(urlString+File.separator + sdf.format(cal.getTime())+ ".zip"); - FileOutputStream stream = new FileOutputStream(file); - ZipOutputStream zos = new ZipOutputStream(stream); - for (String key: keySet){ - byte[] fileData = resultMap.get(key); - ZipEntry entry = new ZipEntry( key + fileEnding); - zos.putNextEntry(entry); - zos.write(fileData); - zos.closeEntry(); - } - zos.close(); - }else{ - if(result.getExportType().equals(ExportType.DWCA)){ - - File file = new File(urlString); - FileOutputStream stream = new FileOutputStream(file); - ZipOutputStream zos = new ZipOutputStream(stream); - for (String key: keySet){ - byte[] fileData = resultMap.get(key); - ZipEntry entry = new ZipEntry( key + fileEnding); - zos.putNextEntry(entry); - zos.write(fileData); - zos.closeEntry(); - } - zos.close(); - }else{ - for (String key: keySet){ - byte[] fileData = resultMap.get(key); - File file = new File(urlString+File.separator + key + fileEnding); - FileOutputStream stream = new FileOutputStream(file); - Writer out = new BufferedWriter(new OutputStreamWriter( - stream, "UTF8")); - stream.write(fileData); - stream.close(); - } - } - } - }else{ - logger.error("This kind of result data is not supported yet." + result.getExportData().getType().toString()); - } - } catch(Exception e){ - logger.error(e.getStackTrace()); - } - } - } + + createExportResult(label, urlString, createZip, remotingMonitor); return Status.OK_STATUS; } + + @Override protected void canceling() { CdmStore.getCurrentApplicationConfiguration().getProgressMonitorService().cancel(uuid); @@ -374,7 +287,7 @@ public abstract class AbstractUtility { } catch (Exception e) { MessagingUtils.errorDialog("Error executing operation", AbstractUtility.class, - "An error occured while executing " + label, + "An error occurred while executing " + label, TaxeditorStorePlugin.PLUGIN_ID, e, true); @@ -681,7 +594,8 @@ public abstract class AbstractUtility { final int pollInterval, final boolean cancelable, final IPostMoniteredOperationEnabled postOp, - final IFeedbackGenerator feedbackGenerator) { + final IFeedbackGenerator feedbackGenerator, + final boolean showResult) { try{ // get the remoting monitor the first time to make sure that the @@ -691,6 +605,10 @@ public abstract class AbstractUtility { if(firstRemotingMonitor == null) { throw new IllegalStateException("Remoting progress monitor is null"); } + if (firstRemotingMonitor.isDone()){ + createResult(label, showResult, firstRemotingMonitor); + return Status.OK_STATUS; + } Job job = new Job(label) { @@ -698,7 +616,9 @@ public abstract class AbstractUtility { @Override public IStatus run(IProgressMonitor monitor) { // run the monitor until the operation is finished - monitor.beginTask("Start", 100); + SubMonitor subMonitor = SubMonitor.convert(monitor, 100); + // subMonitor.beginTask("Start", 100); + IRemotingProgressMonitor remotingMonitor; try { remotingMonitor = CdmStore.getProgressMonitorClientManager().pollMonitor(label, @@ -706,30 +626,21 @@ public abstract class AbstractUtility { pollInterval, postOp, feedbackGenerator, - monitor); + subMonitor); } catch (Exception ex) { return new Status(Status.ERROR, TaxeditorStorePlugin.PLUGIN_ID, "Operation Interrupted", ex); } - final StringBuilder reportSb = new StringBuilder(); + + // collect reports // for(String report : remotingMonitor.getResult()) { - reportSb.append(((ExportResult)remotingMonitor.getResult()).createReport()); -// } - if(!StringUtils.isBlank(reportSb.toString())) { - 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.open(); - } - }); - } + createResult(label, showResult, remotingMonitor); + return Status.OK_STATUS; } + + @Override protected void canceling() { CdmStore.getCurrentApplicationConfiguration().getProgressMonitorService().cancel(uuid); @@ -737,7 +648,6 @@ public abstract class AbstractUtility { }; // configure the job - job.setProperty(IProgressConstants.KEEP_PROPERTY, true); job.setUser(true); // schedule job job.schedule(); @@ -745,7 +655,7 @@ public abstract class AbstractUtility { } catch (Exception e) { MessagingUtils.errorDialog("Error executing operation", AbstractUtility.class, - "An error occured while executing " + label, + "An error occurred while executing " + label, TaxeditorStorePlugin.PLUGIN_ID, e, true); @@ -754,4 +664,124 @@ public abstract class AbstractUtility { return Status.OK_STATUS; } + + private static void createResult(final String label, final boolean showResult, + IRemotingProgressMonitor remotingMonitor) { + final StringBuilder reportSb = new StringBuilder(); + if (remotingMonitor.getResult() instanceof ExportResult) { + reportSb.append(((ExportResult)remotingMonitor.getResult()).createReport()); + }else if (remotingMonitor.getResult() instanceof UpdateResult){ + if (((UpdateResult)remotingMonitor.getResult()).isOk()){ + reportSb.append("Update successful. \n"+"Updated Objects: " + ((UpdateResult)remotingMonitor.getResult()).getUpdatedObjects().size()); + } + if (!((UpdateResult)remotingMonitor.getResult()).getExceptions().isEmpty()){ + reportSb.append(((UpdateResult)remotingMonitor.getResult()).getExceptions().toString()); + } + } +// } + if(showResult && !StringUtils.isBlank(reportSb.toString()) && reportSb.length() != 0) { + 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.open(); + } + }); + } + } + + private static void createExportResult(final String label, String urlString, boolean createZip, + IRemotingProgressMonitor remotingMonitor) { + + final StringBuilder reportSb = new StringBuilder(); + if (remotingMonitor.getResult() instanceof ExportResult){ + ExportResult result = (ExportResult)remotingMonitor.getResult(); + + reportSb.append(result.createReport()); + + if(!StringUtils.isBlank(reportSb.toString())) { + 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.open(); + } + }); + } + + if (urlString != null){ + ExportDataWrapper data = result.getExportData(); + try{ + if (result.getExportData().getType().equals(ExportResultType.BYTE_ARRAY)){ + byte[] exportData = (byte[])data.getExportData(); + if(exportData != null){ + File file = new File(urlString); + FileOutputStream stream = new FileOutputStream(file); + Writer out = new BufferedWriter(new OutputStreamWriter( + stream, "UTF8")); + + stream.write(exportData); + out.flush(); + stream.close(); + } + } else if (result.getExportData().getType().equals(ExportResultType.MAP_BYTE_ARRAY)){ + Map resultMap = (Map)data.getExportData(); + Set keySet = resultMap.keySet(); + SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW); + Calendar cal = Calendar.getInstance(); + String fileEnding = ".csv"; + + if (createZip){ + File file = new File(urlString+File.separator + sdf.format(cal.getTime())+ ".zip"); + FileOutputStream stream = new FileOutputStream(file); + ZipOutputStream zos = new ZipOutputStream(stream); + for (String key: keySet){ + byte[] fileData = resultMap.get(key); + ZipEntry entry = new ZipEntry( key + fileEnding); + zos.putNextEntry(entry); + zos.write(fileData); + zos.closeEntry(); + } + zos.close(); + }else{ + if(result.getExportType().equals(ExportType.DWCA)){ + + File file = new File(urlString); + FileOutputStream stream = new FileOutputStream(file); + ZipOutputStream zos = new ZipOutputStream(stream); + for (String key: keySet){ + byte[] fileData = resultMap.get(key); + ZipEntry entry = new ZipEntry( key); + zos.putNextEntry(entry); + zos.write(fileData); + zos.closeEntry(); + } + zos.close(); + }else{ + for (String key: keySet){ + byte[] fileData = resultMap.get(key); + File file = new File(urlString+File.separator + key + fileEnding); + FileOutputStream stream = new FileOutputStream(file); + Writer out = new BufferedWriter(new OutputStreamWriter( + stream, "UTF8")); + stream.write(fileData); + stream.close(); + } + } + } + }else{ + logger.error("This kind of result data is not supported yet." + result.getExportData().getType().toString()); + } + } catch(Exception e){ + logger.error(e.getStackTrace()); + } + } + } + } }