c7b7acc9cf0dc737a853c706c0daa85d3af1e075
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / io / ExportManager.java
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 }