Project

General

Profile

Download (5.52 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.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.ICdmApplicationConfiguration;
22
import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
23
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
24
import eu.etaxonomy.cdm.io.common.CdmDefaultExport;
25
import eu.etaxonomy.cdm.io.common.IExportConfigurator;
26
import eu.etaxonomy.cdm.io.common.IIoConfigurator;
27
import eu.etaxonomy.cdm.io.jaxb.JaxbExportConfigurator;
28
import eu.etaxonomy.cdm.io.sdd.out.SDDExportConfigurator;
29
import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
30
import eu.etaxonomy.taxeditor.model.MessagingUtils;
31
import eu.etaxonomy.taxeditor.store.StoreUtil;
32

    
33
/**
34
 * <p>
35
 * ExportHandler class.
36
 * </p>
37
 * 
38
 * @author n.hoffmann
39
 * @created Sep 11, 2009
40
 * @version 1.0
41
 */
42
public class ExportManager extends AbstractIOManager<IExportConfigurator> {
43

    
44
	/**
45
	 * 
46
	 * @param applicationConfiguration
47
	 */
48
	private ExportManager(ICdmApplicationConfiguration applicationConfiguration) {
49
		super(applicationConfiguration);
50
	}
51

    
52
	/**
53
	 * <p>
54
	 * NewInstance
55
	 * </p>
56
	 * 
57
	 * @param applicationConfiguration
58
	 *            a
59
	 *            {@link eu.etaxonomy.cdm.api.application.CdmApplicationController}
60
	 *            object.
61
	 * @return a {@link eu.etaxonomy.taxeditor.io.ExportManager} object.
62
	 */
63
	public static ExportManager NewInstance(
64
			ICdmApplicationConfiguration applicationConfiguration) {
65
		return new ExportManager(applicationConfiguration);
66
	}
67

    
68
	/**
69
	 * <p>
70
	 * createIOJob
71
	 * </p>
72
	 * 
73
	 * @param configurator
74
	 *            a {@link eu.etaxonomy.cdm.io.common.IExportConfigurator}
75
	 *            object.
76
	 * @return a {@link org.eclipse.core.runtime.jobs.Job} object.
77
	 */
78
	@Override
79
	protected Job createIOJob(final IExportConfigurator configurator) {
80

    
81
		Assert.isNotNull(configurator, "Configuration may not be null");
82

    
83
		final Display display = Display.getCurrent();
84

    
85
		Job job = new Job("Export: " + configurator.getClass().getSimpleName()) {
86
			@Override
87
			protected IStatus run(IProgressMonitor monitor) {
88
				monitor.beginTask(
89
						"Exporting database. This will take some time.", 100);
90
				monitor.worked(10);
91

    
92
				display.asyncExec(new Runnable() {
93

    
94
					@Override
95
					public void run() {
96
						// terminate any open transactions
97
						IConversationEnabled activePart = (IConversationEnabled) StoreUtil
98
								.getActivePage().getActivePart();
99
						activePart.getConversationHolder().commit(false);
100
					}
101
				});
102

    
103
				monitor.worked(10);
104

    
105
				CdmDefaultExport<IExportConfigurator> exporter = new CdmDefaultExport<IExportConfigurator>();
106
				configurator.setProgressMonitor(CdmProgressMonitorAdapter
107
						.CreateSubMonitor(monitor, 80));
108
				exporter.setCdmAppController((ICdmApplicationConfiguration) applicationConfiguration);
109
				monitor.worked(10);
110

    
111
				try {
112
					exporter.invoke(configurator);
113
					monitor.worked(60);
114
				} catch (RuntimeException e) {
115
					MessagingUtils.messageDialog("Error exporting data", this,
116
							"An error occured while"
117
									+ "exporting to destination '"
118
									+ configurator.getDestinationNameString()
119
									+ "'.\n"
120
									+ "Please check error log for details.", e);
121
				}
122

    
123
				display.asyncExec(new Runnable() {
124

    
125
					@Override
126
					public void run() {
127
						IWorkbenchPart activePart = StoreUtil.getActivePage()
128
								.getActivePart();
129
						if (activePart instanceof IConversationEnabled) {
130
							// terminate any open transactions
131
							IConversationEnabled conversationEnabled = (IConversationEnabled) activePart;
132
							// restarting transaction and committing it to
133
							// trigger
134
							// change listener
135
							// TODO verify correct behaviour
136
							
137
							try{
138
								conversationEnabled.getConversationHolder()
139
									.startTransaction();
140
							
141
								conversationEnabled.getConversationHolder()
142
									.commit();
143
							}catch(RuntimeException e){
144
								MessagingUtils.messageDialog("Error starting conversation handling", this, "" +
145
										"Conversation Error: "+ e);
146
							}
147
						}
148
					}
149
				});
150
				monitor.worked(10);
151

    
152
				return Status.OK_STATUS;
153
			}
154
		};
155

    
156
		return job;
157
	}
158

    
159
	/**
160
	 * @param jaxb
161
	 * @return
162
	 */
163
	private IIoConfigurator getConfigurator(TYPE type) {
164
		Assert.isNotNull(type, "Type should not be null");
165

    
166
		switch (type) {
167
		case Jaxb:
168
			return JaxbExportConfigurator.NewInstance(null, null);
169
		case Sdd:
170
			return SDDExportConfigurator.NewInstance(null, null, null);
171
		default:
172
			MessagingUtils.notImplementedMessage(this);
173
			throw new IllegalArgumentException("Export not supported yet");
174
		}
175
	}
176

    
177
	/**
178
	 * <p>
179
	 * JaxbConfigurator
180
	 * </p>
181
	 * 
182
	 * @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbExportConfigurator} object.
183
	 */
184
	public final JaxbExportConfigurator JaxbConfigurator() {
185
		return (JaxbExportConfigurator) getConfigurator(TYPE.Jaxb);
186
	}
187

    
188
	/**
189
	 * <p>
190
	 * SddConfigurator
191
	 * </p>
192
	 * 
193
	 * @return a {@link eu.etaxonomy.cdm.io.sdd.out.SDDExportConfigurator}
194
	 *         object.
195
	 */
196
	public final SDDExportConfigurator SddConfigurator() {
197
		return (SDDExportConfigurator) getConfigurator(TYPE.Sdd);
198
	}
199

    
200
}
(2-2/3)