Project

General

Profile

Download (10.9 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.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

    
28
import eu.etaxonomy.cdm.api.application.CdmApplicationState;
29
import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
30
import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
31
import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
32
import eu.etaxonomy.cdm.io.common.IImportConfigurator;
33
import eu.etaxonomy.cdm.io.common.IImportConfigurator.SOURCE_TYPE;
34
import eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator;
35
import eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator;
36
import eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator;
37
import eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator;
38
import eu.etaxonomy.cdm.io.service.IIOService;
39
import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator;
40
import eu.etaxonomy.cdm.io.specimen.excel.in.SpecimenCdmExcelImportConfigurator;
41
import eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator;
42
import eu.etaxonomy.taxeditor.model.AbstractUtility;
43
import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
44
import eu.etaxonomy.taxeditor.model.MessagingUtils;
45
import eu.etaxonomy.taxeditor.operation.IPostMoniteredOperationEnabled;
46
import eu.etaxonomy.taxeditor.store.CdmStore;
47
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
48

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

    
60
	/**
61
	 * @param applicationConfiguration
62
	 */
63
	private ImportManager(ICdmApplicationConfiguration applicationConfiguration) {
64
		super(applicationConfiguration);
65
	}
66

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

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

    
95
		final Display display = Display.getDefault();
96

    
97
		Job job = new Job("Import: " + configurator.getClass().getSimpleName()) {
98

    
99
			@Override
100
			protected IStatus run(IProgressMonitor monitor) {
101
				monitor.beginTask("Importing data", 100);
102
				configurator.setProgressMonitor(CdmProgressMonitorAdapter
103
						.CreateSubMonitor(monitor, 70));
104

    
105
				monitor.worked(5);
106

    
107
				CdmDefaultImport<IImportConfigurator> importer = new CdmDefaultImport<IImportConfigurator>();
108
				importer.setCdmAppController(applicationConfiguration);
109
				monitor.worked(5);
110

    
111
				try {
112
					importer.invoke(configurator);
113
					monitor.worked(80);
114
				} catch (RuntimeException e) {
115
					MessagingUtils.messageDialog(
116
							"Error importing data",
117
							this,
118
							"An error occured while"
119
									+ "importing from source '"
120
									+ configurator.getSourceNameString()
121
									+ "'.\n"
122
									+ "Please check error log for details.", e);
123
				}
124

    
125
				monitor.worked(5);
126
				monitor.done();
127

    
128
				display.asyncExec(new Runnable() {
129

    
130
					@Override
131
					public void run() {
132
						CdmStore.getContextManager().notifyContextRefresh();
133
					}
134
				});
135

    
136
				return Status.OK_STATUS;
137
			}
138
		};
139

    
140
		return job;
141

    
142
	}
143

    
144
	public Job createIOServiceJob(IImportConfigurator configurator, InputStream is, SOURCE_TYPE type) {
145

    
146
	    try {
147
	        return createIOServiceJob(configurator, IOUtils.toByteArray(is), type);
148
	    } catch (Exception e) {
149
	        MessagingUtils.errorDialog("Error importing input stream",
150
	                this,
151
	                e.getMessage(),
152
	                TaxeditorStorePlugin.PLUGIN_ID,
153
	                e,
154
	                true);
155
	    }
156
	    return null;
157
	}
158

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

    
174
    public Job createIOServiceJob(final IImportConfigurator configurator, final byte[] data, final SOURCE_TYPE type) {
175
        Assert.isNotNull(configurator, "Configuration may not be null");
176
        final Display display = Display.getDefault();
177
        Job job = new Job("Import: " + configurator.getClass().getSimpleName()) {
178

    
179
            @Override
180
            protected IStatus run(IProgressMonitor monitor) {
181
                monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
182
                IIOService ioService = CdmApplicationState.getIOService();
183

    
184
                ioService.importData(configurator, data, type);
185

    
186
                monitor.done();
187

    
188
                display.asyncExec(new Runnable() {
189

    
190
                    @Override
191
                    public void run() {
192
                        CdmStore.getContextManager().notifyContextRefresh();
193
                    }
194
                });
195

    
196
                return Status.OK_STATUS;
197
            }
198
        };
199

    
200
        return job;
201

    
202
    }
203

    
204
    public void runMoniteredOperation(IImportConfigurator configurator, InputStream is, SOURCE_TYPE type) {
205

    
206
        try {
207
            runMoniteredOperation(configurator, IOUtils.toByteArray(is), type);
208
        } catch (Exception e) {
209
            MessagingUtils.errorDialog("Error importing input stream",
210
                    this,
211
                    e.getMessage(),
212
                    TaxeditorStorePlugin.PLUGIN_ID,
213
                    e,
214
                    true);
215
        }
216

    
217
    }
218

    
219
    public void runMoniteredOperation(IImportConfigurator configurator, File importFile, SOURCE_TYPE type) {
220
        Path path = Paths.get(importFile.toURI());
221
        try {
222
            runMoniteredOperation(configurator, Files.readAllBytes(path), type);
223
        } catch (Exception e) {
224
            MessagingUtils.errorDialog("Error importing input stream",
225
                    this,
226
                    e.getMessage(),
227
                    TaxeditorStorePlugin.PLUGIN_ID,
228
                    e,
229
                    true);
230
        }
231

    
232
    }
233

    
234
    public void runMoniteredOperation(final IImportConfigurator configurator, final byte[] data, final SOURCE_TYPE type) {
235
        IIOService ioService = CdmApplicationState.getIOService();
236
        final UUID uuid = ioService.monitImportData(configurator, data, type);
237
        Display.getDefault().asyncExec(new Runnable() {
238
            @Override
239
            public void run() {
240
                AbstractUtility.executeMoniteredOperation("Import: " + configurator.getClass().getSimpleName(),
241
                        uuid,
242
                        1000,
243
                        false,
244
                        ImportManager.this);
245
            }
246
        });
247

    
248
    }
249

    
250
	private IImportConfigurator getConfigurator(TYPE type) {
251
		Assert.isNotNull(type, "Type should not be null");
252

    
253
		switch (type) {
254
		case Jaxb:
255
			return JaxbImportConfigurator.NewInstance(null, null);
256
		case Tcs:
257
			return TcsXmlImportConfigurator.NewInstance(null, null);
258
		case Endnote:
259
			return EndnoteImportConfigurator.NewInstance(null, null);
260
		case Excel_Taxa:
261
			return NormalExplicitImportConfigurator.NewInstance(null, null,
262
					null, null);
263
		case Abcd:
264
			return Abcd206ImportConfigurator.NewInstance(null, null);
265
		case Sdd:
266
			return SDDImportConfigurator.NewInstance(null, null);
267
		case SpecimenCdmExcel:
268
			return SpecimenCdmExcelImportConfigurator.NewInstance(null, null);
269
		default:
270
			MessagingUtils.notImplementedMessage(this);
271
			throw new IllegalArgumentException("Import not supported yet");
272
		}
273
	}
274

    
275

    
276
	/**
277
	 * <p>
278
	 * JaxbConfigurator
279
	 * </p>
280
	 *
281
	 * @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator} object.
282
	 */
283
	public final JaxbImportConfigurator JaxbConfigurator() {
284
		return (JaxbImportConfigurator) getConfigurator(TYPE.Jaxb);
285
	}
286

    
287
	/**
288
	 * <p>
289
	 * TcsConfigurator
290
	 * </p>
291
	 *
292
	 * @return a {@link eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator}
293
	 *         object.
294
	 */
295
	public final TcsXmlImportConfigurator TcsConfigurator() {
296
		return (TcsXmlImportConfigurator) getConfigurator(TYPE.Tcs);
297
	}
298

    
299
	/**
300
	 * <p>
301
	 * EndnoteConfigurator
302
	 * </p>
303
	 *
304
	 * @return a
305
	 *         {@link eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator}
306
	 *         object.
307
	 */
308
	public final EndnoteImportConfigurator EndnoteConfigurator() {
309
		return (EndnoteImportConfigurator) getConfigurator(TYPE.Endnote);
310
	}
311

    
312
	/**
313
	 * <p>
314
	 * NormalExplicitConfigurator
315
	 * </p>
316
	 *
317
	 * @return a
318
	 *         {@link eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator}
319
	 *         object.
320
	 */
321
	public final NormalExplicitImportConfigurator NormalExplicitConfigurator() {
322
		return (NormalExplicitImportConfigurator) getConfigurator(TYPE.Excel_Taxa);
323
	}
324

    
325
	/**
326
	 * <p>
327
	 * SddConfigurator
328
	 * </p>
329
	 *
330
	 * @return a {@link eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator}
331
	 *         object.
332
	 */
333
	public final SDDImportConfigurator SddConfigurator() {
334
		return (SDDImportConfigurator) getConfigurator(TYPE.Sdd);
335
	}
336

    
337
	/**
338
	 * <p>
339
	 * AbcdConfigurator
340
	 * </p>
341
	 *
342
	 * @return a
343
	 *         {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator}
344
	 *         object.
345
	 */
346
	public final Abcd206ImportConfigurator AbcdConfigurator() {
347
		return (Abcd206ImportConfigurator) getConfigurator(TYPE.Abcd);
348
	}
349

    
350
	public SpecimenCdmExcelImportConfigurator SpecimenCdmExcelImportConfigurator() {
351
		return (SpecimenCdmExcelImportConfigurator) getConfigurator(TYPE.SpecimenCdmExcel);
352
	}
353

    
354
    /**
355
     * {@inheritDoc}
356
     */
357
    @Override
358
    public void postOperation(IRemotingProgressMonitor monitor) {
359
        Display.getDefault().asyncExec(new Runnable() {
360

    
361
            @Override
362
            public void run() {
363
                CdmStore.getContextManager().notifyContextRefresh();
364
            }
365
        });
366

    
367
    }
368

    
369

    
370
}
(3-3/3)