Project

General

Profile

Download (18 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
package eu.etaxonomy.taxeditor.io;
10

    
11
import java.io.File;
12
import java.io.InputStream;
13
import java.nio.file.Files;
14
import java.nio.file.Path;
15
import java.nio.file.Paths;
16
import java.util.List;
17
import java.util.UUID;
18

    
19
import org.apache.commons.io.IOUtils;
20
import org.eclipse.core.runtime.Assert;
21
import org.eclipse.core.runtime.IProgressMonitor;
22
import org.eclipse.core.runtime.IStatus;
23
import org.eclipse.core.runtime.Status;
24
import org.eclipse.core.runtime.jobs.Job;
25
import org.eclipse.swt.widgets.Display;
26

    
27
import eu.etaxonomy.cdm.api.application.CdmApplicationState;
28
import eu.etaxonomy.cdm.api.application.ICdmRepository;
29
import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
30
import eu.etaxonomy.cdm.io.common.IImportConfigurator;
31
import eu.etaxonomy.cdm.io.common.IImportConfigurator.SOURCE_TYPE;
32
import eu.etaxonomy.cdm.io.common.ImportConfiguratorBase;
33
import eu.etaxonomy.cdm.io.common.ImportResult;
34
import eu.etaxonomy.cdm.io.descriptive.owl.in.StructureTreeOwlImportConfigurator;
35
import eu.etaxonomy.cdm.io.distribution.excelupdate.ExcelDistributionUpdateConfigurator;
36
import eu.etaxonomy.cdm.io.dwca.in.DwcaImportConfigurator;
37
import eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator;
38
import eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator;
39
import eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator;
40
import eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator;
41
import eu.etaxonomy.cdm.io.service.IIOService;
42
import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator;
43
import eu.etaxonomy.cdm.io.specimen.excel.in.SpecimenCdmExcelImportConfigurator;
44
import eu.etaxonomy.cdm.io.specimen.gbif.in.GbifImportConfigurator;
45
import eu.etaxonomy.cdm.io.specimen.gbif.in.GbifImportState;
46
import eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator;
47
import eu.etaxonomy.taxeditor.event.EventUtility;
48
import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
49
import eu.etaxonomy.taxeditor.model.AbstractUtility;
50
import eu.etaxonomy.taxeditor.model.MessagingUtils;
51
import eu.etaxonomy.taxeditor.operation.IPostMoniteredOperationEnabled;
52
import eu.etaxonomy.taxeditor.store.CdmStore;
53
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
54

    
55
/**
56
 * @author n.hoffmann
57
 * @created Sep 11, 2009
58
 */
59
public class ImportManager extends AbstractIOManager<IImportConfigurator> implements IPostMoniteredOperationEnabled {
60

    
61
	String importSuccessMessage = "The import was successful.";
62
	String updateSuccessMessage = "The update was successful.";
63

    
64
	private ImportManager(ICdmRepository applicationConfiguration) {
65
		super(applicationConfiguration);
66
	}
67

    
68
	public static ImportManager NewInstance(
69
			ICdmRepository applicationConfiguration) {
70
		return new ImportManager(applicationConfiguration);
71
	}
72

    
73
//	/**
74
//	 * Use when importing data into the current application context
75
//	 *
76
//	 * @param configurator
77
//	 *            a {@link eu.etaxonomy.cdm.io.common.IImportConfigurator}
78
//	 *            object.
79
//	 * @return a {@link org.eclipse.core.runtime.jobs.Job} object.
80
//	 */
81
//	@Override
82
//	protected Job createIOJob(final IImportConfigurator configurator) {
83
//		Assert.isNotNull(configurator, "Configuration may not be null");
84
//
85
//		final Display display = Display.getDefault();
86
//
87
//		Job job = new Job("Import: " + configurator.getClass().getSimpleName()) {
88
//
89
//			@Override
90
//			protected IStatus run(IProgressMonitor monitor) {
91
//				monitor.beginTask("Importing data", 100);
92
//				configurator.setProgressMonitor(CdmProgressMonitorAdapter
93
//						.CreateSubMonitor(monitor, 70));
94
//
95
//				monitor.worked(5);
96
//
97
//				CdmDefaultImport<IImportConfigurator> importer = new CdmDefaultImport<>();
98
//				importer.setCdmAppController(applicationConfiguration);
99
//				monitor.worked(5);
100
//				ImportResult importResult = null;
101
//				try {
102
//					importResult = importer.invoke(configurator);
103
//
104
//					monitor.worked(80);
105
//				} catch (RuntimeException e) {
106
//					MessagingUtils.messageDialog(
107
//							"Error importing data",
108
//							this,
109
//							"An error occurred while"
110
//									+ "importing from source '"
111
//									+ configurator.getSourceNameString()
112
//									+ "'.\n"
113
//									+ "Please check error log for details.", e);
114
//				}
115
//
116
//				monitor.worked(5);
117
//				monitor.done();
118
//
119
//
120
//				final StringBuilder reportText = new StringBuilder();
121
//				if(importResult!=null){
122
//				    List<byte[]> reports = importResult.getReports();
123
//				    for (byte[] bs : reports) {
124
//                        reportText.append(new String(bs));
125
//                    }
126
//				}
127
//				display.asyncExec(new Runnable() {
128
//
129
//					@Override
130
//					public void run() {
131
//                        // display reports with possibility to save
132
//                        ReportTextDialog dialog = new ReportTextDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
133
//                        dialog.setTitle(configurator.getClass().getSimpleName()+" Report");
134
//                        dialog.setReportText(reportText.toString());
135
//                        dialog.open();
136
//
137
//						CdmStore.getContextManager().notifyContextRefresh();
138
//
139
//					}
140
//				});
141
//
142
//				return Status.OK_STATUS;
143
//			}
144
//		};
145
//
146
//		return job;
147
//
148
//	}
149

    
150
	public Job createIOServiceJob(IImportConfigurator configurator, InputStream is, SOURCE_TYPE type) {
151

    
152
	    try {
153
	        return createIOServiceJob(configurator, IOUtils.toByteArray(is), type);
154
	    } catch (Exception e) {
155
	        MessagingUtils.errorDialog("Error importing input stream",
156
	                this,
157
	                e.getMessage(),
158
	                TaxeditorStorePlugin.PLUGIN_ID,
159
	                e,
160
	                true);
161
	    }
162
	    return null;
163
	}
164

    
165
	public Job createIOServiceJob(IImportConfigurator configurator, File importFile, SOURCE_TYPE type) {
166
	    Path path = Paths.get(importFile.toURI());
167
	    try {
168
	        return createIOServiceJob(configurator, Files.readAllBytes(path), type);
169
	    } catch (Exception e) {
170
	        MessagingUtils.errorDialog("Error importing file",
171
	                this,
172
	                e.getMessage(),
173
	                TaxeditorStorePlugin.PLUGIN_ID,
174
	                e,
175
	                true);
176
	    }
177
	    return null;
178
	}
179

    
180
    public Job createIOServiceJob(final IImportConfigurator configurator, final byte[] data, final SOURCE_TYPE type) {
181
        Assert.isNotNull(configurator, "Configuration may not be null");
182
        final Display display = Display.getDefault();
183
        Job job = new Job("Import: " + configurator.getClass().getSimpleName()) {
184

    
185
            @Override
186
            protected IStatus run(IProgressMonitor monitor) {
187
                monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
188
                IIOService ioService = CdmApplicationState.getIOService();
189

    
190
                ImportResult result = ioService.importData(configurator, data, type);
191

    
192
                monitor.done();
193

    
194
                display.asyncExec(new Runnable() {
195

    
196
                    @Override
197
                    public void run() {
198
                        CdmStore.getContextManager().notifyContextRefresh();
199
                    }
200
                });
201
                showResult(configurator.getClass().getSimpleName(), display, result, importSuccessMessage);
202
                return Status.OK_STATUS;
203
            }
204
        };
205

    
206
        return job;
207

    
208
    }
209

    
210
    public void runMoniteredOperation(IImportConfigurator configurator, InputStream is, SOURCE_TYPE type) {
211

    
212
        try {
213
            runMoniteredOperation(configurator, IOUtils.toByteArray(is), type);
214
        } catch (Exception e) {
215
            MessagingUtils.errorDialog("Error importing input stream",
216
                    this,
217
                    e.getMessage(),
218
                    TaxeditorStorePlugin.PLUGIN_ID,
219
                    e,
220
                    true);
221
        }
222

    
223
    }
224

    
225
    public void runMoniteredOperation(IImportConfigurator configurator, SOURCE_TYPE type) {
226
        byte[] data = new byte[1];
227
        try {
228
            runMoniteredOperation(configurator, data, type);
229
        } catch (Exception e) {
230
            MessagingUtils.errorDialog("Error importing input stream",
231
                    this,
232
                    e.getMessage(),
233
                    TaxeditorStorePlugin.PLUGIN_ID,
234
                    e,
235
                    true);
236
        }
237

    
238
    }
239

    
240
    public void runMoniteredOperation(IImportConfigurator configurator, File importFile, SOURCE_TYPE type) {
241
        Path path = Paths.get(importFile.toURI());
242
        try {
243
            runMoniteredOperation(configurator, Files.readAllBytes(path), type);
244

    
245
        } catch (Exception e) {
246
            MessagingUtils.errorDialog("Error importing input stream",
247
                    this,
248
                    e.getMessage(),
249
                    TaxeditorStorePlugin.PLUGIN_ID,
250
                    e,
251
                    true);
252
        }
253

    
254
    }
255

    
256
    public void runMoniteredOperation(final IImportConfigurator configurator, final byte[] data, final SOURCE_TYPE type) {
257
        IIOService ioService = CdmApplicationState.getIOService();
258
        final UUID uuid = ioService.monitImportData(configurator, data, type);
259
        Display.getDefault().asyncExec(new Runnable() {
260
            @Override
261
            public void run() {
262
                AbstractUtility.executeMoniteredOperation("Import: " + configurator.getClass().getSimpleName(),
263
                        uuid,
264
                        1000,
265
                        false,
266
                        ImportManager.this,
267
                        null, true, true);
268
            }
269
        });
270

    
271
    }
272

    
273
	private IImportConfigurator getConfigurator(TYPE type) {
274
		Assert.isNotNull(type, "Type should not be null");
275

    
276
		switch (type) {
277
		case Jaxb:
278
			return JaxbImportConfigurator.NewInstance(null, null);
279
		case Tcs:
280
			return TcsXmlImportConfigurator.NewInstance(null, null);
281
		case Endnote:
282
			return EndnoteImportConfigurator.NewInstance(null, null);
283
		case Excel_Taxa:
284
			return NormalExplicitImportConfigurator.NewInstance(null, null,
285
					null, null);
286
		case Abcd:
287
			return Abcd206ImportConfigurator.NewInstance(null, null);
288
		case Sdd:
289
			return SDDImportConfigurator.NewInstance(null, null);
290
		case SpecimenCdmExcel:
291
			return SpecimenCdmExcelImportConfigurator.NewInstance(null, null);
292
		case SpecimenSearch:
293
		    return Abcd206ImportConfigurator.NewInstance(null, null);
294
		case Gbif:
295
		    return DwcaImportConfigurator.NewInstance(null, null);
296
		case Excel_Distribution:
297
            return ExcelDistributionUpdateConfigurator.NewInstance(null, null, null);
298
        case OWL:
299
            return StructureTreeOwlImportConfigurator.NewInstance(null);
300

    
301
		default:
302
			MessagingUtils.notImplementedMessage(this);
303
			throw new IllegalArgumentException("Import not supported yet");
304
		}
305
	}
306

    
307

    
308
	/**
309
	 * <p>
310
	 * JaxbConfigurator
311
	 * </p>
312
	 *
313
	 * @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator} object.
314
	 */
315
	public final JaxbImportConfigurator JaxbConfigurator() {
316
		return (JaxbImportConfigurator) getConfigurator(TYPE.Jaxb);
317
	}
318

    
319
	/**
320
	 * <p>
321
	 * TcsConfigurator
322
	 * </p>
323
	 *
324
	 * @return a {@link eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator}
325
	 *         object.
326
	 */
327
	public final TcsXmlImportConfigurator TcsConfigurator() {
328
		return (TcsXmlImportConfigurator) getConfigurator(TYPE.Tcs);
329
	}
330

    
331
	/**
332
	 * <p>
333
	 * EndnoteConfigurator
334
	 * </p>
335
	 *
336
	 * @return a
337
	 *         {@link eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator}
338
	 *         object.
339
	 */
340
	public final EndnoteImportConfigurator EndnoteConfigurator() {
341
		return (EndnoteImportConfigurator) getConfigurator(TYPE.Endnote);
342
	}
343

    
344
	/**
345
	 * <p>
346
	 * NormalExplicitConfigurator
347
	 * </p>
348
	 *
349
	 * @return a
350
	 *         {@link eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator}
351
	 *         object.
352
	 */
353
	public final NormalExplicitImportConfigurator NormalExplicitConfigurator() {
354
		return (NormalExplicitImportConfigurator) getConfigurator(TYPE.Excel_Taxa);
355
	}
356

    
357
	/**
358
	 * <p>
359
	 * SddConfigurator
360
	 * </p>
361
	 *
362
	 * @return a {@link eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator}
363
	 *         object.
364
	 */
365
	public final SDDImportConfigurator SddConfigurator() {
366
		return (SDDImportConfigurator) getConfigurator(TYPE.Sdd);
367
	}
368

    
369
	/**
370
	 * <p>
371
	 * AbcdConfigurator
372
	 * </p>
373
	 *
374
	 * @return a
375
	 *         {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator}
376
	 *         object.
377
	 */
378
	public final Abcd206ImportConfigurator AbcdConfigurator() {
379
		return (Abcd206ImportConfigurator) getConfigurator(TYPE.Abcd);
380
	}
381

    
382
	public SpecimenCdmExcelImportConfigurator SpecimenCdmExcelImportConfigurator() {
383
		return (SpecimenCdmExcelImportConfigurator) getConfigurator(TYPE.SpecimenCdmExcel);
384
	}
385

    
386
	public DwcaImportConfigurator DwcaImportConfigurator() {
387
		return (DwcaImportConfigurator) getConfigurator(TYPE.Gbif);
388
	}
389

    
390
	public final StructureTreeOwlImportConfigurator OwlImportConfigurator() {
391
	    return (StructureTreeOwlImportConfigurator) getConfigurator(TYPE.OWL);
392
	}
393

    
394

    
395
    /**
396
     * {@inheritDoc}
397
     */
398
    @Override
399
    public void postOperation(IRemotingProgressMonitor monitor) {
400
        Display.getDefault().asyncExec(new Runnable() {
401

    
402
            @Override
403
            public void run() {
404
                CdmStore.getContextManager().notifyContextRefresh();
405
            }
406
        });
407

    
408
    }
409

    
410
	public Job createIOServiceJob(final GbifImportConfigurator<GbifImportState, InputStream> configurator) {
411
		 Assert.isNotNull(configurator, "Configuration may not be null");
412
	        final Display display = Display.getDefault();
413
	        Job job = new Job("Import: " + " Dwca") {
414

    
415
	            @Override
416
	            protected IStatus run(IProgressMonitor monitor) {
417
	                monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
418
	                IIOService ioService = CdmApplicationState.getIOService();
419

    
420
	                ImportResult result = ioService.importDataFromStream(configurator);
421
	                monitor.done();
422

    
423
//	                display.asyncExec(new Runnable() {
424
//
425
//	                    @Override
426
//	                    public void run() {
427
//	                        CdmStore.getContextManager().notifyContextRefresh();
428
//	                    }
429
//	                });
430
	                showResult("Gbif Import", display, result, importSuccessMessage);
431
	                return Status.OK_STATUS;
432
	            }
433
	        };
434

    
435
	        return job;
436

    
437
	}
438

    
439
	public Job createIOServiceJob(final Abcd206ImportConfigurator configurator) {
440
		 Assert.isNotNull(configurator, "Configuration may not be null");
441
	        final Display display = Display.getDefault();
442
	        Job job = new Job("Import: " + " Dwca") {
443

    
444
	            @Override
445
	            protected IStatus run(IProgressMonitor monitor) {
446
	                monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
447
	                IIOService ioService = CdmApplicationState.getIOService();
448

    
449
	                ImportResult result = ioService.importDataFromStream(configurator);
450
	                monitor.done();
451

    
452
	                display.asyncExec(new Runnable() {
453

    
454
	                    @Override
455
	                    public void run() {
456
	                        CdmStore.getContextManager().notifyContextRefresh();
457
	                    }
458
	                });
459
	                showResult("Abcd Import", display, result, importSuccessMessage);
460
	                return Status.OK_STATUS;
461
	            }
462
	        };
463

    
464
	        return job;
465

    
466
	}
467

    
468
	public Job createIOServiceJob(
469
			final List<Abcd206ImportConfigurator> abcdConfigurators) {
470
		 Assert.isNotNull(abcdConfigurators, "Configuration may not be null");
471
	        final Display display = Display.getDefault();
472
	        Job job = new Job("Import: " + " Abcd") {
473

    
474
	            @Override
475
	            protected IStatus run(IProgressMonitor monitor) {
476
	                monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
477
	                IIOService ioService = CdmApplicationState.getIOService();
478

    
479
	                ImportResult result = ioService.importDataFromStream(abcdConfigurators);
480
	                monitor.done();
481

    
482
	                display.asyncExec(new Runnable() {
483

    
484
	                    @Override
485
	                    public void run() {
486
	                        CdmStore.getContextManager().notifyContextRefresh();
487
	                    }
488
	                });
489
	                showResult("Abcd Import", display, result, importSuccessMessage);
490
	                EventUtility.postEvent(WorkbenchEventConstants.REFRESH_NAVIGATOR, true);
491

    
492

    
493
	                return Status.OK_STATUS;
494
	            }
495
	        };
496

    
497
	        return job;
498
	}
499

    
500
    public Job createIOServiceJob(final ImportConfiguratorBase configurator) {
501
        Assert.isNotNull(configurator, "Configuration may not be null");
502
        final Display display = Display.getDefault();
503

    
504
        Job job = new Job("Update: " + configurator.getClass().getSimpleName()) {
505

    
506
            @Override
507
            protected IStatus run(IProgressMonitor monitor) {
508
                monitor.beginTask("Updating data", IProgressMonitor.UNKNOWN);
509
                IIOService ioService = CdmApplicationState.getIOService();
510
                ImportResult importResult = null;
511
                if (configurator instanceof ExcelDistributionUpdateConfigurator){
512
                    ExcelDistributionUpdateConfigurator config = (ExcelDistributionUpdateConfigurator) configurator;
513
                    importResult =ioService.updateDistributionData(config);
514
                }
515

    
516
                monitor.done();
517
//                display.asyncExec(new Runnable() {
518
//
519
//                    @Override
520
//                    public void run() {
521
//                        CdmStore.getContextManager().notifyContextRefresh();
522
//                    }
523
//                });
524
                showResult(configurator.getClass().getSimpleName(), display, importResult, updateSuccessMessage);
525

    
526

    
527
                return Status.OK_STATUS;
528
            }
529

    
530

    
531
        };
532

    
533
        return job;
534

    
535
    }
536

    
537
    /**
538
     * @return
539
     */
540
    public ExcelDistributionUpdateConfigurator ExcelDistributionUpdateConfigurator() {
541
        return (ExcelDistributionUpdateConfigurator) getConfigurator(TYPE.Excel_Distribution);
542
    }
543

    
544

    
545

    
546

    
547

    
548

    
549

    
550
}
(3-3/3)