abdad0532f4d722ea341fd18461b976eb3a0e612
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / io / ImportManager.java
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 }