Project

General

Profile

Download (7.26 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 java.io.File;
14
import java.io.FileOutputStream;
15
import java.util.List;
16

    
17
import org.eclipse.core.runtime.Assert;
18
import org.eclipse.core.runtime.IProgressMonitor;
19
import org.eclipse.core.runtime.IStatus;
20
import org.eclipse.core.runtime.Status;
21
import org.eclipse.core.runtime.jobs.Job;
22
import org.eclipse.swt.widgets.Display;
23
import org.eclipse.ui.IWorkbenchPart;
24

    
25
import eu.etaxonomy.cdm.api.application.CdmApplicationState;
26
import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
27
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
28
import eu.etaxonomy.cdm.io.common.CdmDefaultExport;
29
import eu.etaxonomy.cdm.io.common.ExportResult;
30
import eu.etaxonomy.cdm.io.common.IExportConfigurator;
31
import eu.etaxonomy.cdm.io.common.IIoConfigurator;
32
import eu.etaxonomy.cdm.io.jaxb.JaxbExportConfigurator;
33
import eu.etaxonomy.cdm.io.sdd.out.SDDExportConfigurator;
34
import eu.etaxonomy.cdm.io.service.IIOService;
35
import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
36
import eu.etaxonomy.taxeditor.model.MessagingUtils;
37
import eu.etaxonomy.taxeditor.store.StoreUtil;
38
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
39

    
40
/**
41
 * <p>
42
 * ExportHandler class.
43
 * </p>
44
 *
45
 * @author n.hoffmann
46
 * @created Sep 11, 2009
47
 * @version 1.0
48
 */
49
public class ExportManager extends AbstractIOManager<IExportConfigurator> {
50

    
51
	/**
52
	 *
53
	 * @param applicationConfiguration
54
	 */
55
	private ExportManager(ICdmApplicationConfiguration applicationConfiguration) {
56
		super(applicationConfiguration);
57
	}
58

    
59
	/**
60
	 * <p>
61
	 * NewInstance
62
	 * </p>
63
	 *
64
	 * @param applicationConfiguration
65
	 *            a
66
	 *            {@link eu.etaxonomy.cdm.api.application.CdmApplicationController}
67
	 *            object.
68
	 * @return a {@link eu.etaxonomy.taxeditor.io.ExportManager} object.
69
	 */
70
	public static ExportManager NewInstance(
71
			ICdmApplicationConfiguration applicationConfiguration) {
72
		return new ExportManager(applicationConfiguration);
73
	}
74

    
75
	/**
76
	 * <p>
77
	 * createIOJob
78
	 * </p>
79
	 *
80
	 * @param configurator
81
	 *            a {@link eu.etaxonomy.cdm.io.common.IExportConfigurator}
82
	 *            object.
83
	 * @return a {@link org.eclipse.core.runtime.jobs.Job} object.
84
	 */
85
	@Override
86
	protected Job createIOJob(final IExportConfigurator configurator) {
87

    
88
		Assert.isNotNull(configurator, "Configuration may not be null");
89

    
90
		final Display display = Display.getCurrent();
91

    
92
		Job job = new Job("Export: " + configurator.getClass().getSimpleName()) {
93
			@Override
94
			protected IStatus run(IProgressMonitor monitor) {
95
				monitor.beginTask(
96
						"Exporting database. This will take some time.", 100);
97
				monitor.worked(10);
98

    
99
			    /** see ticket # 4456 and */
100
//				display.asyncExec(new Runnable() {
101
//
102
//					@Override
103
//					public void run() {
104
//
105
//					    // terminate any open transactions
106
//						IConversationEnabled activePart = (IConversationEnabled) StoreUtil
107
//								.getActivePage().getActivePart();
108
//						activePart.getConversationHolder().commit(false);
109
//					}
110
//				});
111

    
112
//				monitor.worked(10);
113

    
114
				CdmDefaultExport<IExportConfigurator> exporter = new CdmDefaultExport<IExportConfigurator>();
115
				configurator.setProgressMonitor(CdmProgressMonitorAdapter
116
						.CreateSubMonitor(monitor, 80));
117
				exporter.setCdmAppController(applicationConfiguration);
118
				monitor.worked(10);
119

    
120
				try {
121
					exporter.invoke(configurator);
122
					monitor.worked(60);
123
				} catch (RuntimeException e) {
124
					MessagingUtils.messageDialog("Error exporting data", this,
125
							"An error occured while"
126
									+ "exporting to destination '"
127
									+ configurator.getDestinationNameString()
128
									+ "'.\n"
129
									+ "Please check error log for details.", e);
130
				}
131

    
132
				display.asyncExec(new Runnable() {
133

    
134
					@Override
135
					public void run() {
136
						IWorkbenchPart activePart = StoreUtil.getActivePage()
137
								.getActivePart();
138
						if (activePart instanceof IConversationEnabled) {
139
							// terminate any open transactions
140
							IConversationEnabled conversationEnabled = (IConversationEnabled) activePart;
141
							// restarting transaction and committing it to
142
							// trigger
143
							// change listener
144
							// TODO verify correct behaviour
145

    
146
							try{
147
								conversationEnabled.getConversationHolder()
148
									.startTransaction();
149

    
150
								conversationEnabled.getConversationHolder()
151
									.commit();
152
							}catch(RuntimeException e){
153
								MessagingUtils.messageDialog("Error starting conversation handling", this, "" +
154
										"Conversation Error: "+ e);
155
							}
156
						}
157
					}
158
				});
159
				monitor.worked(10);
160

    
161
				return Status.OK_STATUS;
162
			}
163
		};
164

    
165
		return job;
166
	}
167

    
168
	/* (non-Javadoc)
169
	 * @see eu.etaxonomy.taxeditor.io.AbstractIOManager#createIOServiceJob(eu.etaxonomy.cdm.io.common.IIoConfigurator)
170
	 */
171
	@Override
172
	public Job createIOServiceJob(final IExportConfigurator configurator, final File exportFile) {
173
	    Assert.isNotNull(configurator, "Configuration may not be null");
174

    
175
	    final Display display = Display.getCurrent();
176

    
177
	    Job job = new Job("Export: " + configurator.getClass().getSimpleName()) {
178
	        @Override
179
	        protected IStatus run(IProgressMonitor monitor) {
180
	            monitor.beginTask("Exporting database. This will take some time.", IProgressMonitor.UNKNOWN);
181
	            try {
182
	                IIOService ioService = CdmApplicationState.getIOService();
183

    
184
	                ExportResult result = ioService.export(configurator);
185
	                List<byte[]> dataList = result.getExportData();
186
	                byte[] exportData = dataList.get(0);
187

    
188
	                FileOutputStream stream = new FileOutputStream(exportFile);
189
	                try {
190
	                    stream.write(exportData);
191
	                } finally {
192
	                    stream.close();
193
	                }
194

    
195
	            } catch (Exception e) {
196
	                MessagingUtils.errorDialog("Error exporting data",
197
	                        this,
198
	                        e.getMessage(),
199
	                        TaxeditorStorePlugin.PLUGIN_ID,
200
	                        e,
201
	                        true);
202
	            }
203
	            return Status.OK_STATUS;
204
	        }
205
	    };
206
	    return job;
207
	}
208
	/**
209
	 * @param jaxb
210
	 * @return
211
	 */
212
	private IIoConfigurator getConfigurator(TYPE type) {
213
		Assert.isNotNull(type, "Type should not be null");
214

    
215
		switch (type) {
216
		case Jaxb:
217
			return JaxbExportConfigurator.NewInstance(null, null);
218
		case Sdd:
219
			return SDDExportConfigurator.NewInstance(null, null, null);
220
		default:
221
			MessagingUtils.notImplementedMessage(this);
222
			throw new IllegalArgumentException("Export not supported yet");
223
		}
224
	}
225

    
226
	/**
227
	 * <p>
228
	 * JaxbConfigurator
229
	 * </p>
230
	 *
231
	 * @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbExportConfigurator} object.
232
	 */
233
	public final JaxbExportConfigurator JaxbConfigurator() {
234
		return (JaxbExportConfigurator) getConfigurator(TYPE.Jaxb);
235
	}
236

    
237
	/**
238
	 * <p>
239
	 * SddConfigurator
240
	 * </p>
241
	 *
242
	 * @return a {@link eu.etaxonomy.cdm.io.sdd.out.SDDExportConfigurator}
243
	 *         object.
244
	 */
245
	public final SDDExportConfigurator SddConfigurator() {
246
		return (SDDExportConfigurator) getConfigurator(TYPE.Sdd);
247
	}
248

    
249

    
250

    
251
}
(2-2/3)