Project

General

Profile

Download (18.5 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.CdmDefaultImport;
33
import eu.etaxonomy.cdm.io.common.IImportConfigurator;
34
import eu.etaxonomy.cdm.io.common.IImportConfigurator.SOURCE_TYPE;
35
import eu.etaxonomy.cdm.io.common.ImportConfiguratorBase;
36
import eu.etaxonomy.cdm.io.common.ImportResult;
37
import eu.etaxonomy.cdm.io.distribution.excelupdate.ExcelDistributionUpdateConfigurator;
38
import eu.etaxonomy.cdm.io.dwca.in.DwcaImportConfigurator;
39
import eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator;
40
import eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator;
41
import eu.etaxonomy.cdm.io.operation.config.CacheUpdaterConfigurator;
42
import eu.etaxonomy.cdm.io.operation.config.SortIndexUpdaterConfigurator;
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
	String importSuccessMessage = "The import was successful.";
71
	String updateSuccessMessage = "The update was successful.";
72

    
73
	/**
74
	 * @param applicationConfiguration
75
	 */
76
	private ImportManager(ICdmRepository applicationConfiguration) {
77
		super(applicationConfiguration);
78
	}
79

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

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

    
108
		final Display display = Display.getDefault();
109

    
110
		Job job = new Job("Import: " + configurator.getClass().getSimpleName()) {
111

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

    
118
				monitor.worked(5);
119

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

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

    
139
				monitor.worked(5);
140
				monitor.done();
141

    
142

    
143
				final StringBuilder reportText = new StringBuilder();
144
				if(importResult!=null){
145
				    List<byte[]> reports = importResult.getReports();
146
				    for (byte[] bs : reports) {
147
                        reportText.append(new String(bs));
148
                    }
149
				}
150
				display.asyncExec(new Runnable() {
151

    
152
					@Override
153
					public void run() {
154
                        // display reports with possibility to save
155
                        ReportTextDialog dialog = new ReportTextDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
156
                        dialog.setTitle(configurator.getClass().getSimpleName()+" Report");
157
                        dialog.setReportText(reportText.toString());
158
                        dialog.open();
159
						CdmStore.getContextManager().notifyContextRefresh();
160
					}
161
				});
162

    
163
				return Status.OK_STATUS;
164
			}
165
		};
166

    
167
		return job;
168

    
169
	}
170

    
171
	public Job createIOServiceJob(IImportConfigurator configurator, InputStream is, SOURCE_TYPE type) {
172

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

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

    
201
    public Job createIOServiceJob(final IImportConfigurator configurator, final byte[] data, final SOURCE_TYPE type) {
202
        Assert.isNotNull(configurator, "Configuration may not be null");
203
        final Display display = Display.getDefault();
204
        Job job = new Job("Import: " + configurator.getClass().getSimpleName()) {
205

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

    
211
                ImportResult result = ioService.importData(configurator, data, type);
212

    
213
                monitor.done();
214

    
215
                display.asyncExec(new Runnable() {
216

    
217
                    @Override
218
                    public void run() {
219
                        CdmStore.getContextManager().notifyContextRefresh();
220
                    }
221
                });
222
                showResult(configurator.getClass().getSimpleName(), display, result, importSuccessMessage);
223
                return Status.OK_STATUS;
224
            }
225
        };
226

    
227
        return job;
228

    
229
    }
230

    
231
    public void runMoniteredOperation(IImportConfigurator configurator, InputStream is, SOURCE_TYPE type) {
232

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

    
244
    }
245

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

    
259
    }
260

    
261
    public void runMoniteredOperation(IImportConfigurator configurator, File importFile, SOURCE_TYPE type) {
262
        Path path = Paths.get(importFile.toURI());
263
        try {
264
            runMoniteredOperation(configurator, Files.readAllBytes(path), type);
265

    
266
        } catch (Exception e) {
267
            MessagingUtils.errorDialog("Error importing input stream",
268
                    this,
269
                    e.getMessage(),
270
                    TaxeditorStorePlugin.PLUGIN_ID,
271
                    e,
272
                    true);
273
        }
274

    
275
    }
276

    
277
    public void runMoniteredOperation(final IImportConfigurator configurator, final byte[] data, final SOURCE_TYPE type) {
278
        IIOService ioService = CdmApplicationState.getIOService();
279
        final UUID uuid = ioService.monitImportData(configurator, data, type);
280
        Display.getDefault().asyncExec(new Runnable() {
281
            @Override
282
            public void run() {
283
                AbstractUtility.executeMoniteredOperation("Import: " + configurator.getClass().getSimpleName(),
284
                        uuid,
285
                        1000,
286
                        false,
287
                        ImportManager.this,
288
                        null, true);
289
            }
290
        });
291

    
292
    }
293

    
294
	private IImportConfigurator getConfigurator(TYPE type) {
295
		Assert.isNotNull(type, "Type should not be null");
296

    
297
		switch (type) {
298
		case Jaxb:
299
			return JaxbImportConfigurator.NewInstance(null, null);
300
		case Tcs:
301
			return TcsXmlImportConfigurator.NewInstance(null, null);
302
		case Endnote:
303
			return EndnoteImportConfigurator.NewInstance(null, null);
304
		case Excel_Taxa:
305
			return NormalExplicitImportConfigurator.NewInstance(null, null,
306
					null, null);
307
		case Abcd:
308
			return Abcd206ImportConfigurator.NewInstance(null, null);
309
		case Sdd:
310
			return SDDImportConfigurator.NewInstance(null, null);
311
		case SpecimenCdmExcel:
312
			return SpecimenCdmExcelImportConfigurator.NewInstance(null, null);
313
		case SpecimenSearch:
314
		    return Abcd206ImportConfigurator.NewInstance(null, null);
315
		case Gbif:
316
		    return DwcaImportConfigurator.NewInstance(null, null);
317
		case Excel_Distribution:
318
            return ExcelDistributionUpdateConfigurator.NewInstance(null, null, null);
319

    
320
		default:
321
			MessagingUtils.notImplementedMessage(this);
322
			throw new IllegalArgumentException("Import not supported yet");
323
		}
324
	}
325

    
326

    
327
	/**
328
	 * <p>
329
	 * JaxbConfigurator
330
	 * </p>
331
	 *
332
	 * @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator} object.
333
	 */
334
	public final JaxbImportConfigurator JaxbConfigurator() {
335
		return (JaxbImportConfigurator) getConfigurator(TYPE.Jaxb);
336
	}
337

    
338
	/**
339
	 * <p>
340
	 * TcsConfigurator
341
	 * </p>
342
	 *
343
	 * @return a {@link eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator}
344
	 *         object.
345
	 */
346
	public final TcsXmlImportConfigurator TcsConfigurator() {
347
		return (TcsXmlImportConfigurator) getConfigurator(TYPE.Tcs);
348
	}
349

    
350
	/**
351
	 * <p>
352
	 * EndnoteConfigurator
353
	 * </p>
354
	 *
355
	 * @return a
356
	 *         {@link eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator}
357
	 *         object.
358
	 */
359
	public final EndnoteImportConfigurator EndnoteConfigurator() {
360
		return (EndnoteImportConfigurator) getConfigurator(TYPE.Endnote);
361
	}
362

    
363
	/**
364
	 * <p>
365
	 * NormalExplicitConfigurator
366
	 * </p>
367
	 *
368
	 * @return a
369
	 *         {@link eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator}
370
	 *         object.
371
	 */
372
	public final NormalExplicitImportConfigurator NormalExplicitConfigurator() {
373
		return (NormalExplicitImportConfigurator) getConfigurator(TYPE.Excel_Taxa);
374
	}
375

    
376
	/**
377
	 * <p>
378
	 * SddConfigurator
379
	 * </p>
380
	 *
381
	 * @return a {@link eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator}
382
	 *         object.
383
	 */
384
	public final SDDImportConfigurator SddConfigurator() {
385
		return (SDDImportConfigurator) getConfigurator(TYPE.Sdd);
386
	}
387

    
388
	/**
389
	 * <p>
390
	 * AbcdConfigurator
391
	 * </p>
392
	 *
393
	 * @return a
394
	 *         {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator}
395
	 *         object.
396
	 */
397
	public final Abcd206ImportConfigurator AbcdConfigurator() {
398
		return (Abcd206ImportConfigurator) getConfigurator(TYPE.Abcd);
399
	}
400

    
401
	public SpecimenCdmExcelImportConfigurator SpecimenCdmExcelImportConfigurator() {
402
		return (SpecimenCdmExcelImportConfigurator) getConfigurator(TYPE.SpecimenCdmExcel);
403
	}
404

    
405
	public DwcaImportConfigurator DwcaImportConfigurator() {
406
		return (DwcaImportConfigurator) getConfigurator(TYPE.Gbif);
407
	}
408

    
409

    
410
    /**
411
     * {@inheritDoc}
412
     */
413
    @Override
414
    public void postOperation(IRemotingProgressMonitor monitor) {
415
        Display.getDefault().asyncExec(new Runnable() {
416

    
417
            @Override
418
            public void run() {
419
                CdmStore.getContextManager().notifyContextRefresh();
420
            }
421
        });
422

    
423
    }
424

    
425
	public Job createIOServiceJob(final GbifImportConfigurator<GbifImportState, InputStream> configurator) {
426
		 Assert.isNotNull(configurator, "Configuration may not be null");
427
	        final Display display = Display.getDefault();
428
	        Job job = new Job("Import: " + " Dwca") {
429

    
430
	            @Override
431
	            protected IStatus run(IProgressMonitor monitor) {
432
	                monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
433
	                IIOService ioService = CdmApplicationState.getIOService();
434

    
435
	                ImportResult result = ioService.importDataFromStream(configurator);
436
	                monitor.done();
437

    
438
//	                display.asyncExec(new Runnable() {
439
//
440
//	                    @Override
441
//	                    public void run() {
442
//	                        CdmStore.getContextManager().notifyContextRefresh();
443
//	                    }
444
//	                });
445
	                showResult("Gbif Import", display, result, importSuccessMessage);
446
	                return Status.OK_STATUS;
447
	            }
448
	        };
449

    
450
	        return job;
451

    
452
	}
453

    
454
	public Job createIOServiceJob(final Abcd206ImportConfigurator configurator) {
455
		 Assert.isNotNull(configurator, "Configuration may not be null");
456
	        final Display display = Display.getDefault();
457
	        Job job = new Job("Import: " + " Dwca") {
458

    
459
	            @Override
460
	            protected IStatus run(IProgressMonitor monitor) {
461
	                monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
462
	                IIOService ioService = CdmApplicationState.getIOService();
463

    
464
	                ImportResult result = ioService.importDataFromStream(configurator);
465
	                monitor.done();
466

    
467
	                display.asyncExec(new Runnable() {
468

    
469
	                    @Override
470
	                    public void run() {
471
	                        CdmStore.getContextManager().notifyContextRefresh();
472
	                    }
473
	                });
474
	                showResult("Abcd Import", display, result, importSuccessMessage);
475
	                return Status.OK_STATUS;
476
	            }
477
	        };
478

    
479
	        return job;
480

    
481
	}
482

    
483
	public Job createIOServiceJob(
484
			final List<Abcd206ImportConfigurator> abcdConfigurators) {
485
		 Assert.isNotNull(abcdConfigurators, "Configuration may not be null");
486
	        final Display display = Display.getDefault();
487
	        Job job = new Job("Import: " + " Abcd") {
488

    
489
	            @Override
490
	            protected IStatus run(IProgressMonitor monitor) {
491
	                monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
492
	                IIOService ioService = CdmApplicationState.getIOService();
493

    
494
	                ImportResult result = ioService.importDataFromStream(abcdConfigurators);
495
	                monitor.done();
496

    
497
	                display.asyncExec(new Runnable() {
498

    
499
	                    @Override
500
	                    public void run() {
501
	                        CdmStore.getContextManager().notifyContextRefresh();
502
	                    }
503
	                });
504
	                showResult("Abcd Import", display, result, importSuccessMessage);
505

    
506

    
507

    
508
	                return Status.OK_STATUS;
509
	            }
510
	        };
511

    
512
	        return job;
513
	}
514

    
515
    public Job createIOServiceJob(final ImportConfiguratorBase configurator) {
516
        Assert.isNotNull(configurator, "Configuration may not be null");
517
        final Display display = Display.getDefault();
518

    
519
        Job job = new Job("Update: " + configurator.getClass().getSimpleName()) {
520

    
521
            @Override
522
            protected IStatus run(IProgressMonitor monitor) {
523
                monitor.beginTask("Updating data", IProgressMonitor.UNKNOWN);
524
                IIOService ioService = CdmApplicationState.getIOService();
525
                ImportResult importResult = null;
526
                if (configurator instanceof SortIndexUpdaterConfigurator){
527
                    SortIndexUpdaterConfigurator config = (SortIndexUpdaterConfigurator)configurator;
528
                    importResult =ioService.updateSortIndex(config);
529
                } else if (configurator instanceof CacheUpdaterConfigurator){
530
                    CacheUpdaterConfigurator config = (CacheUpdaterConfigurator) configurator;
531
                    importResult = ioService.updateCaches(config);
532
                } else if (configurator instanceof ExcelDistributionUpdateConfigurator){
533
                    ExcelDistributionUpdateConfigurator config = (ExcelDistributionUpdateConfigurator) configurator;
534
                    importResult =ioService.updateDistributionData(config);
535
                }
536

    
537
                monitor.done();
538
//                display.asyncExec(new Runnable() {
539
//
540
//                    @Override
541
//                    public void run() {
542
//                        CdmStore.getContextManager().notifyContextRefresh();
543
//                    }
544
//                });
545
                showResult(configurator.getClass().getSimpleName(), display, importResult, updateSuccessMessage);
546

    
547

    
548
                return Status.OK_STATUS;
549
            }
550

    
551

    
552
        };
553

    
554
        return job;
555

    
556
    }
557

    
558
    /**
559
     * @return
560
     */
561
    public ExcelDistributionUpdateConfigurator ExcelDistributionUpdateConfigurator() {
562
        return (ExcelDistributionUpdateConfigurator) getConfigurator(TYPE.Excel_Distribution);
563
    }
564

    
565

    
566

    
567

    
568

    
569

    
570

    
571
}
(3-3/3)