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());
+ }
+ }
+ }
+ }
}