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
                        null);
246
            }
247
        });
248

    
249
    }
250

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

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

    
276

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

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

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

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

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

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

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

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

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

    
368
    }
369

    
370

    
371
}
(3-3/3)