Project

General

Profile

Download (17.1 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.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.excel.in.SpecimenCdmExcelImportConfigurator;
47
import eu.etaxonomy.cdm.io.specimen.gbif.in.GbifImportConfigurator;
48
import eu.etaxonomy.cdm.io.specimen.gbif.in.GbifImportState;
49
import eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator;
50
import eu.etaxonomy.taxeditor.model.AbstractUtility;
51
import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
52
import eu.etaxonomy.taxeditor.model.MessagingUtils;
53
import eu.etaxonomy.taxeditor.operation.IPostMoniteredOperationEnabled;
54
import eu.etaxonomy.taxeditor.store.CdmStore;
55
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
56
import eu.etaxonomy.taxeditor.ui.dialog.ReportTextDialog;
57

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

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

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

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

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

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

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

    
114
				monitor.worked(5);
115

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

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

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

    
138

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

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

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

    
163
		return job;
164

    
165
	}
166

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

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

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

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

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

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

    
209
                monitor.done();
210

    
211
                display.asyncExec(new Runnable() {
212

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

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

    
223
        return job;
224

    
225
    }
226

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

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

    
240
    }
241

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

    
255
    }
256

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

    
270
    }
271

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

    
287
    }
288

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

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

    
318

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

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

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

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

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

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

    
393
	public SpecimenCdmExcelImportConfigurator SpecimenCdmExcelImportConfigurator() {
394
		return (SpecimenCdmExcelImportConfigurator) getConfigurator(TYPE.SpecimenCdmExcel);
395
	}
396

    
397
	public DwcaImportConfigurator DwcaImportConfigurator() {
398
		return (DwcaImportConfigurator) getConfigurator(TYPE.Gbif);
399
	}
400

    
401

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

    
409
            @Override
410
            public void run() {
411
                CdmStore.getContextManager().notifyContextRefresh();
412
            }
413
        });
414

    
415
    }
416

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

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

    
427
	                ImportResult result = ioService.importDataFromStream(configurator);
428
	                monitor.done();
429

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

    
438
	                return Status.OK_STATUS;
439
	            }
440
	        };
441

    
442
	        return job;
443

    
444
	}
445

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

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

    
456
	                ImportResult result = ioService.importDataFromStream(configurator);
457
	                monitor.done();
458

    
459
	                display.asyncExec(new Runnable() {
460

    
461
	                    @Override
462
	                    public void run() {
463
	                        CdmStore.getContextManager().notifyContextRefresh();
464
	                    }
465
	                });
466

    
467
	                return Status.OK_STATUS;
468
	            }
469
	        };
470

    
471
	        return job;
472

    
473
	}
474

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

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

    
486
	                ImportResult result = ioService.importDataFromStream(abcdConfigurators);
487
	                monitor.done();
488

    
489
	                display.asyncExec(new Runnable() {
490

    
491
	                    @Override
492
	                    public void run() {
493
	                        CdmStore.getContextManager().notifyContextRefresh();
494
	                    }
495
	                });
496

    
497
	                return Status.OK_STATUS;
498
	            }
499
	        };
500

    
501
	        return job;
502
	}
503

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

    
509
            @Override
510
            protected IStatus run(IProgressMonitor monitor) {
511
                monitor.beginTask("Updating data", IProgressMonitor.UNKNOWN);
512
                IIOService ioService = CdmApplicationState.getIOService();
513
                if (configurator instanceof SortIndexUpdaterConfigurator){
514
                    SortIndexUpdaterConfigurator config = (SortIndexUpdaterConfigurator)configurator;
515
                    ioService.updateSortIndex(config);
516
                } else if (configurator instanceof CacheUpdaterConfigurator){
517
                    CacheUpdaterConfigurator config = (CacheUpdaterConfigurator) configurator;
518
                    ioService.updateCaches(config);
519
                }
520

    
521
                monitor.done();
522

    
523
                display.asyncExec(new Runnable() {
524

    
525
                    @Override
526
                    public void run() {
527
                        CdmStore.getContextManager().notifyContextRefresh();
528
                    }
529
                });
530

    
531
                return Status.OK_STATUS;
532
            }
533
        };
534

    
535
        return job;
536

    
537
    }
538

    
539

    
540

    
541

    
542

    
543
}
(3-3/3)