Merge branch 'release/4.0.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / io / ImportManager.java
index 89249cddc02f43a90f6d1dad5e9a9a85e6075259..809e19efa068a89ddf1c4d3f5d74ccfa71f1711d 100644 (file)
@@ -15,6 +15,8 @@ import java.io.InputStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.List;
+import java.util.UUID;
 
 import org.apache.commons.io.IOUtils;
 import org.eclipse.core.runtime.Assert;
@@ -23,12 +25,15 @@ import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
 
 import eu.etaxonomy.cdm.api.application.CdmApplicationState;
 import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
+import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
 import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
 import eu.etaxonomy.cdm.io.common.IImportConfigurator;
 import eu.etaxonomy.cdm.io.common.IImportConfigurator.SOURCE_TYPE;
+import eu.etaxonomy.cdm.io.common.ImportResult;
 import eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator;
 import eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator;
 import eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator;
@@ -37,10 +42,13 @@ import eu.etaxonomy.cdm.io.service.IIOService;
 import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator;
 import eu.etaxonomy.cdm.io.specimen.excel.in.SpecimenCdmExcelImportConfigurator;
 import eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.operation.IPostMoniteredOperationEnabled;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
+import eu.etaxonomy.taxeditor.ui.dialog.ReportTextDialog;
 
 /**
  * <p>
@@ -51,7 +59,7 @@ import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
  * @created Sep 11, 2009
  * @version 1.0
  */
-public class ImportManager extends AbstractIOManager<IImportConfigurator> {
+public class ImportManager extends AbstractIOManager<IImportConfigurator> implements IPostMoniteredOperationEnabled {
 
        /**
         * @param applicationConfiguration
@@ -103,9 +111,10 @@ public class ImportManager extends AbstractIOManager<IImportConfigurator> {
                                CdmDefaultImport<IImportConfigurator> importer = new CdmDefaultImport<IImportConfigurator>();
                                importer.setCdmAppController(applicationConfiguration);
                                monitor.worked(5);
-
+                               ImportResult importResult = null;
                                try {
-                                       importer.invoke(configurator);
+                                       importResult = importer.invoke(configurator);
+
                                        monitor.worked(80);
                                } catch (RuntimeException e) {
                                        MessagingUtils.messageDialog(
@@ -121,10 +130,23 @@ public class ImportManager extends AbstractIOManager<IImportConfigurator> {
                                monitor.worked(5);
                                monitor.done();
 
+
+                               final StringBuilder reportText = new StringBuilder();
+                               if(importResult!=null){
+                                   List<byte[]> reports = importResult.getReports();
+                                   for (byte[] bs : reports) {
+                        reportText.append(new String(bs));
+                    }
+                               }
                                display.asyncExec(new Runnable() {
 
                                        @Override
                                        public void run() {
+                        // display reports with possibility to save
+                        ReportTextDialog dialog = new ReportTextDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
+                        dialog.setTitle(configurator.getClass().getSimpleName()+" Report");
+                        dialog.setReportText(reportText.toString());
+                        dialog.open();
                                                CdmStore.getContextManager().notifyContextRefresh();
                                        }
                                });
@@ -195,6 +217,68 @@ public class ImportManager extends AbstractIOManager<IImportConfigurator> {
 
         return job;
 
+    }
+
+    public void runMoniteredOperation(IImportConfigurator configurator, InputStream is, SOURCE_TYPE type) {
+
+        try {
+            runMoniteredOperation(configurator, IOUtils.toByteArray(is), type);
+        } catch (Exception e) {
+            MessagingUtils.errorDialog("Error importing input stream",
+                    this,
+                    e.getMessage(),
+                    TaxeditorStorePlugin.PLUGIN_ID,
+                    e,
+                    true);
+        }
+
+    }
+
+    public void runMoniteredOperation(IImportConfigurator configurator, SOURCE_TYPE type) {
+        byte[] data = new byte[1];
+        try {
+            runMoniteredOperation(configurator, data, type);
+        } catch (Exception e) {
+            MessagingUtils.errorDialog("Error importing input stream",
+                    this,
+                    e.getMessage(),
+                    TaxeditorStorePlugin.PLUGIN_ID,
+                    e,
+                    true);
+        }
+
+    }
+
+    public void runMoniteredOperation(IImportConfigurator configurator, File importFile, SOURCE_TYPE type) {
+        Path path = Paths.get(importFile.toURI());
+        try {
+            runMoniteredOperation(configurator, Files.readAllBytes(path), type);
+        } catch (Exception e) {
+            MessagingUtils.errorDialog("Error importing input stream",
+                    this,
+                    e.getMessage(),
+                    TaxeditorStorePlugin.PLUGIN_ID,
+                    e,
+                    true);
+        }
+
+    }
+
+    public void runMoniteredOperation(final IImportConfigurator configurator, final byte[] data, final SOURCE_TYPE type) {
+        IIOService ioService = CdmApplicationState.getIOService();
+        final UUID uuid = ioService.monitImportData(configurator, data, type);
+        Display.getDefault().asyncExec(new Runnable() {
+            @Override
+            public void run() {
+                AbstractUtility.executeMoniteredOperation("Import: " + configurator.getClass().getSimpleName(),
+                        uuid,
+                        1000,
+                        false,
+                        ImportManager.this,
+                        null);
+            }
+        });
+
     }
 
        private IImportConfigurator getConfigurator(TYPE type) {
@@ -216,6 +300,8 @@ public class ImportManager extends AbstractIOManager<IImportConfigurator> {
                        return SDDImportConfigurator.NewInstance(null, null);
                case SpecimenCdmExcel:
                        return SpecimenCdmExcelImportConfigurator.NewInstance(null, null);
+               case SpecimenSearch:
+                   return Abcd206ImportConfigurator.NewInstance(null, null);
                default:
                        MessagingUtils.notImplementedMessage(this);
                        throw new IllegalArgumentException("Import not supported yet");
@@ -301,5 +387,20 @@ public class ImportManager extends AbstractIOManager<IImportConfigurator> {
                return (SpecimenCdmExcelImportConfigurator) getConfigurator(TYPE.SpecimenCdmExcel);
        }
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void postOperation(IRemotingProgressMonitor monitor) {
+        Display.getDefault().asyncExec(new Runnable() {
+
+            @Override
+            public void run() {
+                CdmStore.getContextManager().notifyContextRefresh();
+            }
+        });
+
+    }
+
 
 }