6c32044238076d032caf5a18cf3f07cbc2e2ea31
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / io / ExportManager.java
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
15 import org.apache.log4j.Logger;
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.ExportDataWrapper;
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 private static final Logger logger = Logger.getLogger(ExportManager.class);
52
53 /**
54 *
55 * @param applicationConfiguration
56 */
57 private ExportManager(ICdmRepository applicationConfiguration) {
58 super(applicationConfiguration);
59 }
60
61 /**
62 * <p>
63 * NewInstance
64 * </p>
65 *
66 * @param applicationConfiguration
67 * a
68 * {@link eu.etaxonomy.cdm.api.application.CdmApplicationController}
69 * object.
70 * @return a {@link eu.etaxonomy.taxeditor.io.ExportManager} object.
71 */
72 public static ExportManager NewInstance(
73 ICdmRepository applicationConfiguration) {
74 return new ExportManager(applicationConfiguration);
75 }
76
77 /**
78 * <p>
79 * createIOJob
80 * </p>
81 *
82 * @param configurator
83 * a {@link eu.etaxonomy.cdm.io.common.IExportConfigurator}
84 * object.
85 * @return a {@link org.eclipse.core.runtime.jobs.Job} object.
86 */
87 @Override
88 protected Job createIOJob(final IExportConfigurator configurator) {
89
90 Assert.isNotNull(configurator, "Configuration may not be null");
91
92 final Display display = Display.getCurrent();
93
94 Job job = new Job("Export: " + configurator.getClass().getSimpleName()) {
95 @Override
96 protected IStatus run(IProgressMonitor monitor) {
97 monitor.beginTask(
98 "Exporting database. This will take some time.", 100);
99 monitor.worked(10);
100
101 /** see ticket # 4456 and */
102 // display.asyncExec(new Runnable() {
103 //
104 // @Override
105 // public void run() {
106 //
107 // // terminate any open transactions
108 // IConversationEnabled activePart = (IConversationEnabled) StoreUtil
109 // .getActivePage().getActivePart();
110 // activePart.getConversationHolder().commit(false);
111 // }
112 // });
113
114 // monitor.worked(10);
115
116 CdmDefaultExport<IExportConfigurator> exporter = new CdmDefaultExport<IExportConfigurator>();
117 configurator.setProgressMonitor(CdmProgressMonitorAdapter
118 .CreateSubMonitor(monitor, 80));
119 exporter.setCdmAppController(applicationConfiguration);
120 monitor.worked(10);
121
122 try {
123 exporter.invoke(configurator);
124 monitor.worked(60);
125 } catch (RuntimeException e) {
126 MessagingUtils.messageDialog("Error exporting data", this,
127 "An error occured while"
128 + "exporting to destination '"
129 + configurator.getDestinationNameString()
130 + "'.\n"
131 + "Please check error log for details.", e);
132 }
133
134 display.asyncExec(new Runnable() {
135
136 @Override
137 public void run() {
138 IWorkbenchPart activePart = StoreUtil.getActivePage()
139 .getActivePart();
140 if (activePart instanceof IConversationEnabled) {
141 // terminate any open transactions
142 IConversationEnabled conversationEnabled = (IConversationEnabled) activePart;
143 // restarting transaction and committing it to
144 // trigger
145 // change listener
146 // TODO verify correct behaviour
147
148 try{
149 conversationEnabled.getConversationHolder()
150 .startTransaction();
151
152 conversationEnabled.getConversationHolder()
153 .commit();
154 }catch(RuntimeException e){
155 MessagingUtils.messageDialog("Error starting conversation handling", this, "" +
156 "Conversation Error: "+ e);
157 }
158 }
159 }
160 });
161 monitor.worked(10);
162
163 return Status.OK_STATUS;
164 }
165 };
166
167 return job;
168 }
169
170 public Job createIOServiceJob(final IExportConfigurator configurator, final File exportFile) {
171 Assert.isNotNull(configurator, "Configuration may not be null");
172
173 // final Display display = Display.getCurrent();
174
175 Job job = new Job("Export: " + configurator.getClass().getSimpleName()) { //$NON-NLS-1$
176 @Override
177 protected IStatus run(IProgressMonitor monitor) {
178 monitor.beginTask("Exporting database. This will take some time.", IProgressMonitor.UNKNOWN);
179 try {
180 IIOService ioService = CdmApplicationState.getIOService();
181
182 ExportResult result = ioService.export(configurator);
183 ExportDataWrapper data = result.getExportData();
184 try{
185 byte[] exportData = (byte[])data.getExportData();
186 if(exportData != null){
187 FileOutputStream stream = new FileOutputStream(exportFile);
188 stream.write(exportData);
189 stream.close();
190 }
191 } catch(Exception e){
192 logger.error(e.getStackTrace());
193 }
194
195
196
197
198 } catch (Exception e) {
199 MessagingUtils.errorDialog("Error exporting data",
200 this,
201 e.getMessage(),
202 TaxeditorStorePlugin.PLUGIN_ID,
203 e,
204 true);
205 }
206 return Status.OK_STATUS;
207 }
208 };
209 return job;
210 }
211 /**
212 * @param jaxb
213 * @return
214 */
215 private IIoConfigurator getConfigurator(TYPE type) {
216 Assert.isNotNull(type, "Type should not be null");
217
218 switch (type) {
219 case Jaxb:
220 return JaxbExportConfigurator.NewInstance(null, null);
221 case Sdd:
222 return SDDExportConfigurator.NewInstance(null, null, null);
223 default:
224 MessagingUtils.notImplementedMessage(this);
225 throw new IllegalArgumentException("Export not supported yet");
226 }
227 }
228
229 /**
230 * <p>
231 * JaxbConfigurator
232 * </p>
233 *
234 * @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbExportConfigurator} object.
235 */
236 public final JaxbExportConfigurator JaxbConfigurator() {
237 return (JaxbExportConfigurator) getConfigurator(TYPE.Jaxb);
238 }
239
240 /**
241 * <p>
242 * SddConfigurator
243 * </p>
244 *
245 * @return a {@link eu.etaxonomy.cdm.io.sdd.out.SDDExportConfigurator}
246 * object.
247 */
248 public final SDDExportConfigurator SddConfigurator() {
249 return (SDDExportConfigurator) getConfigurator(TYPE.Sdd);
250 }
251
252
253
254 }