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
.eclipse
.core
.runtime
.Assert
;
22 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
23 import org
.eclipse
.core
.runtime
.IStatus
;
24 import org
.eclipse
.core
.runtime
.Status
;
25 import org
.eclipse
.core
.runtime
.jobs
.Job
;
26 import org
.eclipse
.swt
.widgets
.Display
;
27 import org
.eclipse
.ui
.PlatformUI
;
29 import eu
.etaxonomy
.cdm
.api
.application
.CdmApplicationState
;
30 import eu
.etaxonomy
.cdm
.api
.application
.ICdmApplicationConfiguration
;
31 import eu
.etaxonomy
.cdm
.common
.monitor
.IRemotingProgressMonitor
;
32 import eu
.etaxonomy
.cdm
.io
.common
.CacheUpdaterConfigurator
;
33 import eu
.etaxonomy
.cdm
.io
.common
.CdmDefaultImport
;
34 import eu
.etaxonomy
.cdm
.io
.common
.IImportConfigurator
;
35 import eu
.etaxonomy
.cdm
.io
.common
.IImportConfigurator
.SOURCE_TYPE
;
36 import eu
.etaxonomy
.cdm
.io
.common
.ImportConfiguratorBase
;
37 import eu
.etaxonomy
.cdm
.io
.common
.ImportResult
;
38 import eu
.etaxonomy
.cdm
.io
.common
.SortIndexUpdaterConfigurator
;
39 import eu
.etaxonomy
.cdm
.io
.dwca
.in
.DwcaImportConfigurator
;
40 import eu
.etaxonomy
.cdm
.io
.excel
.taxa
.NormalExplicitImportConfigurator
;
41 import eu
.etaxonomy
.cdm
.io
.jaxb
.JaxbImportConfigurator
;
42 import eu
.etaxonomy
.cdm
.io
.reference
.endnote
.in
.EndnoteImportConfigurator
;
43 import eu
.etaxonomy
.cdm
.io
.sdd
.in
.SDDImportConfigurator
;
44 import eu
.etaxonomy
.cdm
.io
.service
.IIOService
;
45 import eu
.etaxonomy
.cdm
.io
.specimen
.abcd206
.in
.Abcd206ImportConfigurator
;
46 import eu
.etaxonomy
.cdm
.io
.specimen
.abcd206
.in
.Abcd206ImportState
;
47 import eu
.etaxonomy
.cdm
.io
.specimen
.excel
.in
.SpecimenCdmExcelImportConfigurator
;
48 import eu
.etaxonomy
.cdm
.io
.specimen
.gbif
.in
.GbifImportConfigurator
;
49 import eu
.etaxonomy
.cdm
.io
.specimen
.gbif
.in
.GbifImportState
;
50 import eu
.etaxonomy
.cdm
.io
.tcsxml
.in
.TcsXmlImportConfigurator
;
51 import eu
.etaxonomy
.taxeditor
.model
.AbstractUtility
;
52 import eu
.etaxonomy
.taxeditor
.model
.CdmProgressMonitorAdapter
;
53 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
54 import eu
.etaxonomy
.taxeditor
.operation
.IPostMoniteredOperationEnabled
;
55 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
56 import eu
.etaxonomy
.taxeditor
.store
.internal
.TaxeditorStorePlugin
;
57 import eu
.etaxonomy
.taxeditor
.ui
.dialog
.ReportTextDialog
;
61 * ImportHandler class.
65 * @created Sep 11, 2009
68 public class ImportManager
extends AbstractIOManager
<IImportConfigurator
> implements IPostMoniteredOperationEnabled
{
71 * @param applicationConfiguration
73 private ImportManager(ICdmApplicationConfiguration applicationConfiguration
) {
74 super(applicationConfiguration
);
82 * @param applicationConfiguration
84 * {@link eu.etaxonomy.cdm.api.application.CdmApplicationController}
86 * @return a {@link eu.etaxonomy.taxeditor.io.ImportManager} object.
88 public static ImportManager
NewInstance(
89 ICdmApplicationConfiguration applicationConfiguration
) {
90 return new ImportManager(applicationConfiguration
);
94 * Use when importing data into the current application context
97 * a {@link eu.etaxonomy.cdm.io.common.IImportConfigurator}
99 * @return a {@link org.eclipse.core.runtime.jobs.Job} object.
102 protected Job
createIOJob(final IImportConfigurator configurator
) {
103 Assert
.isNotNull(configurator
, "Configuration may not be null");
105 final Display display
= Display
.getDefault();
107 Job job
= new Job("Import: " + configurator
.getClass().getSimpleName()) {
110 protected IStatus
run(IProgressMonitor monitor
) {
111 monitor
.beginTask("Importing data", 100);
112 configurator
.setProgressMonitor(CdmProgressMonitorAdapter
113 .CreateSubMonitor(monitor
, 70));
117 CdmDefaultImport
<IImportConfigurator
> importer
= new CdmDefaultImport
<IImportConfigurator
>();
118 importer
.setCdmAppController(applicationConfiguration
);
120 ImportResult importResult
= null;
122 importResult
= importer
.invoke(configurator
);
125 } catch (RuntimeException e
) {
126 MessagingUtils
.messageDialog(
127 "Error importing data",
129 "An error occured while"
130 + "importing from source '"
131 + configurator
.getSourceNameString()
133 + "Please check error log for details.", e
);
140 final StringBuilder reportText
= new StringBuilder();
141 if(importResult
!=null){
142 List
<byte[]> reports
= importResult
.getReports();
143 for (byte[] bs
: reports
) {
144 reportText
.append(new String(bs
));
147 display
.asyncExec(new Runnable() {
151 // display reports with possibility to save
152 ReportTextDialog dialog
= new ReportTextDialog(PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getShell());
153 dialog
.setTitle(configurator
.getClass().getSimpleName()+" Report");
154 dialog
.setReportText(reportText
.toString());
156 CdmStore
.getContextManager().notifyContextRefresh();
160 return Status
.OK_STATUS
;
168 public Job
createIOServiceJob(IImportConfigurator configurator
, InputStream is
, SOURCE_TYPE type
) {
171 return createIOServiceJob(configurator
, IOUtils
.toByteArray(is
), type
);
172 } catch (Exception e
) {
173 MessagingUtils
.errorDialog("Error importing input stream",
176 TaxeditorStorePlugin
.PLUGIN_ID
,
183 public Job
createIOServiceJob(IImportConfigurator configurator
, File importFile
, SOURCE_TYPE type
) {
184 Path path
= Paths
.get(importFile
.toURI());
186 return createIOServiceJob(configurator
, Files
.readAllBytes(path
), type
);
187 } catch (Exception e
) {
188 MessagingUtils
.errorDialog("Error importing file",
191 TaxeditorStorePlugin
.PLUGIN_ID
,
198 public Job
createIOServiceJob(final IImportConfigurator configurator
, final byte[] data
, final SOURCE_TYPE type
) {
199 Assert
.isNotNull(configurator
, "Configuration may not be null");
200 final Display display
= Display
.getDefault();
201 Job job
= new Job("Import: " + configurator
.getClass().getSimpleName()) {
204 protected IStatus
run(IProgressMonitor monitor
) {
205 monitor
.beginTask("Importing data", IProgressMonitor
.UNKNOWN
);
206 IIOService ioService
= CdmApplicationState
.getIOService();
208 ioService
.importData(configurator
, data
, type
);
212 display
.asyncExec(new Runnable() {
216 CdmStore
.getContextManager().notifyContextRefresh();
220 return Status
.OK_STATUS
;
228 public void runMoniteredOperation(IImportConfigurator configurator
, InputStream is
, SOURCE_TYPE type
) {
231 runMoniteredOperation(configurator
, IOUtils
.toByteArray(is
), type
);
232 } catch (Exception e
) {
233 MessagingUtils
.errorDialog("Error importing input stream",
236 TaxeditorStorePlugin
.PLUGIN_ID
,
243 public void runMoniteredOperation(IImportConfigurator configurator
, SOURCE_TYPE type
) {
244 byte[] data
= new byte[1];
246 runMoniteredOperation(configurator
, data
, type
);
247 } catch (Exception e
) {
248 MessagingUtils
.errorDialog("Error importing input stream",
251 TaxeditorStorePlugin
.PLUGIN_ID
,
258 public void runMoniteredOperation(IImportConfigurator configurator
, File importFile
, SOURCE_TYPE type
) {
259 Path path
= Paths
.get(importFile
.toURI());
261 runMoniteredOperation(configurator
, Files
.readAllBytes(path
), type
);
262 } catch (Exception e
) {
263 MessagingUtils
.errorDialog("Error importing input stream",
266 TaxeditorStorePlugin
.PLUGIN_ID
,
273 public void runMoniteredOperation(final IImportConfigurator configurator
, final byte[] data
, final SOURCE_TYPE type
) {
274 IIOService ioService
= CdmApplicationState
.getIOService();
275 final UUID uuid
= ioService
.monitImportData(configurator
, data
, type
);
276 Display
.getDefault().asyncExec(new Runnable() {
279 AbstractUtility
.executeMoniteredOperation("Import: " + configurator
.getClass().getSimpleName(),
290 private IImportConfigurator
getConfigurator(TYPE type
) {
291 Assert
.isNotNull(type
, "Type should not be null");
295 return JaxbImportConfigurator
.NewInstance(null, null);
297 return TcsXmlImportConfigurator
.NewInstance(null, null);
299 return EndnoteImportConfigurator
.NewInstance(null, null);
301 return NormalExplicitImportConfigurator
.NewInstance(null, null,
304 return Abcd206ImportConfigurator
.NewInstance(null, null);
306 return SDDImportConfigurator
.NewInstance(null, null);
307 case SpecimenCdmExcel
:
308 return SpecimenCdmExcelImportConfigurator
.NewInstance(null, null);
310 return Abcd206ImportConfigurator
.NewInstance(null, null);
312 return DwcaImportConfigurator
.NewInstance(null, null);
314 MessagingUtils
.notImplementedMessage(this);
315 throw new IllegalArgumentException("Import not supported yet");
325 * @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator} object.
327 public final JaxbImportConfigurator
JaxbConfigurator() {
328 return (JaxbImportConfigurator
) getConfigurator(TYPE
.Jaxb
);
336 * @return a {@link eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator}
339 public final TcsXmlImportConfigurator
TcsConfigurator() {
340 return (TcsXmlImportConfigurator
) getConfigurator(TYPE
.Tcs
);
345 * EndnoteConfigurator
349 * {@link eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator}
352 public final EndnoteImportConfigurator
EndnoteConfigurator() {
353 return (EndnoteImportConfigurator
) getConfigurator(TYPE
.Endnote
);
358 * NormalExplicitConfigurator
362 * {@link eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator}
365 public final NormalExplicitImportConfigurator
NormalExplicitConfigurator() {
366 return (NormalExplicitImportConfigurator
) getConfigurator(TYPE
.Excel_Taxa
);
374 * @return a {@link eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator}
377 public final SDDImportConfigurator
SddConfigurator() {
378 return (SDDImportConfigurator
) getConfigurator(TYPE
.Sdd
);
387 * {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator}
390 public final Abcd206ImportConfigurator
AbcdConfigurator() {
391 return (Abcd206ImportConfigurator
) getConfigurator(TYPE
.Abcd
);
394 public SpecimenCdmExcelImportConfigurator
SpecimenCdmExcelImportConfigurator() {
395 return (SpecimenCdmExcelImportConfigurator
) getConfigurator(TYPE
.SpecimenCdmExcel
);
398 public DwcaImportConfigurator
DwcaImportConfigurator() {
399 return (DwcaImportConfigurator
) getConfigurator(TYPE
.Gbif
);
407 public void postOperation(IRemotingProgressMonitor monitor
) {
408 Display
.getDefault().asyncExec(new Runnable() {
412 CdmStore
.getContextManager().notifyContextRefresh();
418 public Job
createIOServiceJob(final GbifImportConfigurator
<GbifImportState
, InputStream
> configurator
) {
419 Assert
.isNotNull(configurator
, "Configuration may not be null");
420 final Display display
= Display
.getDefault();
421 Job job
= new Job("Import: " + " Dwca") {
424 protected IStatus
run(IProgressMonitor monitor
) {
425 monitor
.beginTask("Importing data", IProgressMonitor
.UNKNOWN
);
426 IIOService ioService
= CdmApplicationState
.getIOService();
428 ImportResult result
= ioService
.importDataFromStream(configurator
);
431 display
.asyncExec(new Runnable() {
435 CdmStore
.getContextManager().notifyContextRefresh();
439 return Status
.OK_STATUS
;
447 public Job
createIOServiceJob(final Abcd206ImportConfigurator
<Abcd206ImportState
, InputStream
> configurator
) {
448 Assert
.isNotNull(configurator
, "Configuration may not be null");
449 final Display display
= Display
.getDefault();
450 Job job
= new Job("Import: " + " Dwca") {
453 protected IStatus
run(IProgressMonitor monitor
) {
454 monitor
.beginTask("Importing data", IProgressMonitor
.UNKNOWN
);
455 IIOService ioService
= CdmApplicationState
.getIOService();
457 ImportResult result
= ioService
.importDataFromStream(configurator
);
460 display
.asyncExec(new Runnable() {
464 CdmStore
.getContextManager().notifyContextRefresh();
468 return Status
.OK_STATUS
;
476 public Job
createIOServiceJob(
477 final List
<Abcd206ImportConfigurator
> abcdConfigurators
) {
478 Assert
.isNotNull(abcdConfigurators
, "Configuration may not be null");
479 final Display display
= Display
.getDefault();
480 Job job
= new Job("Import: " + " Dwca") {
483 protected IStatus
run(IProgressMonitor monitor
) {
484 monitor
.beginTask("Importing data", IProgressMonitor
.UNKNOWN
);
485 IIOService ioService
= CdmApplicationState
.getIOService();
487 ImportResult result
= ioService
.importDataFromStream(abcdConfigurators
);
490 display
.asyncExec(new Runnable() {
494 CdmStore
.getContextManager().notifyContextRefresh();
498 return Status
.OK_STATUS
;
505 public Job
createIOServiceJob(final ImportConfiguratorBase configurator
) {
506 Assert
.isNotNull(configurator
, "Configuration may not be null");
507 final Display display
= Display
.getDefault();
508 Job job
= new Job("Update: " + configurator
.getClass().getSimpleName()) {
511 protected IStatus
run(IProgressMonitor monitor
) {
512 monitor
.beginTask("Updating data", IProgressMonitor
.UNKNOWN
);
513 IIOService ioService
= CdmApplicationState
.getIOService();
514 if (configurator
instanceof SortIndexUpdaterConfigurator
){
515 SortIndexUpdaterConfigurator config
= (SortIndexUpdaterConfigurator
)configurator
;
516 ioService
.updateSortIndex(config
);
517 } else if (configurator
instanceof CacheUpdaterConfigurator
){
518 CacheUpdaterConfigurator config
= (CacheUpdaterConfigurator
) configurator
;
519 ioService
.updateCaches(config
);
524 display
.asyncExec(new Runnable() {
528 CdmStore
.getContextManager().notifyContextRefresh();
532 return Status
.OK_STATUS
;