Project

General

Profile

Download (13.7 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
 * Copyright (C) 2007 EDIT
4
 * European Distributed Institute of Taxonomy
5
 * http://www.e-taxonomy.eu
6
 *
7
 * The contents of this file are subject to the Mozilla Public License Version 1.1
8
 * See LICENSE.TXT at the top of this package for the full license terms.
9
 */
10

    
11
package eu.etaxonomy.taxeditor.io;
12

    
13
import java.io.File;
14
import java.io.InputStream;
15
import java.net.URI;
16
import java.nio.file.Files;
17
import java.nio.file.Path;
18
import java.nio.file.Paths;
19
import java.util.List;
20
import java.util.Set;
21
import java.util.UUID;
22

    
23
import org.apache.commons.io.IOUtils;
24
import org.eclipse.core.runtime.Assert;
25
import org.eclipse.core.runtime.IProgressMonitor;
26
import org.eclipse.core.runtime.IStatus;
27
import org.eclipse.core.runtime.Status;
28
import org.eclipse.core.runtime.jobs.Job;
29
import org.eclipse.swt.widgets.Display;
30
import org.eclipse.ui.PlatformUI;
31

    
32
import eu.etaxonomy.cdm.api.application.CdmApplicationState;
33
import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
34
import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
35
import eu.etaxonomy.cdm.ext.occurrence.OccurenceQuery;
36
import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
37
import eu.etaxonomy.cdm.io.common.IImportConfigurator;
38
import eu.etaxonomy.cdm.io.common.IImportConfigurator.SOURCE_TYPE;
39
import eu.etaxonomy.cdm.io.common.ImportResult;
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.tcsxml.in.TcsXmlImportConfigurator;
49
import eu.etaxonomy.taxeditor.model.AbstractUtility;
50
import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
51
import eu.etaxonomy.taxeditor.model.MessagingUtils;
52
import eu.etaxonomy.taxeditor.operation.IPostMoniteredOperationEnabled;
53
import eu.etaxonomy.taxeditor.store.CdmStore;
54
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
55
import eu.etaxonomy.taxeditor.ui.dialog.ReportTextDialog;
56

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

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

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

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

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

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

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

    
113
				monitor.worked(5);
114

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

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

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

    
137

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

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

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

    
162
		return job;
163

    
164
	}
165

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

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

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

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

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

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

    
208
                monitor.done();
209

    
210
                display.asyncExec(new Runnable() {
211

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

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

    
222
        return job;
223

    
224
    }
225

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

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

    
239
    }
240

    
241
    public void runMoniteredOperation(IImportConfigurator configurator, SOURCE_TYPE type) {
242
        byte[] data = new byte[1];
243
        try {
244
            runMoniteredOperation(configurator, data, type);
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(IImportConfigurator configurator, File importFile, SOURCE_TYPE type) {
257
        Path path = Paths.get(importFile.toURI());
258
        try {
259
            runMoniteredOperation(configurator, Files.readAllBytes(path), type);
260
        } catch (Exception e) {
261
            MessagingUtils.errorDialog("Error importing input stream",
262
                    this,
263
                    e.getMessage(),
264
                    TaxeditorStorePlugin.PLUGIN_ID,
265
                    e,
266
                    true);
267
        }
268

    
269
    }
270

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

    
286
    }
287

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

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

    
317

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

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

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

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

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

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

    
392
	public SpecimenCdmExcelImportConfigurator SpecimenCdmExcelImportConfigurator() {
393
		return (SpecimenCdmExcelImportConfigurator) getConfigurator(TYPE.SpecimenCdmExcel);
394
	}
395
	
396
	public DwcaImportConfigurator DwcaImportConfigurator() {
397
		return (DwcaImportConfigurator) getConfigurator(TYPE.Gbif);
398
	}
399

    
400

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

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

    
414
    }
415

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

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

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

    
429
	                display.asyncExec(new Runnable() {
430

    
431
	                    @Override
432
	                    public void run() {
433
	                        CdmStore.getContextManager().notifyContextRefresh();
434
	                    }
435
	                });
436

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

    
441
	        return job;
442

    
443
	}
444

    
445

    
446
}
(3-3/3)