Project

General

Profile

Download (7.39 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

    
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
}
(2-2/3)