2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.taxeditor
.io
;
13 import java
.io
.InputStream
;
14 import java
.nio
.file
.Files
;
15 import java
.nio
.file
.Path
;
16 import java
.nio
.file
.Paths
;
17 import java
.util
.List
;
18 import java
.util
.UUID
;
20 import org
.apache
.commons
.io
.IOUtils
;
21 import org
.apache
.commons
.lang
.StringUtils
;
22 import org
.eclipse
.core
.runtime
.Assert
;
23 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
24 import org
.eclipse
.core
.runtime
.IStatus
;
25 import org
.eclipse
.core
.runtime
.Status
;
26 import org
.eclipse
.core
.runtime
.jobs
.Job
;
27 import org
.eclipse
.swt
.widgets
.Display
;
28 import org
.eclipse
.ui
.PlatformUI
;
30 import eu
.etaxonomy
.cdm
.api
.application
.CdmApplicationState
;
31 import eu
.etaxonomy
.cdm
.api
.application
.ICdmRepository
;
32 import eu
.etaxonomy
.cdm
.common
.monitor
.IRemotingProgressMonitor
;
33 import eu
.etaxonomy
.cdm
.io
.common
.CacheUpdaterConfigurator
;
34 import eu
.etaxonomy
.cdm
.io
.common
.CdmDefaultImport
;
35 import eu
.etaxonomy
.cdm
.io
.common
.IImportConfigurator
;
36 import eu
.etaxonomy
.cdm
.io
.common
.IImportConfigurator
.SOURCE_TYPE
;
37 import eu
.etaxonomy
.cdm
.io
.common
.ImportConfiguratorBase
;
38 import eu
.etaxonomy
.cdm
.io
.common
.ImportResult
;
39 import eu
.etaxonomy
.cdm
.io
.common
.SortIndexUpdaterConfigurator
;
40 import eu
.etaxonomy
.cdm
.io
.distribution
.excelupdate
.ExcelDistributionUpdateConfigurator
;
41 import eu
.etaxonomy
.cdm
.io
.dwca
.in
.DwcaImportConfigurator
;
42 import eu
.etaxonomy
.cdm
.io
.excel
.taxa
.NormalExplicitImportConfigurator
;
43 import eu
.etaxonomy
.cdm
.io
.jaxb
.JaxbImportConfigurator
;
44 import eu
.etaxonomy
.cdm
.io
.reference
.endnote
.in
.EndnoteImportConfigurator
;
45 import eu
.etaxonomy
.cdm
.io
.sdd
.in
.SDDImportConfigurator
;
46 import eu
.etaxonomy
.cdm
.io
.service
.IIOService
;
47 import eu
.etaxonomy
.cdm
.io
.specimen
.abcd206
.in
.Abcd206ImportConfigurator
;
48 import eu
.etaxonomy
.cdm
.io
.specimen
.excel
.in
.SpecimenCdmExcelImportConfigurator
;
49 import eu
.etaxonomy
.cdm
.io
.specimen
.gbif
.in
.GbifImportConfigurator
;
50 import eu
.etaxonomy
.cdm
.io
.specimen
.gbif
.in
.GbifImportState
;
51 import eu
.etaxonomy
.cdm
.io
.tcsxml
.in
.TcsXmlImportConfigurator
;
52 import eu
.etaxonomy
.taxeditor
.model
.AbstractUtility
;
53 import eu
.etaxonomy
.taxeditor
.model
.CdmProgressMonitorAdapter
;
54 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
55 import eu
.etaxonomy
.taxeditor
.operation
.IPostMoniteredOperationEnabled
;
56 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
57 import eu
.etaxonomy
.taxeditor
.store
.internal
.TaxeditorStorePlugin
;
58 import eu
.etaxonomy
.taxeditor
.ui
.dialog
.ReportTextDialog
;
62 * ImportHandler class.
66 * @created Sep 11, 2009
69 public class ImportManager
extends AbstractIOManager
<IImportConfigurator
> implements IPostMoniteredOperationEnabled
{
72 * @param applicationConfiguration
74 private ImportManager(ICdmRepository applicationConfiguration
) {
75 super(applicationConfiguration
);
83 * @param applicationConfiguration
85 * {@link eu.etaxonomy.cdm.api.application.CdmApplicationController}
87 * @return a {@link eu.etaxonomy.taxeditor.io.ImportManager} object.
89 public static ImportManager
NewInstance(
90 ICdmRepository applicationConfiguration
) {
91 return new ImportManager(applicationConfiguration
);
95 * Use when importing data into the current application context
98 * a {@link eu.etaxonomy.cdm.io.common.IImportConfigurator}
100 * @return a {@link org.eclipse.core.runtime.jobs.Job} object.
103 protected Job
createIOJob(final IImportConfigurator configurator
) {
104 Assert
.isNotNull(configurator
, "Configuration may not be null");
106 final Display display
= Display
.getDefault();
108 Job job
= new Job("Import: " + configurator
.getClass().getSimpleName()) {
111 protected IStatus
run(IProgressMonitor monitor
) {
112 monitor
.beginTask("Importing data", 100);
113 configurator
.setProgressMonitor(CdmProgressMonitorAdapter
114 .CreateSubMonitor(monitor
, 70));
118 CdmDefaultImport
<IImportConfigurator
> importer
= new CdmDefaultImport
<IImportConfigurator
>();
119 importer
.setCdmAppController(applicationConfiguration
);
121 ImportResult importResult
= null;
123 importResult
= importer
.invoke(configurator
);
126 } catch (RuntimeException e
) {
127 MessagingUtils
.messageDialog(
128 "Error importing data",
130 "An error occured while"
131 + "importing from source '"
132 + configurator
.getSourceNameString()
134 + "Please check error log for details.", e
);
141 final StringBuilder reportText
= new StringBuilder();
142 if(importResult
!=null){
143 List
<byte[]> reports
= importResult
.getReports();
144 for (byte[] bs
: reports
) {
145 reportText
.append(new String(bs
));
148 display
.asyncExec(new Runnable() {
152 // display reports with possibility to save
153 ReportTextDialog dialog
= new ReportTextDialog(PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getShell());
154 dialog
.setTitle(configurator
.getClass().getSimpleName()+" Report");
155 dialog
.setReportText(reportText
.toString());
157 CdmStore
.getContextManager().notifyContextRefresh();
161 return Status
.OK_STATUS
;
169 public Job
createIOServiceJob(IImportConfigurator configurator
, InputStream is
, SOURCE_TYPE type
) {
172 return createIOServiceJob(configurator
, IOUtils
.toByteArray(is
), type
);
173 } catch (Exception e
) {
174 MessagingUtils
.errorDialog("Error importing input stream",
177 TaxeditorStorePlugin
.PLUGIN_ID
,
184 public Job
createIOServiceJob(IImportConfigurator configurator
, File importFile
, SOURCE_TYPE type
) {
185 Path path
= Paths
.get(importFile
.toURI());
187 return createIOServiceJob(configurator
, Files
.readAllBytes(path
), type
);
188 } catch (Exception e
) {
189 MessagingUtils
.errorDialog("Error importing file",
192 TaxeditorStorePlugin
.PLUGIN_ID
,
199 public Job
createIOServiceJob(final IImportConfigurator configurator
, final byte[] data
, final SOURCE_TYPE type
) {
200 Assert
.isNotNull(configurator
, "Configuration may not be null");
201 final Display display
= Display
.getDefault();
202 Job job
= new Job("Import: " + configurator
.getClass().getSimpleName()) {
205 protected IStatus
run(IProgressMonitor monitor
) {
206 monitor
.beginTask("Importing data", IProgressMonitor
.UNKNOWN
);
207 IIOService ioService
= CdmApplicationState
.getIOService();
209 ImportResult result
= ioService
.importData(configurator
, data
, type
);
213 display
.asyncExec(new Runnable() {
217 CdmStore
.getContextManager().notifyContextRefresh();
220 showResult(configurator
.getClass().getSimpleName(), display
, result
);
221 return Status
.OK_STATUS
;
229 public void runMoniteredOperation(IImportConfigurator configurator
, InputStream is
, SOURCE_TYPE type
) {
232 runMoniteredOperation(configurator
, IOUtils
.toByteArray(is
), type
);
233 } catch (Exception e
) {
234 MessagingUtils
.errorDialog("Error importing input stream",
237 TaxeditorStorePlugin
.PLUGIN_ID
,
244 public void runMoniteredOperation(IImportConfigurator configurator
, SOURCE_TYPE type
) {
245 byte[] data
= new byte[1];
247 runMoniteredOperation(configurator
, data
, type
);
248 } catch (Exception e
) {
249 MessagingUtils
.errorDialog("Error importing input stream",
252 TaxeditorStorePlugin
.PLUGIN_ID
,
259 public void runMoniteredOperation(IImportConfigurator configurator
, File importFile
, SOURCE_TYPE type
) {
260 Path path
= Paths
.get(importFile
.toURI());
262 runMoniteredOperation(configurator
, Files
.readAllBytes(path
), type
);
263 } catch (Exception e
) {
264 MessagingUtils
.errorDialog("Error importing input stream",
267 TaxeditorStorePlugin
.PLUGIN_ID
,
274 public void runMoniteredOperation(final IImportConfigurator configurator
, final byte[] data
, final SOURCE_TYPE type
) {
275 IIOService ioService
= CdmApplicationState
.getIOService();
276 final UUID uuid
= ioService
.monitImportData(configurator
, data
, type
);
277 Display
.getDefault().asyncExec(new Runnable() {
280 AbstractUtility
.executeMoniteredOperation("Import: " + configurator
.getClass().getSimpleName(),
291 private IImportConfigurator
getConfigurator(TYPE type
) {
292 Assert
.isNotNull(type
, "Type should not be null");
296 return JaxbImportConfigurator
.NewInstance(null, null);
298 return TcsXmlImportConfigurator
.NewInstance(null, null);
300 return EndnoteImportConfigurator
.NewInstance(null, null);
302 return NormalExplicitImportConfigurator
.NewInstance(null, null,
305 return Abcd206ImportConfigurator
.NewInstance(null, null);
307 return SDDImportConfigurator
.NewInstance(null, null);
308 case SpecimenCdmExcel
:
309 return SpecimenCdmExcelImportConfigurator
.NewInstance(null, null);
311 return Abcd206ImportConfigurator
.NewInstance(null, null);
313 return DwcaImportConfigurator
.NewInstance(null, null);
314 case Excel_Distribution
:
315 return ExcelDistributionUpdateConfigurator
.NewInstance(null, null, null);
317 MessagingUtils
.notImplementedMessage(this);
318 throw new IllegalArgumentException("Import not supported yet");
328 * @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator} object.
330 public final JaxbImportConfigurator
JaxbConfigurator() {
331 return (JaxbImportConfigurator
) getConfigurator(TYPE
.Jaxb
);
339 * @return a {@link eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator}
342 public final TcsXmlImportConfigurator
TcsConfigurator() {
343 return (TcsXmlImportConfigurator
) getConfigurator(TYPE
.Tcs
);
348 * EndnoteConfigurator
352 * {@link eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator}
355 public final EndnoteImportConfigurator
EndnoteConfigurator() {
356 return (EndnoteImportConfigurator
) getConfigurator(TYPE
.Endnote
);
361 * NormalExplicitConfigurator
365 * {@link eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator}
368 public final NormalExplicitImportConfigurator
NormalExplicitConfigurator() {
369 return (NormalExplicitImportConfigurator
) getConfigurator(TYPE
.Excel_Taxa
);
377 * @return a {@link eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator}
380 public final SDDImportConfigurator
SddConfigurator() {
381 return (SDDImportConfigurator
) getConfigurator(TYPE
.Sdd
);
390 * {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator}
393 public final Abcd206ImportConfigurator
AbcdConfigurator() {
394 return (Abcd206ImportConfigurator
) getConfigurator(TYPE
.Abcd
);
397 public SpecimenCdmExcelImportConfigurator
SpecimenCdmExcelImportConfigurator() {
398 return (SpecimenCdmExcelImportConfigurator
) getConfigurator(TYPE
.SpecimenCdmExcel
);
401 public DwcaImportConfigurator
DwcaImportConfigurator() {
402 return (DwcaImportConfigurator
) getConfigurator(TYPE
.Gbif
);
410 public void postOperation(IRemotingProgressMonitor monitor
) {
411 Display
.getDefault().asyncExec(new Runnable() {
415 CdmStore
.getContextManager().notifyContextRefresh();
421 public Job
createIOServiceJob(final GbifImportConfigurator
<GbifImportState
, InputStream
> configurator
) {
422 Assert
.isNotNull(configurator
, "Configuration may not be null");
423 final Display display
= Display
.getDefault();
424 Job job
= new Job("Import: " + " Dwca") {
427 protected IStatus
run(IProgressMonitor monitor
) {
428 monitor
.beginTask("Importing data", IProgressMonitor
.UNKNOWN
);
429 IIOService ioService
= CdmApplicationState
.getIOService();
431 ImportResult result
= ioService
.importDataFromStream(configurator
);
434 // display.asyncExec(new Runnable() {
437 // public void run() {
438 // CdmStore.getContextManager().notifyContextRefresh();
441 showResult("Gbif Import", display
, result
);
442 return Status
.OK_STATUS
;
450 public Job
createIOServiceJob(final Abcd206ImportConfigurator configurator
) {
451 Assert
.isNotNull(configurator
, "Configuration may not be null");
452 final Display display
= Display
.getDefault();
453 Job job
= new Job("Import: " + " Dwca") {
456 protected IStatus
run(IProgressMonitor monitor
) {
457 monitor
.beginTask("Importing data", IProgressMonitor
.UNKNOWN
);
458 IIOService ioService
= CdmApplicationState
.getIOService();
460 ImportResult result
= ioService
.importDataFromStream(configurator
);
463 display
.asyncExec(new Runnable() {
467 CdmStore
.getContextManager().notifyContextRefresh();
470 showResult("Abcd Import", display
, result
);
471 return Status
.OK_STATUS
;
479 public Job
createIOServiceJob(
480 final List
<Abcd206ImportConfigurator
> abcdConfigurators
) {
481 Assert
.isNotNull(abcdConfigurators
, "Configuration may not be null");
482 final Display display
= Display
.getDefault();
483 Job job
= new Job("Import: " + " Abcd") {
486 protected IStatus
run(IProgressMonitor monitor
) {
487 monitor
.beginTask("Importing data", IProgressMonitor
.UNKNOWN
);
488 IIOService ioService
= CdmApplicationState
.getIOService();
490 ImportResult result
= ioService
.importDataFromStream(abcdConfigurators
);
493 display
.asyncExec(new Runnable() {
497 CdmStore
.getContextManager().notifyContextRefresh();
500 showResult("Abcd Import", display
, result
);
504 return Status
.OK_STATUS
;
511 public Job
createIOServiceJob(final ImportConfiguratorBase configurator
) {
512 Assert
.isNotNull(configurator
, "Configuration may not be null");
513 final Display display
= Display
.getDefault();
515 Job job
= new Job("Update: " + configurator
.getClass().getSimpleName()) {
518 protected IStatus
run(IProgressMonitor monitor
) {
519 monitor
.beginTask("Updating data", IProgressMonitor
.UNKNOWN
);
520 IIOService ioService
= CdmApplicationState
.getIOService();
521 ImportResult importResult
= null;
522 if (configurator
instanceof SortIndexUpdaterConfigurator
){
523 SortIndexUpdaterConfigurator config
= (SortIndexUpdaterConfigurator
)configurator
;
524 importResult
=ioService
.updateSortIndex(config
);
525 } else if (configurator
instanceof CacheUpdaterConfigurator
){
526 CacheUpdaterConfigurator config
= (CacheUpdaterConfigurator
) configurator
;
527 importResult
= ioService
.updateCaches(config
);
528 } else if (configurator
instanceof ExcelDistributionUpdateConfigurator
){
529 ExcelDistributionUpdateConfigurator config
= (ExcelDistributionUpdateConfigurator
) configurator
;
530 importResult
=ioService
.updateDistributionData(config
);
534 // display.asyncExec(new Runnable() {
537 // public void run() {
538 // CdmStore.getContextManager().notifyContextRefresh();
541 showResult(configurator
.getClass().getSimpleName(), display
, importResult
);
544 return Status
.OK_STATUS
;
557 public ExcelDistributionUpdateConfigurator
ExcelDistributionUpdateConfigurator() {
558 return (ExcelDistributionUpdateConfigurator
) getConfigurator(TYPE
.Excel_Distribution
);
562 * @param configurator
564 * @param importResult
566 private void showResult(String importName
, final Display display
,
567 ImportResult importResult
) {
568 StringBuffer reportTextTemp
= importResult
.createReport();
569 final StringBuffer reportText
;
570 if (StringUtils
.isBlank(reportTextTemp
.toString())){
571 reportTextTemp
.append("No update result available");
572 //TODO: this is a workaround because the abcd import writes the report in the report part...
573 if (!importResult
.getReports().isEmpty()){
574 reportTextTemp
= new StringBuffer();
575 if(importResult
!=null){
576 List
<byte[]> reports
= importResult
.getReports();
577 for (byte[] bs
: reports
) {
578 reportTextTemp
.append(new String(bs
));
583 reportText
= reportTextTemp
;
584 display
.asyncExec(new Runnable() {
588 // display reports with possibility to save
589 ReportTextDialog dialog
= new ReportTextDialog(PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getShell());
590 dialog
.setTitle(importName
+" Report");
591 dialog
.setReportText(reportText
.toString());
593 CdmStore
.getContextManager().notifyContextRefresh();