2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.taxeditor
.io
;
13 import java
.io
.FileOutputStream
;
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
;
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
;
42 * ExportHandler class.
46 * @created Sep 11, 2009
49 public class ExportManager
extends AbstractIOManager
<IExportConfigurator
> {
51 private static final Logger logger
= Logger
.getLogger(ExportManager
.class);
55 * @param applicationConfiguration
57 private ExportManager(ICdmRepository applicationConfiguration
) {
58 super(applicationConfiguration
);
66 * @param applicationConfiguration
68 * {@link eu.etaxonomy.cdm.api.application.CdmApplicationController}
70 * @return a {@link eu.etaxonomy.taxeditor.io.ExportManager} object.
72 public static ExportManager
NewInstance(
73 ICdmRepository applicationConfiguration
) {
74 return new ExportManager(applicationConfiguration
);
83 * a {@link eu.etaxonomy.cdm.io.common.IExportConfigurator}
85 * @return a {@link org.eclipse.core.runtime.jobs.Job} object.
88 protected Job
createIOJob(final IExportConfigurator configurator
) {
90 Assert
.isNotNull(configurator
, "Configuration may not be null");
92 final Display display
= Display
.getCurrent();
94 Job job
= new Job("Export: " + configurator
.getClass().getSimpleName()) {
96 protected IStatus
run(IProgressMonitor monitor
) {
98 "Exporting database. This will take some time.", 100);
101 /** see ticket # 4456 and */
102 // display.asyncExec(new Runnable() {
105 // public void run() {
107 // // terminate any open transactions
108 // IConversationEnabled activePart = (IConversationEnabled) StoreUtil
109 // .getActivePage().getActivePart();
110 // activePart.getConversationHolder().commit(false);
114 // monitor.worked(10);
116 CdmDefaultExport
<IExportConfigurator
> exporter
= new CdmDefaultExport
<IExportConfigurator
>();
117 configurator
.setProgressMonitor(CdmProgressMonitorAdapter
118 .CreateSubMonitor(monitor
, 80));
119 exporter
.setCdmAppController(applicationConfiguration
);
123 exporter
.invoke(configurator
);
125 } catch (RuntimeException e
) {
126 MessagingUtils
.messageDialog("Error exporting data", this,
127 "An error occured while"
128 + "exporting to destination '"
129 + configurator
.getDestinationNameString()
131 + "Please check error log for details.", e
);
134 display
.asyncExec(new Runnable() {
138 IWorkbenchPart activePart
= StoreUtil
.getActivePage()
140 if (activePart
instanceof IConversationEnabled
) {
141 // terminate any open transactions
142 IConversationEnabled conversationEnabled
= (IConversationEnabled
) activePart
;
143 // restarting transaction and committing it to
146 // TODO verify correct behaviour
149 conversationEnabled
.getConversationHolder()
152 conversationEnabled
.getConversationHolder()
154 }catch(RuntimeException e
){
155 MessagingUtils
.messageDialog("Error starting conversation handling", this, "" +
156 "Conversation Error: "+ e
);
163 return Status
.OK_STATUS
;
170 public Job
createIOServiceJob(final IExportConfigurator configurator
, final File exportFile
) {
171 Assert
.isNotNull(configurator
, "Configuration may not be null");
173 // final Display display = Display.getCurrent();
175 Job job
= new Job("Export: " + configurator
.getClass().getSimpleName()) { //$NON-NLS-1$
177 protected IStatus
run(IProgressMonitor monitor
) {
178 monitor
.beginTask("Exporting database. This will take some time.", IProgressMonitor
.UNKNOWN
);
180 IIOService ioService
= CdmApplicationState
.getIOService();
182 ExportResult result
= ioService
.export(configurator
);
183 ExportDataWrapper data
= result
.getExportData();
185 byte[] exportData
= (byte[])data
.getExportData();
186 if(exportData
!= null){
187 FileOutputStream stream
= new FileOutputStream(exportFile
);
188 stream
.write(exportData
);
191 } catch(Exception e
){
192 logger
.error(e
.getStackTrace());
198 } catch (Exception e
) {
199 MessagingUtils
.errorDialog("Error exporting data",
202 TaxeditorStorePlugin
.PLUGIN_ID
,
206 return Status
.OK_STATUS
;
215 private IIoConfigurator
getConfigurator(TYPE type
) {
216 Assert
.isNotNull(type
, "Type should not be null");
220 return JaxbExportConfigurator
.NewInstance(null, null);
222 return SDDExportConfigurator
.NewInstance(null, null, null);
224 MessagingUtils
.notImplementedMessage(this);
225 throw new IllegalArgumentException("Export not supported yet");
234 * @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbExportConfigurator} object.
236 public final JaxbExportConfigurator
JaxbConfigurator() {
237 return (JaxbExportConfigurator
) getConfigurator(TYPE
.Jaxb
);
245 * @return a {@link eu.etaxonomy.cdm.io.sdd.out.SDDExportConfigurator}
248 public final SDDExportConfigurator
SddConfigurator() {
249 return (SDDExportConfigurator
) getConfigurator(TYPE
.Sdd
);