Merge branch 'develop' into remoting-4.0
[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
19 import org.apache.commons.io.IOUtils;
20 import org.eclipse.core.runtime.Assert;
21 import org.eclipse.core.runtime.IProgressMonitor;
22 import org.eclipse.core.runtime.IStatus;
23 import org.eclipse.core.runtime.Status;
24 import org.eclipse.core.runtime.jobs.Job;
25 import org.eclipse.swt.widgets.Display;
26
27 import eu.etaxonomy.cdm.api.application.CdmApplicationState;
28 import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
29 import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
30 import eu.etaxonomy.cdm.io.common.IImportConfigurator;
31 import eu.etaxonomy.cdm.io.common.IImportConfigurator.SOURCE_TYPE;
32 import eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator;
33 import eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator;
34 import eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator;
35 import eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator;
36 import eu.etaxonomy.cdm.io.service.IIOService;
37 import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator;
38 import eu.etaxonomy.cdm.io.specimen.excel.in.SpecimenCdmExcelImportConfigurator;
39 import eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator;
40 import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
41 import eu.etaxonomy.taxeditor.model.MessagingUtils;
42 import eu.etaxonomy.taxeditor.store.CdmStore;
43 import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
44
45 /**
46 * <p>
47 * ImportHandler class.
48 * </p>
49 *
50 * @author n.hoffmann
51 * @created Sep 11, 2009
52 * @version 1.0
53 */
54 public class ImportManager extends AbstractIOManager<IImportConfigurator> {
55
56 /**
57 * @param applicationConfiguration
58 */
59 private ImportManager(ICdmApplicationConfiguration applicationConfiguration) {
60 super(applicationConfiguration);
61 }
62
63 /**
64 * <p>
65 * NewInstance
66 * </p>
67 *
68 * @param applicationConfiguration
69 * a
70 * {@link eu.etaxonomy.cdm.api.application.CdmApplicationController}
71 * object.
72 * @return a {@link eu.etaxonomy.taxeditor.io.ImportManager} object.
73 */
74 public static ImportManager NewInstance(
75 ICdmApplicationConfiguration applicationConfiguration) {
76 return new ImportManager(applicationConfiguration);
77 }
78
79 /**
80 * Use when importing data into the current application context
81 *
82 * @param configurator
83 * a {@link eu.etaxonomy.cdm.io.common.IImportConfigurator}
84 * object.
85 * @return a {@link org.eclipse.core.runtime.jobs.Job} object.
86 */
87 @Override
88 protected Job createIOJob(final IImportConfigurator configurator) {
89 Assert.isNotNull(configurator, "Configuration may not be null");
90
91 final Display display = Display.getDefault();
92
93 Job job = new Job("Import: " + configurator.getClass().getSimpleName()) {
94
95 @Override
96 protected IStatus run(IProgressMonitor monitor) {
97 monitor.beginTask("Importing data", 100);
98 configurator.setProgressMonitor(CdmProgressMonitorAdapter
99 .CreateSubMonitor(monitor, 70));
100
101 monitor.worked(5);
102
103 CdmDefaultImport<IImportConfigurator> importer = new CdmDefaultImport<IImportConfigurator>();
104 importer.setCdmAppController(applicationConfiguration);
105 monitor.worked(5);
106
107 try {
108 importer.invoke(configurator);
109 monitor.worked(80);
110 } catch (RuntimeException e) {
111 MessagingUtils.messageDialog(
112 "Error importing data",
113 this,
114 "An error occured while"
115 + "importing from source '"
116 + configurator.getSourceNameString()
117 + "'.\n"
118 + "Please check error log for details.", e);
119 }
120
121 monitor.worked(5);
122 monitor.done();
123
124 display.asyncExec(new Runnable() {
125
126 @Override
127 public void run() {
128 CdmStore.getContextManager().notifyContextRefresh();
129 }
130 });
131
132 return Status.OK_STATUS;
133 }
134 };
135
136 return job;
137
138 }
139
140 public Job createIOServiceJob(IImportConfigurator configurator, InputStream is, SOURCE_TYPE type) {
141
142 try {
143 return createIOServiceJob(configurator, IOUtils.toByteArray(is), type);
144 } catch (Exception e) {
145 MessagingUtils.errorDialog("Error importing input stream",
146 this,
147 e.getMessage(),
148 TaxeditorStorePlugin.PLUGIN_ID,
149 e,
150 true);
151 }
152 return null;
153 }
154
155 public Job createIOServiceJob(IImportConfigurator configurator, File importFile, SOURCE_TYPE type) {
156 Path path = Paths.get(importFile.toURI());
157 try {
158 return createIOServiceJob(configurator, Files.readAllBytes(path), type);
159 } catch (Exception e) {
160 MessagingUtils.errorDialog("Error importing file",
161 this,
162 e.getMessage(),
163 TaxeditorStorePlugin.PLUGIN_ID,
164 e,
165 true);
166 }
167 return null;
168 }
169
170 public Job createIOServiceJob(final IImportConfigurator configurator, final byte[] data, final SOURCE_TYPE type) {
171 Assert.isNotNull(configurator, "Configuration may not be null");
172 final Display display = Display.getDefault();
173 Job job = new Job("Import: " + configurator.getClass().getSimpleName()) {
174
175 @Override
176 protected IStatus run(IProgressMonitor monitor) {
177 monitor.beginTask("Importing data", IProgressMonitor.UNKNOWN);
178 IIOService ioService = CdmApplicationState.getIOService();
179
180 ioService.importData(configurator, data, type);
181
182 monitor.done();
183
184 display.asyncExec(new Runnable() {
185
186 @Override
187 public void run() {
188 CdmStore.getContextManager().notifyContextRefresh();
189 }
190 });
191
192 return Status.OK_STATUS;
193 }
194 };
195
196 return job;
197
198 }
199
200 private IImportConfigurator getConfigurator(TYPE type) {
201 Assert.isNotNull(type, "Type should not be null");
202
203 switch (type) {
204 case Jaxb:
205 return JaxbImportConfigurator.NewInstance(null, null);
206 case Tcs:
207 return TcsXmlImportConfigurator.NewInstance(null, null);
208 case Endnote:
209 return EndnoteImportConfigurator.NewInstance(null, null);
210 case Excel_Taxa:
211 return NormalExplicitImportConfigurator.NewInstance(null, null,
212 null, null);
213 case Abcd:
214 return Abcd206ImportConfigurator.NewInstance(null, null);
215 case Sdd:
216 return SDDImportConfigurator.NewInstance(null, null);
217 case SpecimenCdmExcel:
218 return SpecimenCdmExcelImportConfigurator.NewInstance(null, null);
219 default:
220 MessagingUtils.notImplementedMessage(this);
221 throw new IllegalArgumentException("Import not supported yet");
222 }
223 }
224
225
226 /**
227 * <p>
228 * JaxbConfigurator
229 * </p>
230 *
231 * @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator} object.
232 */
233 public final JaxbImportConfigurator JaxbConfigurator() {
234 return (JaxbImportConfigurator) getConfigurator(TYPE.Jaxb);
235 }
236
237 /**
238 * <p>
239 * TcsConfigurator
240 * </p>
241 *
242 * @return a {@link eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator}
243 * object.
244 */
245 public final TcsXmlImportConfigurator TcsConfigurator() {
246 return (TcsXmlImportConfigurator) getConfigurator(TYPE.Tcs);
247 }
248
249 /**
250 * <p>
251 * EndnoteConfigurator
252 * </p>
253 *
254 * @return a
255 * {@link eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator}
256 * object.
257 */
258 public final EndnoteImportConfigurator EndnoteConfigurator() {
259 return (EndnoteImportConfigurator) getConfigurator(TYPE.Endnote);
260 }
261
262 /**
263 * <p>
264 * NormalExplicitConfigurator
265 * </p>
266 *
267 * @return a
268 * {@link eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator}
269 * object.
270 */
271 public final NormalExplicitImportConfigurator NormalExplicitConfigurator() {
272 return (NormalExplicitImportConfigurator) getConfigurator(TYPE.Excel_Taxa);
273 }
274
275 /**
276 * <p>
277 * SddConfigurator
278 * </p>
279 *
280 * @return a {@link eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator}
281 * object.
282 */
283 public final SDDImportConfigurator SddConfigurator() {
284 return (SDDImportConfigurator) getConfigurator(TYPE.Sdd);
285 }
286
287 /**
288 * <p>
289 * AbcdConfigurator
290 * </p>
291 *
292 * @return a
293 * {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator}
294 * object.
295 */
296 public final Abcd206ImportConfigurator AbcdConfigurator() {
297 return (Abcd206ImportConfigurator) getConfigurator(TYPE.Abcd);
298 }
299
300 public SpecimenCdmExcelImportConfigurator SpecimenCdmExcelImportConfigurator() {
301 return (SpecimenCdmExcelImportConfigurator) getConfigurator(TYPE.SpecimenCdmExcel);
302 }
303
304
305 }