Project

General

Profile

Download (17.8 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2007 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
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.
8
 */
9

    
10
package eu.etaxonomy.taxeditor.io;
11

    
12
import java.io.File;
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;
19

    
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;
28

    
29
import eu.etaxonomy.cdm.api.application.CdmApplicationState;
30
import eu.etaxonomy.cdm.api.application.ICdmRepository;
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.distribution.excelupdate.ExcelDistributionUpdateConfigurator;
40
import eu.etaxonomy.cdm.io.dwca.in.DwcaImportConfigurator;
41
import eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator;
42
import eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator;
43
import eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator;
44
import eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator;
45
import eu.etaxonomy.cdm.io.service.IIOService;
46
import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator;
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;
58

    
59
/**
60
 * <p>
61
 * ImportHandler class.
62
 * </p>
63
 *
64
 * @author n.hoffmann
65
 * @created Sep 11, 2009
66
 * @version 1.0
67
 */
68
public class ImportManager extends AbstractIOManager<IImportConfigurator> implements IPostMoniteredOperationEnabled {
69

    
70
	/**
71
	 * @param applicationConfiguration
72
	 */
73
	private ImportManager(ICdmRepository applicationConfiguration) {
74
		super(applicationConfiguration);
75
	}
76

    
77
	/**
78
	 * <p>
79
	 * NewInstance
80
	 * </p>
81
	 *
82
	 * @param applicationConfiguration
83
	 *            a
84
	 *            {@link eu.etaxonomy.cdm.api.application.CdmApplicationController}
85
	 *            object.
86
	 * @return a {@link eu.etaxonomy.taxeditor.io.ImportManager} object.
87
	 */
88
	public static ImportManager NewInstance(
89
			ICdmRepository applicationConfiguration) {
90
		return new ImportManager(applicationConfiguration);
91
	}
92

    
93
	/**
94
	 * Use when importing data into the current application context
95
	 *
96
	 * @param configurator
97
	 *            a {@link eu.etaxonomy.cdm.io.common.IImportConfigurator}
98
	 *            object.
99
	 * @return a {@link org.eclipse.core.runtime.jobs.Job} object.
100
	 */
101
	@Override
102
	protected Job createIOJob(final IImportConfigurator configurator) {
103
		Assert.isNotNull(configurator, "Configuration may not be null");
104

    
105
		final Display display = Display.getDefault();
106

    
107
		Job job = new Job("Import: " + configurator.getClass().getSimpleName()) {
108

    
109
			@Override
110
			protected IStatus run(IProgressMonitor monitor) {
111
				monitor.beginTask("Importing data", 100);
112
				configurator.setProgressMonitor(CdmProgressMonitorAdapter
113
						.CreateSubMonitor(monitor, 70));
114

    
115
				monitor.worked(5);
116

    
117
				CdmDefaultImport<IImportConfigurator> importer = new CdmDefaultImport<IImportConfigurator>();
118
				importer.setCdmAppController(applicationConfiguration);
119
				monitor.worked(5);
120
				ImportResult importResult = null;
121
				try {
122
					importResult = importer.invoke(configurator);
123

    
124
					monitor.worked(80);
125
				} catch (RuntimeException e) {
126
					MessagingUtils.messageDialog(
127
							"Error importing data",
128
							this,
129
							"An error occured while"
130
									+ "importing from source '"
131
									+ configurator.getSourceNameString()
132
									+ "'.\n"
133
									+ "Please check error log for details.", e);
134
				}
135

    
136
				monitor.worked(5);
137
				monitor.done();
138

    
139

    
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));
145
                    }
146
				}
147
				display.asyncExec(new Runnable() {
148

    
149
					@Override
150
					public void run() {
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());
155
                        dialog.open();
156
						CdmStore.getContextManager().notifyContextRefresh();
157
					}
158
				});
159

    
160
				return Status.OK_STATUS;
161
			}
162
		};
163

    
164
		return job;
165

    
166
	}
167

    
168
	public Job createIOServiceJob(IImportConfigurator configurator, InputStream is, SOURCE_TYPE type) {
169

    
170
	    try {
171
	        return createIOServiceJob(configurator, IOUtils.toByteArray(is), type);
172
	    } catch (Exception e) {
173
	        MessagingUtils.errorDialog("Error importing input stream",
174
	                this,
175
	                e.getMessage(),
176
	                TaxeditorStorePlugin.PLUGIN_ID,
177
	                e,
178
	                true);
179
	    }
180
	    return null;
181
	}
182

    
183
	public Job createIOServiceJob(IImportConfigurator configurator, File importFile, SOURCE_TYPE type) {
184
	    Path path = Paths.get(importFile.toURI());
185
	    try {
186
	        return createIOServiceJob(configurator, Files.readAllBytes(path), type);
187
	    } catch (Exception e) {
188
	        MessagingUtils.errorDialog("Error importing file",
189
	                this,
190
	                e.getMessage(),
191
	                TaxeditorStorePlugin.PLUGIN_ID,
192
	                e,
193
	                true);
194
	    }
195
	    return null;
196
	}
197

    
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()) {
202

    
203
            @Override
204
            protected IStatus run(IProgressMonitor monitor) {
205
                monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
206
                IIOService ioService = CdmApplicationState.getIOService();
207

    
208
                ioService.importData(configurator, data, type);
209

    
210
                monitor.done();
211

    
212
                display.asyncExec(new Runnable() {
213

    
214
                    @Override
215
                    public void run() {
216
                        CdmStore.getContextManager().notifyContextRefresh();
217
                    }
218
                });
219

    
220
                return Status.OK_STATUS;
221
            }
222
        };
223

    
224
        return job;
225

    
226
    }
227

    
228
    public void runMoniteredOperation(IImportConfigurator configurator, InputStream is, SOURCE_TYPE type) {
229

    
230
        try {
231
            runMoniteredOperation(configurator, IOUtils.toByteArray(is), type);
232
        } catch (Exception e) {
233
            MessagingUtils.errorDialog("Error importing input stream",
234
                    this,
235
                    e.getMessage(),
236
                    TaxeditorStorePlugin.PLUGIN_ID,
237
                    e,
238
                    true);
239
        }
240

    
241
    }
242

    
243
    public void runMoniteredOperation(IImportConfigurator configurator, SOURCE_TYPE type) {
244
        byte[] data = new byte[1];
245
        try {
246
            runMoniteredOperation(configurator, data, type);
247
        } catch (Exception e) {
248
            MessagingUtils.errorDialog("Error importing input stream",
249
                    this,
250
                    e.getMessage(),
251
                    TaxeditorStorePlugin.PLUGIN_ID,
252
                    e,
253
                    true);
254
        }
255

    
256
    }
257

    
258
    public void runMoniteredOperation(IImportConfigurator configurator, File importFile, SOURCE_TYPE type) {
259
        Path path = Paths.get(importFile.toURI());
260
        try {
261
            runMoniteredOperation(configurator, Files.readAllBytes(path), type);
262
        } catch (Exception e) {
263
            MessagingUtils.errorDialog("Error importing input stream",
264
                    this,
265
                    e.getMessage(),
266
                    TaxeditorStorePlugin.PLUGIN_ID,
267
                    e,
268
                    true);
269
        }
270

    
271
    }
272

    
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() {
277
            @Override
278
            public void run() {
279
                AbstractUtility.executeMoniteredOperation("Import: " + configurator.getClass().getSimpleName(),
280
                        uuid,
281
                        1000,
282
                        false,
283
                        ImportManager.this,
284
                        null);
285
            }
286
        });
287

    
288
    }
289

    
290
	private IImportConfigurator getConfigurator(TYPE type) {
291
		Assert.isNotNull(type, "Type should not be null");
292

    
293
		switch (type) {
294
		case Jaxb:
295
			return JaxbImportConfigurator.NewInstance(null, null);
296
		case Tcs:
297
			return TcsXmlImportConfigurator.NewInstance(null, null);
298
		case Endnote:
299
			return EndnoteImportConfigurator.NewInstance(null, null);
300
		case Excel_Taxa:
301
			return NormalExplicitImportConfigurator.NewInstance(null, null,
302
					null, null);
303
		case Abcd:
304
			return Abcd206ImportConfigurator.NewInstance(null, null);
305
		case Sdd:
306
			return SDDImportConfigurator.NewInstance(null, null);
307
		case SpecimenCdmExcel:
308
			return SpecimenCdmExcelImportConfigurator.NewInstance(null, null);
309
		case SpecimenSearch:
310
		    return Abcd206ImportConfigurator.NewInstance(null, null);
311
		case Gbif:
312
		    return DwcaImportConfigurator.NewInstance(null, null);
313
		case Excel_Distribution:
314
            return ExcelDistributionUpdateConfigurator.NewInstance(null, null, null);
315
		default:
316
			MessagingUtils.notImplementedMessage(this);
317
			throw new IllegalArgumentException("Import not supported yet");
318
		}
319
	}
320

    
321

    
322
	/**
323
	 * <p>
324
	 * JaxbConfigurator
325
	 * </p>
326
	 *
327
	 * @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator} object.
328
	 */
329
	public final JaxbImportConfigurator JaxbConfigurator() {
330
		return (JaxbImportConfigurator) getConfigurator(TYPE.Jaxb);
331
	}
332

    
333
	/**
334
	 * <p>
335
	 * TcsConfigurator
336
	 * </p>
337
	 *
338
	 * @return a {@link eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator}
339
	 *         object.
340
	 */
341
	public final TcsXmlImportConfigurator TcsConfigurator() {
342
		return (TcsXmlImportConfigurator) getConfigurator(TYPE.Tcs);
343
	}
344

    
345
	/**
346
	 * <p>
347
	 * EndnoteConfigurator
348
	 * </p>
349
	 *
350
	 * @return a
351
	 *         {@link eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator}
352
	 *         object.
353
	 */
354
	public final EndnoteImportConfigurator EndnoteConfigurator() {
355
		return (EndnoteImportConfigurator) getConfigurator(TYPE.Endnote);
356
	}
357

    
358
	/**
359
	 * <p>
360
	 * NormalExplicitConfigurator
361
	 * </p>
362
	 *
363
	 * @return a
364
	 *         {@link eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator}
365
	 *         object.
366
	 */
367
	public final NormalExplicitImportConfigurator NormalExplicitConfigurator() {
368
		return (NormalExplicitImportConfigurator) getConfigurator(TYPE.Excel_Taxa);
369
	}
370

    
371
	/**
372
	 * <p>
373
	 * SddConfigurator
374
	 * </p>
375
	 *
376
	 * @return a {@link eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator}
377
	 *         object.
378
	 */
379
	public final SDDImportConfigurator SddConfigurator() {
380
		return (SDDImportConfigurator) getConfigurator(TYPE.Sdd);
381
	}
382

    
383
	/**
384
	 * <p>
385
	 * AbcdConfigurator
386
	 * </p>
387
	 *
388
	 * @return a
389
	 *         {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator}
390
	 *         object.
391
	 */
392
	public final Abcd206ImportConfigurator AbcdConfigurator() {
393
		return (Abcd206ImportConfigurator) getConfigurator(TYPE.Abcd);
394
	}
395

    
396
	public SpecimenCdmExcelImportConfigurator SpecimenCdmExcelImportConfigurator() {
397
		return (SpecimenCdmExcelImportConfigurator) getConfigurator(TYPE.SpecimenCdmExcel);
398
	}
399

    
400
	public DwcaImportConfigurator DwcaImportConfigurator() {
401
		return (DwcaImportConfigurator) getConfigurator(TYPE.Gbif);
402
	}
403

    
404

    
405
    /**
406
     * {@inheritDoc}
407
     */
408
    @Override
409
    public void postOperation(IRemotingProgressMonitor monitor) {
410
        Display.getDefault().asyncExec(new Runnable() {
411

    
412
            @Override
413
            public void run() {
414
                CdmStore.getContextManager().notifyContextRefresh();
415
            }
416
        });
417

    
418
    }
419

    
420
	public Job createIOServiceJob(final GbifImportConfigurator<GbifImportState, InputStream> configurator) {
421
		 Assert.isNotNull(configurator, "Configuration may not be null");
422
	        final Display display = Display.getDefault();
423
	        Job job = new Job("Import: " + " Dwca") {
424

    
425
	            @Override
426
	            protected IStatus run(IProgressMonitor monitor) {
427
	                monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
428
	                IIOService ioService = CdmApplicationState.getIOService();
429

    
430
	                ImportResult result = ioService.importDataFromStream(configurator);
431
	                monitor.done();
432

    
433
//	                display.asyncExec(new Runnable() {
434
//
435
//	                    @Override
436
//	                    public void run() {
437
//	                        CdmStore.getContextManager().notifyContextRefresh();
438
//	                    }
439
//	                });
440

    
441
	                return Status.OK_STATUS;
442
	            }
443
	        };
444

    
445
	        return job;
446

    
447
	}
448

    
449
	public Job createIOServiceJob(final Abcd206ImportConfigurator configurator) {
450
		 Assert.isNotNull(configurator, "Configuration may not be null");
451
	        final Display display = Display.getDefault();
452
	        Job job = new Job("Import: " + " Dwca") {
453

    
454
	            @Override
455
	            protected IStatus run(IProgressMonitor monitor) {
456
	                monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
457
	                IIOService ioService = CdmApplicationState.getIOService();
458

    
459
	                ImportResult result = ioService.importDataFromStream(configurator);
460
	                monitor.done();
461

    
462
	                display.asyncExec(new Runnable() {
463

    
464
	                    @Override
465
	                    public void run() {
466
	                        CdmStore.getContextManager().notifyContextRefresh();
467
	                    }
468
	                });
469

    
470
	                return Status.OK_STATUS;
471
	            }
472
	        };
473

    
474
	        return job;
475

    
476
	}
477

    
478
	public Job createIOServiceJob(
479
			final List<Abcd206ImportConfigurator> abcdConfigurators) {
480
		 Assert.isNotNull(abcdConfigurators, "Configuration may not be null");
481
	        final Display display = Display.getDefault();
482
	        Job job = new Job("Import: " + " Dwca") {
483

    
484
	            @Override
485
	            protected IStatus run(IProgressMonitor monitor) {
486
	                monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
487
	                IIOService ioService = CdmApplicationState.getIOService();
488

    
489
	                ImportResult result = ioService.importDataFromStream(abcdConfigurators);
490
	                monitor.done();
491

    
492
	                display.asyncExec(new Runnable() {
493

    
494
	                    @Override
495
	                    public void run() {
496
	                        CdmStore.getContextManager().notifyContextRefresh();
497
	                    }
498
	                });
499

    
500
	                return Status.OK_STATUS;
501
	            }
502
	        };
503

    
504
	        return job;
505
	}
506

    
507
    public Job createIOServiceJob(final ImportConfiguratorBase configurator) {
508
        Assert.isNotNull(configurator, "Configuration may not be null");
509
        final Display display = Display.getDefault();
510
        Job job = new Job("Update: " + configurator.getClass().getSimpleName()) {
511

    
512
            @Override
513
            protected IStatus run(IProgressMonitor monitor) {
514
                monitor.beginTask("Updating data", IProgressMonitor.UNKNOWN);
515
                IIOService ioService = CdmApplicationState.getIOService();
516
                if (configurator instanceof SortIndexUpdaterConfigurator){
517
                    SortIndexUpdaterConfigurator config = (SortIndexUpdaterConfigurator)configurator;
518
                    ioService.updateSortIndex(config);
519
                } else if (configurator instanceof CacheUpdaterConfigurator){
520
                    CacheUpdaterConfigurator config = (CacheUpdaterConfigurator) configurator;
521
                    ioService.updateCaches(config);
522
                } else if (configurator instanceof ExcelDistributionUpdateConfigurator){
523
                    ExcelDistributionUpdateConfigurator config = (ExcelDistributionUpdateConfigurator) configurator;
524
                    ioService.updateDistributionData(config);
525
                }
526

    
527
                monitor.done();
528

    
529
                display.asyncExec(new Runnable() {
530

    
531
                    @Override
532
                    public void run() {
533
                        CdmStore.getContextManager().notifyContextRefresh();
534
                    }
535
                });
536

    
537
                return Status.OK_STATUS;
538
            }
539
        };
540

    
541
        return job;
542

    
543
    }
544

    
545
    /**
546
     * @return
547
     */
548
    public ExcelDistributionUpdateConfigurator ExcelDistributionUpdateConfigurator() {
549
        return (ExcelDistributionUpdateConfigurator) getConfigurator(TYPE.Excel_Distribution);
550
    }
551

    
552

    
553

    
554

    
555

    
556
}
(3-3/3)