fixes #2195
[taxeditor.git] / 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 org.eclipse.core.runtime.Assert;
14 import org.eclipse.core.runtime.IProgressMonitor;
15 import org.eclipse.core.runtime.IStatus;
16 import org.eclipse.core.runtime.Status;
17 import org.eclipse.core.runtime.jobs.Job;
18 import org.eclipse.swt.widgets.Display;
19 import org.eclipse.ui.IWorkbenchPart;
20
21 import eu.etaxonomy.cdm.api.application.CdmApplicationController;
22 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
23 import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
24 import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
25 import eu.etaxonomy.cdm.io.common.IImportConfigurator;
26 import eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator;
27 import eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator;
28 import eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator;
29 import eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator;
30 import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator;
31 import eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator;
32 import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
33 import eu.etaxonomy.taxeditor.store.CdmStore;
34 import eu.etaxonomy.taxeditor.store.StoreUtil;
35
36 /**
37 * <p>ImportHandler class.</p>
38 *
39 * @author n.hoffmann
40 * @created Sep 11, 2009
41 * @version 1.0
42 */
43 public class ImportManager extends AbstractIOManager<IImportConfigurator> {
44
45 /**
46 * @param applicationController
47 */
48 private ImportManager(
49 CdmApplicationController applicationController) {
50 super(applicationController);
51 }
52
53 /**
54 * <p>NewInstance</p>
55 *
56 * @param applicationController a {@link eu.etaxonomy.cdm.api.application.CdmApplicationController} object.
57 * @return a {@link eu.etaxonomy.taxeditor.io.ImportManager} object.
58 */
59 public static ImportManager NewInstance(CdmApplicationController applicationController){
60 return new ImportManager(applicationController);
61 }
62
63 /**
64 * Use when importing data into the current application context
65 *
66 * @param configurator a {@link eu.etaxonomy.cdm.io.common.IImportConfigurator} object.
67 * @return a {@link org.eclipse.core.runtime.jobs.Job} object.
68 */
69 protected Job createIOJob(final IImportConfigurator configurator){
70 Assert.isNotNull(configurator, "Configuration may not be null");
71
72 final Display display = Display.getDefault();
73
74 Job job = new Job("Import: " + configurator.getClass().getSimpleName()){
75
76 @Override
77 protected IStatus run(IProgressMonitor monitor) {
78 monitor.beginTask("Importing data", 100);
79 configurator.setProgressMonitor(CdmProgressMonitorAdapter.CreateSubMonitor(monitor, 70));
80
81 monitor.worked(10);
82
83 // display.asyncExec(new Runnable() {
84 //
85 // @Override
86 // public void run() {
87 // // terminate any open transactions
88 // IWorkbenchPart activePart = StoreUtil.getActivePage().getActivePart();
89 //
90 // if(activePart instanceof IConversationEnabled){
91 // IConversationEnabled conversationEnabled = (IConversationEnabled) activePart;
92 // conversationEnabled.getConversationHolder().commit(false);
93 // }
94 // }
95 // });
96 monitor.worked(10);
97
98 CdmDefaultImport<IImportConfigurator> importer = new CdmDefaultImport<IImportConfigurator>();
99 importer.setCdmAppController(applicationController);
100 monitor.worked(10);
101
102 try{
103 importer.invoke(configurator);
104 monitor.worked(60);
105 }catch(RuntimeException e){
106 StoreUtil.errorDialog("Error importing data", this, "An error occured while" +
107 "importing from source '" + configurator.getSourceNameString() + "'.\n" +
108 "Please check error log for details.", e);
109 }
110
111 monitor.worked(10);
112 monitor.done();
113
114 display.asyncExec(new Runnable() {
115
116 @Override
117 public void run() {
118 // // restarting transaction and committing it to trigger change listener
119 // // TODO verify correct behaviour
120 // IWorkbenchPart activePart = StoreUtil.getActivePage().getActivePart();
121 //
122 // if(activePart instanceof IConversationEnabled){
123 // IConversationEnabled conversationEnabled = (IConversationEnabled) activePart;
124 //
125 // conversationEnabled.getConversationHolder().startTransaction();
126 // conversationEnabled.getConversationHolder().commit();
127 // }
128
129 CdmStore.getContextManager().notifyContextRefresh();
130 }
131 });
132
133 return Status.OK_STATUS;
134 }
135 };
136
137 return job;
138
139 }
140
141 private IImportConfigurator getConfigurator(TYPE type){
142 Assert.isNotNull(type, "Type should not be null");
143
144 switch(type){
145 case BerlinModel:
146 return BerlinModelImportConfigurator.NewInstance(null, null);
147 case Jaxb:
148 return JaxbImportConfigurator.NewInstance(null, null);
149 case Tcs:
150 return TcsXmlImportConfigurator.NewInstance(null, null);
151 case Endnote:
152 return EndnoteImportConfigurator.NewInstance(null, null);
153 case Excel_Taxa:
154 return NormalExplicitImportConfigurator.NewInstance(null, null, null);
155 case Abcd:
156 return Abcd206ImportConfigurator.NewInstance(null, null);
157 case Sdd:
158 return SDDImportConfigurator.NewInstance(null, null);
159 default:
160 StoreUtil.notImplementedMessage(this);
161 throw new IllegalArgumentException("Import not supported yet");
162 }
163 }
164
165 /**
166 * <p>BerlinModelConfigurator</p>
167 *
168 * @return a {@link eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator} object.
169 */
170 public final BerlinModelImportConfigurator BerlinModelConfigurator() { return (BerlinModelImportConfigurator) getConfigurator(TYPE.BerlinModel); }
171 /**
172 * <p>JaxbConfigurator</p>
173 *
174 * @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator} object.
175 */
176 public final JaxbImportConfigurator JaxbConfigurator() { return (JaxbImportConfigurator) getConfigurator(TYPE.Jaxb); }
177 /**
178 * <p>TcsConfigurator</p>
179 *
180 * @return a {@link eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator} object.
181 */
182 public final TcsXmlImportConfigurator TcsConfigurator() { return (TcsXmlImportConfigurator) getConfigurator(TYPE.Tcs); }
183 /**
184 * <p>EndnoteConfigurator</p>
185 *
186 * @return a {@link eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator} object.
187 */
188 public final EndnoteImportConfigurator EndnoteConfigurator() { return (EndnoteImportConfigurator) getConfigurator(TYPE.Endnote); }
189 /**
190 * <p>NormalExplicitConfigurator</p>
191 *
192 * @return a {@link eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator} object.
193 */
194 public final NormalExplicitImportConfigurator NormalExplicitConfigurator() { return (NormalExplicitImportConfigurator) getConfigurator(TYPE.Excel_Taxa); }
195 /**
196 * <p>SddConfigurator</p>
197 *
198 * @return a {@link eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator} object.
199 */
200 public final SDDImportConfigurator SddConfigurator() { return (SDDImportConfigurator) getConfigurator(TYPE.Sdd); }
201 /**
202 * <p>AbcdConfigurator</p>
203 *
204 * @return a {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator} object.
205 */
206 public final Abcd206ImportConfigurator AbcdConfigurator() { return (Abcd206ImportConfigurator) getConfigurator(TYPE.Abcd); }
207
208
209 }