Project

General

Profile

Download (11.8 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.nio.file.Files;
16
import java.nio.file.Path;
17
import java.nio.file.Paths;
18
import java.util.List;
19
import java.util.UUID;
20

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

    
30
import eu.etaxonomy.cdm.api.application.CdmApplicationState;
31
import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
32
import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
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.ImportResult;
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.tcsxml.in.TcsXmlImportConfigurator;
45
import eu.etaxonomy.taxeditor.model.AbstractUtility;
46
import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
47
import eu.etaxonomy.taxeditor.model.MessagingUtils;
48
import eu.etaxonomy.taxeditor.operation.IPostMoniteredOperationEnabled;
49
import eu.etaxonomy.taxeditor.store.CdmStore;
50
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
51
import eu.etaxonomy.taxeditor.ui.dialog.ReportTextDialog;
52

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

    
64
	/**
65
	 * @param applicationConfiguration
66
	 */
67
	private ImportManager(ICdmApplicationConfiguration applicationConfiguration) {
68
		super(applicationConfiguration);
69
	}
70

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

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

    
99
		final Display display = Display.getDefault();
100

    
101
		Job job = new Job("Import: " + configurator.getClass().getSimpleName()) {
102

    
103
			@Override
104
			protected IStatus run(IProgressMonitor monitor) {
105
				monitor.beginTask("Importing data", 100);
106
				configurator.setProgressMonitor(CdmProgressMonitorAdapter
107
						.CreateSubMonitor(monitor, 70));
108

    
109
				monitor.worked(5);
110

    
111
				CdmDefaultImport<IImportConfigurator> importer = new CdmDefaultImport<IImportConfigurator>();
112
				importer.setCdmAppController(applicationConfiguration);
113
				monitor.worked(5);
114
				ImportResult importResult = null;
115
				try {
116
					importResult = importer.invoke(configurator);
117

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

    
130
				monitor.worked(5);
131
				monitor.done();
132

    
133

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

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

    
154
				return Status.OK_STATUS;
155
			}
156
		};
157

    
158
		return job;
159

    
160
	}
161

    
162
	public Job createIOServiceJob(IImportConfigurator configurator, InputStream is, SOURCE_TYPE type) {
163

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

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

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

    
197
            @Override
198
            protected IStatus run(IProgressMonitor monitor) {
199
                monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
200
                IIOService ioService = CdmApplicationState.getIOService();
201

    
202
                ioService.importData(configurator, data, type);
203

    
204
                monitor.done();
205

    
206
                display.asyncExec(new Runnable() {
207

    
208
                    @Override
209
                    public void run() {
210
                        CdmStore.getContextManager().notifyContextRefresh();
211
                    }
212
                });
213

    
214
                return Status.OK_STATUS;
215
            }
216
        };
217

    
218
        return job;
219

    
220
    }
221

    
222
    public void runMoniteredOperation(IImportConfigurator configurator, InputStream is, SOURCE_TYPE type) {
223

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

    
235
    }
236

    
237
    public void runMoniteredOperation(IImportConfigurator configurator, File importFile, SOURCE_TYPE type) {
238
        Path path = Paths.get(importFile.toURI());
239
        try {
240
            runMoniteredOperation(configurator, Files.readAllBytes(path), type);
241
        } catch (Exception e) {
242
            MessagingUtils.errorDialog("Error importing input stream",
243
                    this,
244
                    e.getMessage(),
245
                    TaxeditorStorePlugin.PLUGIN_ID,
246
                    e,
247
                    true);
248
        }
249

    
250
    }
251

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

    
267
    }
268

    
269
	private IImportConfigurator getConfigurator(TYPE type) {
270
		Assert.isNotNull(type, "Type should not be null");
271

    
272
		switch (type) {
273
		case Jaxb:
274
			return JaxbImportConfigurator.NewInstance(null, null);
275
		case Tcs:
276
			return TcsXmlImportConfigurator.NewInstance(null, null);
277
		case Endnote:
278
			return EndnoteImportConfigurator.NewInstance(null, null);
279
		case Excel_Taxa:
280
			return NormalExplicitImportConfigurator.NewInstance(null, null,
281
					null, null);
282
		case Abcd:
283
			return Abcd206ImportConfigurator.NewInstance(null, null);
284
		case Sdd:
285
			return SDDImportConfigurator.NewInstance(null, null);
286
		case SpecimenCdmExcel:
287
			return SpecimenCdmExcelImportConfigurator.NewInstance(null, null);
288
		default:
289
			MessagingUtils.notImplementedMessage(this);
290
			throw new IllegalArgumentException("Import not supported yet");
291
		}
292
	}
293

    
294

    
295
	/**
296
	 * <p>
297
	 * JaxbConfigurator
298
	 * </p>
299
	 *
300
	 * @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator} object.
301
	 */
302
	public final JaxbImportConfigurator JaxbConfigurator() {
303
		return (JaxbImportConfigurator) getConfigurator(TYPE.Jaxb);
304
	}
305

    
306
	/**
307
	 * <p>
308
	 * TcsConfigurator
309
	 * </p>
310
	 *
311
	 * @return a {@link eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator}
312
	 *         object.
313
	 */
314
	public final TcsXmlImportConfigurator TcsConfigurator() {
315
		return (TcsXmlImportConfigurator) getConfigurator(TYPE.Tcs);
316
	}
317

    
318
	/**
319
	 * <p>
320
	 * EndnoteConfigurator
321
	 * </p>
322
	 *
323
	 * @return a
324
	 *         {@link eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator}
325
	 *         object.
326
	 */
327
	public final EndnoteImportConfigurator EndnoteConfigurator() {
328
		return (EndnoteImportConfigurator) getConfigurator(TYPE.Endnote);
329
	}
330

    
331
	/**
332
	 * <p>
333
	 * NormalExplicitConfigurator
334
	 * </p>
335
	 *
336
	 * @return a
337
	 *         {@link eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator}
338
	 *         object.
339
	 */
340
	public final NormalExplicitImportConfigurator NormalExplicitConfigurator() {
341
		return (NormalExplicitImportConfigurator) getConfigurator(TYPE.Excel_Taxa);
342
	}
343

    
344
	/**
345
	 * <p>
346
	 * SddConfigurator
347
	 * </p>
348
	 *
349
	 * @return a {@link eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator}
350
	 *         object.
351
	 */
352
	public final SDDImportConfigurator SddConfigurator() {
353
		return (SDDImportConfigurator) getConfigurator(TYPE.Sdd);
354
	}
355

    
356
	/**
357
	 * <p>
358
	 * AbcdConfigurator
359
	 * </p>
360
	 *
361
	 * @return a
362
	 *         {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator}
363
	 *         object.
364
	 */
365
	public final Abcd206ImportConfigurator AbcdConfigurator() {
366
		return (Abcd206ImportConfigurator) getConfigurator(TYPE.Abcd);
367
	}
368

    
369
	public SpecimenCdmExcelImportConfigurator SpecimenCdmExcelImportConfigurator() {
370
		return (SpecimenCdmExcelImportConfigurator) getConfigurator(TYPE.SpecimenCdmExcel);
371
	}
372

    
373
    /**
374
     * {@inheritDoc}
375
     */
376
    @Override
377
    public void postOperation(IRemotingProgressMonitor monitor) {
378
        Display.getDefault().asyncExec(new Runnable() {
379

    
380
            @Override
381
            public void run() {
382
                CdmStore.getContextManager().notifyContextRefresh();
383
            }
384
        });
385

    
386
    }
387

    
388

    
389
}
(3-3/3)