Project

General

Profile

Download (7.06 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2007 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * See LICENSE.TXT at the top of this package for the full license terms.
8
 */
9

    
10
package eu.etaxonomy.taxeditor.io;
11

    
12
import java.io.File;
13
import java.io.FileOutputStream;
14
import java.util.List;
15

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

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

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

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

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

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

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

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

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

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

    
111
//				monitor.worked(10);
112

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

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

    
131
				display.asyncExec(new Runnable() {
132

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

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

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

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

    
164
		return job;
165
	}
166

    
167
	public Job createIOServiceJob(final IExportConfigurator configurator, final File exportFile) {
168
	    Assert.isNotNull(configurator, "Configuration may not be null");
169

    
170
	    final Display display = Display.getCurrent();
171

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

    
179
	                ExportResult result = ioService.export(configurator);
180
	                List<byte[]> dataList = result.getExportData();
181
	                byte[] exportData = dataList.get(0);
182

    
183
	                FileOutputStream stream = new FileOutputStream(exportFile);
184
	                try {
185
	                    stream.write(exportData);
186
	                } finally {
187
	                    stream.close();
188
	                }
189

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

    
210
		switch (type) {
211
		case Jaxb:
212
			return JaxbExportConfigurator.NewInstance(null, null);
213
		case Sdd:
214
			return SDDExportConfigurator.NewInstance(null, null, null);
215
		default:
216
			MessagingUtils.notImplementedMessage(this);
217
			throw new IllegalArgumentException("Export not supported yet");
218
		}
219
	}
220

    
221
	/**
222
	 * <p>
223
	 * JaxbConfigurator
224
	 * </p>
225
	 *
226
	 * @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbExportConfigurator} object.
227
	 */
228
	public final JaxbExportConfigurator JaxbConfigurator() {
229
		return (JaxbExportConfigurator) getConfigurator(TYPE.Jaxb);
230
	}
231

    
232
	/**
233
	 * <p>
234
	 * SddConfigurator
235
	 * </p>
236
	 *
237
	 * @return a {@link eu.etaxonomy.cdm.io.sdd.out.SDDExportConfigurator}
238
	 *         object.
239
	 */
240
	public final SDDExportConfigurator SddConfigurator() {
241
		return (SDDExportConfigurator) getConfigurator(TYPE.Sdd);
242
	}
243

    
244

    
245

    
246
}
(2-2/3)