-// $Id$
/**
-* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
-* http://www.e-taxonomy.eu
-*
-* The contents of this file are subject to the Mozilla Public License Version 1.1
-* See LICENSE.TXT at the top of this package for the full license terms.
-*/
+ * Copyright (C) 2007 EDIT
+ * European Distributed Institute of Taxonomy
+ * http://www.e-taxonomy.eu
+ *
+ * The contents of this file are subject to the Mozilla Public License Version 1.1
+ * See LICENSE.TXT at the top of this package for the full license terms.
+ */
package eu.etaxonomy.taxeditor.io;
+import java.io.File;
+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.apache.commons.lang.StringUtils;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IProgressMonitor;
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.CdmApplicationController;
-import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
+import eu.etaxonomy.cdm.api.application.CdmApplicationState;
+import eu.etaxonomy.cdm.api.application.ICdmRepository;
+import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
+import eu.etaxonomy.cdm.io.common.CacheUpdaterConfigurator;
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.ImportConfiguratorBase;
+import eu.etaxonomy.cdm.io.common.ImportResult;
+import eu.etaxonomy.cdm.io.common.SortIndexUpdaterConfigurator;
+import eu.etaxonomy.cdm.io.distribution.excelupdate.ExcelDistributionUpdateConfigurator;
+import eu.etaxonomy.cdm.io.dwca.in.DwcaImportConfigurator;
import eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator;
import eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator;
import eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator;
import eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator;
+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.specimen.gbif.in.GbifImportConfigurator;
+import eu.etaxonomy.cdm.io.specimen.gbif.in.GbifImportState;
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.StoreUtil;
+import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
+import eu.etaxonomy.taxeditor.ui.dialog.ReportTextDialog;
/**
- * <p>ImportHandler class.</p>
+ * <p>
+ * ImportHandler class.
+ * </p>
*
* @author n.hoffmann
* @created Sep 11, 2009
* @version 1.0
*/
-public class ImportManager extends AbstractIOManager<IImportConfigurator> {
+public class ImportManager extends AbstractIOManager<IImportConfigurator> implements IPostMoniteredOperationEnabled {
/**
- * @param applicationController
+ * @param applicationConfiguration
*/
- private ImportManager(
- CdmApplicationController applicationController) {
- super(applicationController);
+ private ImportManager(ICdmRepository applicationConfiguration) {
+ super(applicationConfiguration);
}
-
+
/**
- * <p>NewInstance</p>
+ * <p>
+ * NewInstance
+ * </p>
*
- * @param applicationController a {@link eu.etaxonomy.cdm.api.application.CdmApplicationController} object.
+ * @param applicationConfiguration
+ * a
+ * {@link eu.etaxonomy.cdm.api.application.CdmApplicationController}
+ * object.
* @return a {@link eu.etaxonomy.taxeditor.io.ImportManager} object.
*/
- public static ImportManager NewInstance(CdmApplicationController applicationController){
- return new ImportManager(applicationController);
+ public static ImportManager NewInstance(
+ ICdmRepository applicationConfiguration) {
+ return new ImportManager(applicationConfiguration);
}
-
+
/**
* Use when importing data into the current application context
*
- * @param configurator a {@link eu.etaxonomy.cdm.io.common.IImportConfigurator} object.
+ * @param configurator
+ * a {@link eu.etaxonomy.cdm.io.common.IImportConfigurator}
+ * object.
* @return a {@link org.eclipse.core.runtime.jobs.Job} object.
*/
- protected Job createIOJob(final IImportConfigurator configurator){
+ @Override
+ protected Job createIOJob(final IImportConfigurator configurator) {
Assert.isNotNull(configurator, "Configuration may not be null");
-
+
final Display display = Display.getDefault();
-
- Job job = new Job("Import: " + configurator.getClass().getSimpleName()){
-
+
+ Job job = new Job("Import: " + configurator.getClass().getSimpleName()) {
+
@Override
protected IStatus run(IProgressMonitor monitor) {
monitor.beginTask("Importing data", 100);
- configurator.setProgressMonitor(CdmProgressMonitorAdapter.CreateSubMonitor(monitor, 70));
-
- monitor.worked(10);
-
+ configurator.setProgressMonitor(CdmProgressMonitorAdapter
+ .CreateSubMonitor(monitor, 70));
+
+ monitor.worked(5);
+
CdmDefaultImport<IImportConfigurator> importer = new CdmDefaultImport<IImportConfigurator>();
- importer.setCdmAppController(applicationController);
- monitor.worked(10);
-
- try{
- importer.invoke(configurator);
- monitor.worked(60);
- }catch(RuntimeException e){
- StoreUtil.errorDialog("Error importing data", this, "An error occured while" +
- "importing from source '" + configurator.getSourceNameString() + "'.\n" +
- "Please check error log for details.", e);
+ importer.setCdmAppController(applicationConfiguration);
+ monitor.worked(5);
+ ImportResult importResult = null;
+ try {
+ importResult = importer.invoke(configurator);
+
+ monitor.worked(80);
+ } catch (RuntimeException e) {
+ MessagingUtils.messageDialog(
+ "Error importing data",
+ this,
+ "An error occured while"
+ + "importing from source '"
+ + configurator.getSourceNameString()
+ + "'.\n"
+ + "Please check error log for details.", e);
}
-
- monitor.worked(10);
+
+ 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();
}
});
-
+
return Status.OK_STATUS;
}
};
-
+
return job;
-
+
+ }
+
+ public Job createIOServiceJob(IImportConfigurator configurator, InputStream is, SOURCE_TYPE type) {
+
+ try {
+ return createIOServiceJob(configurator, IOUtils.toByteArray(is), type);
+ } catch (Exception e) {
+ MessagingUtils.errorDialog("Error importing input stream",
+ this,
+ e.getMessage(),
+ TaxeditorStorePlugin.PLUGIN_ID,
+ e,
+ true);
+ }
+ return null;
+ }
+
+ public Job createIOServiceJob(IImportConfigurator configurator, File importFile, SOURCE_TYPE type) {
+ Path path = Paths.get(importFile.toURI());
+ try {
+ return createIOServiceJob(configurator, Files.readAllBytes(path), type);
+ } catch (Exception e) {
+ MessagingUtils.errorDialog("Error importing file",
+ this,
+ e.getMessage(),
+ TaxeditorStorePlugin.PLUGIN_ID,
+ e,
+ true);
+ }
+ return null;
}
- private IImportConfigurator getConfigurator(TYPE type){
+ public Job createIOServiceJob(final IImportConfigurator configurator, final byte[] data, final SOURCE_TYPE type) {
+ Assert.isNotNull(configurator, "Configuration may not be null");
+ final Display display = Display.getDefault();
+ Job job = new Job("Import: " + configurator.getClass().getSimpleName()) {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
+ IIOService ioService = CdmApplicationState.getIOService();
+
+ ImportResult result = ioService.importData(configurator, data, type);
+
+ monitor.done();
+
+ display.asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ CdmStore.getContextManager().notifyContextRefresh();
+ }
+ });
+ showResult(configurator.getClass().getSimpleName(), display, result);
+ return Status.OK_STATUS;
+ }
+ };
+
+ 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) {
Assert.isNotNull(type, "Type should not be null");
-
- switch(type){
- case BerlinModel:
- return BerlinModelImportConfigurator.NewInstance(null, null);
- case Jaxb:
- return JaxbImportConfigurator.NewInstance(null, null);
- case Tcs:
- return TcsXmlImportConfigurator.NewInstance(null, null);
- case Endnote:
- return EndnoteImportConfigurator.NewInstance(null, null);
- case Excel_Taxa:
- return NormalExplicitImportConfigurator.NewInstance(null, null, null);
- case Abcd:
- return Abcd206ImportConfigurator.NewInstance(null, null);
- case Sdd:
- return SDDImportConfigurator.NewInstance(null, null);
- default:
- StoreUtil.notImplementedMessage(this);
- throw new IllegalArgumentException("Import not supported yet");
+
+ switch (type) {
+ case Jaxb:
+ return JaxbImportConfigurator.NewInstance(null, null);
+ case Tcs:
+ return TcsXmlImportConfigurator.NewInstance(null, null);
+ case Endnote:
+ return EndnoteImportConfigurator.NewInstance(null, null);
+ case Excel_Taxa:
+ return NormalExplicitImportConfigurator.NewInstance(null, null,
+ null, null);
+ case Abcd:
+ return Abcd206ImportConfigurator.NewInstance(null, null);
+ case Sdd:
+ return SDDImportConfigurator.NewInstance(null, null);
+ case SpecimenCdmExcel:
+ return SpecimenCdmExcelImportConfigurator.NewInstance(null, null);
+ case SpecimenSearch:
+ return Abcd206ImportConfigurator.NewInstance(null, null);
+ case Gbif:
+ return DwcaImportConfigurator.NewInstance(null, null);
+ case Excel_Distribution:
+ return ExcelDistributionUpdateConfigurator.NewInstance(null, null, null);
+
+ default:
+ MessagingUtils.notImplementedMessage(this);
+ throw new IllegalArgumentException("Import not supported yet");
}
}
-
- /**
- * <p>BerlinModelConfigurator</p>
- *
- * @return a {@link eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator} object.
- */
- public final BerlinModelImportConfigurator BerlinModelConfigurator() { return (BerlinModelImportConfigurator) getConfigurator(TYPE.BerlinModel); }
+
+
/**
- * <p>JaxbConfigurator</p>
+ * <p>
+ * JaxbConfigurator
+ * </p>
*
* @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator} object.
*/
- public final JaxbImportConfigurator JaxbConfigurator() { return (JaxbImportConfigurator) getConfigurator(TYPE.Jaxb); }
+ public final JaxbImportConfigurator JaxbConfigurator() {
+ return (JaxbImportConfigurator) getConfigurator(TYPE.Jaxb);
+ }
+
/**
- * <p>TcsConfigurator</p>
+ * <p>
+ * TcsConfigurator
+ * </p>
*
- * @return a {@link eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator} object.
+ * @return a {@link eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator}
+ * object.
*/
- public final TcsXmlImportConfigurator TcsConfigurator() { return (TcsXmlImportConfigurator) getConfigurator(TYPE.Tcs); }
+ public final TcsXmlImportConfigurator TcsConfigurator() {
+ return (TcsXmlImportConfigurator) getConfigurator(TYPE.Tcs);
+ }
+
/**
- * <p>EndnoteConfigurator</p>
+ * <p>
+ * EndnoteConfigurator
+ * </p>
*
- * @return a {@link eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator} object.
+ * @return a
+ * {@link eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator}
+ * object.
*/
- public final EndnoteImportConfigurator EndnoteConfigurator() { return (EndnoteImportConfigurator) getConfigurator(TYPE.Endnote); }
+ public final EndnoteImportConfigurator EndnoteConfigurator() {
+ return (EndnoteImportConfigurator) getConfigurator(TYPE.Endnote);
+ }
+
/**
- * <p>NormalExplicitConfigurator</p>
+ * <p>
+ * NormalExplicitConfigurator
+ * </p>
*
- * @return a {@link eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator} object.
+ * @return a
+ * {@link eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator}
+ * object.
*/
- public final NormalExplicitImportConfigurator NormalExplicitConfigurator() { return (NormalExplicitImportConfigurator) getConfigurator(TYPE.Excel_Taxa); }
+ public final NormalExplicitImportConfigurator NormalExplicitConfigurator() {
+ return (NormalExplicitImportConfigurator) getConfigurator(TYPE.Excel_Taxa);
+ }
+
/**
- * <p>SddConfigurator</p>
+ * <p>
+ * SddConfigurator
+ * </p>
*
- * @return a {@link eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator} object.
+ * @return a {@link eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator}
+ * object.
*/
- public final SDDImportConfigurator SddConfigurator() { return (SDDImportConfigurator) getConfigurator(TYPE.Sdd); }
+ public final SDDImportConfigurator SddConfigurator() {
+ return (SDDImportConfigurator) getConfigurator(TYPE.Sdd);
+ }
+
/**
- * <p>AbcdConfigurator</p>
+ * <p>
+ * AbcdConfigurator
+ * </p>
*
- * @return a {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator} object.
+ * @return a
+ * {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator}
+ * object.
*/
- public final Abcd206ImportConfigurator AbcdConfigurator() { return (Abcd206ImportConfigurator) getConfigurator(TYPE.Abcd); }
-
-
+ public final Abcd206ImportConfigurator AbcdConfigurator() {
+ return (Abcd206ImportConfigurator) getConfigurator(TYPE.Abcd);
+ }
+
+ public SpecimenCdmExcelImportConfigurator SpecimenCdmExcelImportConfigurator() {
+ return (SpecimenCdmExcelImportConfigurator) getConfigurator(TYPE.SpecimenCdmExcel);
+ }
+
+ public DwcaImportConfigurator DwcaImportConfigurator() {
+ return (DwcaImportConfigurator) getConfigurator(TYPE.Gbif);
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void postOperation(IRemotingProgressMonitor monitor) {
+ Display.getDefault().asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ CdmStore.getContextManager().notifyContextRefresh();
+ }
+ });
+
+ }
+
+ public Job createIOServiceJob(final GbifImportConfigurator<GbifImportState, InputStream> configurator) {
+ Assert.isNotNull(configurator, "Configuration may not be null");
+ final Display display = Display.getDefault();
+ Job job = new Job("Import: " + " Dwca") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
+ IIOService ioService = CdmApplicationState.getIOService();
+
+ ImportResult result = ioService.importDataFromStream(configurator);
+ monitor.done();
+
+// display.asyncExec(new Runnable() {
+//
+// @Override
+// public void run() {
+// CdmStore.getContextManager().notifyContextRefresh();
+// }
+// });
+ showResult("Gbif Import", display, result);
+ return Status.OK_STATUS;
+ }
+ };
+
+ return job;
+
+ }
+
+ public Job createIOServiceJob(final Abcd206ImportConfigurator configurator) {
+ Assert.isNotNull(configurator, "Configuration may not be null");
+ final Display display = Display.getDefault();
+ Job job = new Job("Import: " + " Dwca") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
+ IIOService ioService = CdmApplicationState.getIOService();
+
+ ImportResult result = ioService.importDataFromStream(configurator);
+ monitor.done();
+
+ display.asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ CdmStore.getContextManager().notifyContextRefresh();
+ }
+ });
+ showResult("Abcd Import", display, result);
+ return Status.OK_STATUS;
+ }
+ };
+
+ return job;
+
+ }
+
+ public Job createIOServiceJob(
+ final List<Abcd206ImportConfigurator> abcdConfigurators) {
+ Assert.isNotNull(abcdConfigurators, "Configuration may not be null");
+ final Display display = Display.getDefault();
+ Job job = new Job("Import: " + " Abcd") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
+ IIOService ioService = CdmApplicationState.getIOService();
+
+ ImportResult result = ioService.importDataFromStream(abcdConfigurators);
+ monitor.done();
+
+ display.asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ CdmStore.getContextManager().notifyContextRefresh();
+ }
+ });
+ showResult("Abcd Import", display, result);
+
+
+
+ return Status.OK_STATUS;
+ }
+ };
+
+ return job;
+ }
+
+ public Job createIOServiceJob(final ImportConfiguratorBase configurator) {
+ Assert.isNotNull(configurator, "Configuration may not be null");
+ final Display display = Display.getDefault();
+
+ Job job = new Job("Update: " + configurator.getClass().getSimpleName()) {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ monitor.beginTask("Updating data", IProgressMonitor.UNKNOWN);
+ IIOService ioService = CdmApplicationState.getIOService();
+ ImportResult importResult = null;
+ if (configurator instanceof SortIndexUpdaterConfigurator){
+ SortIndexUpdaterConfigurator config = (SortIndexUpdaterConfigurator)configurator;
+ importResult =ioService.updateSortIndex(config);
+ } else if (configurator instanceof CacheUpdaterConfigurator){
+ CacheUpdaterConfigurator config = (CacheUpdaterConfigurator) configurator;
+ importResult = ioService.updateCaches(config);
+ } else if (configurator instanceof ExcelDistributionUpdateConfigurator){
+ ExcelDistributionUpdateConfigurator config = (ExcelDistributionUpdateConfigurator) configurator;
+ importResult =ioService.updateDistributionData(config);
+ }
+
+ monitor.done();
+// display.asyncExec(new Runnable() {
+//
+// @Override
+// public void run() {
+// CdmStore.getContextManager().notifyContextRefresh();
+// }
+// });
+ showResult(configurator.getClass().getSimpleName(), display, importResult);
+
+
+ return Status.OK_STATUS;
+ }
+
+
+ };
+
+ return job;
+
+ }
+
+ /**
+ * @return
+ */
+ public ExcelDistributionUpdateConfigurator ExcelDistributionUpdateConfigurator() {
+ return (ExcelDistributionUpdateConfigurator) getConfigurator(TYPE.Excel_Distribution);
+ }
+
+
+
+
+
+
+
}