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