Project

General

Profile

Download (7.14 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 org.apache.log4j.Logger;
14
import org.eclipse.core.runtime.Assert;
15
import org.eclipse.core.runtime.IProgressMonitor;
16
import org.eclipse.core.runtime.IStatus;
17
import org.eclipse.core.runtime.Status;
18
import org.eclipse.core.runtime.jobs.Job;
19
import org.eclipse.swt.widgets.Display;
20
import org.eclipse.ui.IWorkbenchPart;
21

    
22
import eu.etaxonomy.cdm.api.application.CdmApplicationController;
23
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
24
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
25
import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
26
import eu.etaxonomy.cdm.io.common.IImportConfigurator;
27
import eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator;
28
import eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator;
29
import eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator;
30
import eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator;
31
import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator;
32
import eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator;
33
import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
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 ImportHandler extends AbstractIOHandler<IImportConfigurator> {
44

    
45
	private static final Logger logger = Logger
46
			.getLogger(ImportHandler.class);
47
	
48
	/**
49
	 * @param applicationController
50
	 */
51
	private ImportHandler(
52
			CdmApplicationController applicationController) {
53
		super(applicationController);
54
	}
55
	
56
	/**
57
	 * <p>NewInstance</p>
58
	 *
59
	 * @param applicationController a {@link eu.etaxonomy.cdm.api.application.CdmApplicationController} object.
60
	 * @return a {@link eu.etaxonomy.taxeditor.io.ImportHandler} object.
61
	 */
62
	public static ImportHandler NewInstance(CdmApplicationController applicationController){
63
		return new ImportHandler(applicationController);
64
	}
65
	
66
	/**
67
	 * Use when importing data into the current application context
68
	 *
69
	 * @param configurator a {@link eu.etaxonomy.cdm.io.common.IImportConfigurator} object.
70
	 * @return a {@link org.eclipse.core.runtime.jobs.Job} object.
71
	 */
72
	protected Job createIOJob(final IImportConfigurator configurator){
73
		Assert.isNotNull(configurator, "Configuration may not be null");
74
		
75
		final Display display = Display.getDefault();
76
		
77
		Job job = new Job("Import: " + configurator.getClass().getSimpleName()){
78
		
79
			@Override
80
			protected IStatus run(IProgressMonitor monitor) {
81
				monitor.beginTask("Importing data", 100);
82
				configurator.setProgressMonitor(CdmProgressMonitorAdapter.CreateMonitor(monitor));
83
				
84
				monitor.worked(10);
85
				
86
				display.asyncExec(new Runnable() {
87
					
88
					@Override
89
					public void run() {
90
						// terminate any open transactions
91
						IWorkbenchPart activePart = StoreUtil.getActivePage().getActivePart();
92
						
93
						if(activePart instanceof IConversationEnabled){
94
							IConversationEnabled conversationEnabled = (IConversationEnabled) activePart;
95
							conversationEnabled.getConversationHolder().commit(false);
96
						}
97
					}
98
				});
99
				monitor.worked(10);
100
				
101
				CdmDefaultImport<IImportConfigurator> importer = new CdmDefaultImport<IImportConfigurator>();
102
				importer.setCdmAppController(applicationController);
103
				monitor.worked(10);		
104
				
105
				try{
106
					importer.invoke(configurator);
107
					monitor.worked(60);
108
				}catch(RuntimeException e){
109
					StoreUtil.errorDialog("Error importing data", this, "An error occured while" +
110
							"importing from source '" + configurator.getSourceNameString() + "'.\n" +
111
									"Please check error log for details.", e);
112
				}
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
					}
130
				});
131
				monitor.worked(10);
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
}
(3-3/3)