1
2
3
4
5
6
7
8
9
10 package eu.etaxonomy.cdm.io.jaxb;
11
12 import java.io.FileOutputStream;
13 import java.io.OutputStreamWriter;
14 import java.io.PrintWriter;
15 import java.util.ArrayList;
16 import java.util.List;
17
18 import org.apache.log4j.Logger;
19 import org.springframework.stereotype.Component;
20 import org.springframework.transaction.TransactionStatus;
21
22 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
23 import eu.etaxonomy.cdm.io.common.CdmExportBase;
24 import eu.etaxonomy.cdm.io.common.ICdmExport;
25 import eu.etaxonomy.cdm.io.common.IExportConfigurator;
26 import eu.etaxonomy.cdm.io.common.IImportConfigurator;
27 import eu.etaxonomy.cdm.model.agent.AgentBase;
28 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
29 import eu.etaxonomy.cdm.model.common.User;
30 import eu.etaxonomy.cdm.model.description.FeatureNode;
31 import eu.etaxonomy.cdm.model.description.FeatureTree;
32 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
33 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
34 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
35 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
36 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
37 import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;
38
39
40
41
42
43
44 @Component
45 public class JaxbExport extends CdmExportBase<JaxbExportConfigurator, JaxbExportState> implements ICdmExport<JaxbExportConfigurator, JaxbExportState> {
46
47 private static final Logger logger = Logger.getLogger(JaxbExport.class);
48 private CdmDocumentBuilder cdmDocumentBuilder = null;
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 @Override
70 protected boolean doInvoke(JaxbExportState state) {
71
72 JaxbExportConfigurator jaxbExpConfig = (JaxbExportConfigurator)state.getConfig();
73
74 String fileName = jaxbExpConfig.getDestination();
75
76
77
78 TransactionStatus txStatus = startTransaction(true);
79 DataSet dataSet = new DataSet();
80
81
82
83 try {
84 logger.info("Retrieving data from DB");
85
86 retrieveData(jaxbExpConfig, dataSet);
87
88 } catch (Exception e) {
89 logger.error("Error retrieving data");
90 e.printStackTrace();
91 }
92
93 logger.info("All data retrieved");
94
95 try {
96 cdmDocumentBuilder = new CdmDocumentBuilder();
97 PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(fileName), "UTF8"), true);
98
99
100
101
102
103
104
105 cdmDocumentBuilder.marshal(dataSet, writer);
106
107
108
109 logger.info("XML file written");
110 logger.info("Filename is: " + fileName);
111
112 } catch (Exception e) {
113 logger.error("Marshalling error");
114 e.printStackTrace();
115 }
116 commitTransaction(txStatus);
117
118 return true;
119
120 }
121
122
123 private void retrieveData (IExportConfigurator config, DataSet dataSet) {
124
125 JaxbExportConfigurator jaxbExpConfig = (JaxbExportConfigurator)config;
126 final int MAX_ROWS = 50000;
127 int numberOfRows = jaxbExpConfig.getMaxRows();
128
129 int agentRows = numberOfRows;
130 int definedTermBaseRows = numberOfRows;
131 int referenceBaseRows = numberOfRows;
132 int taxonNameBaseRows = numberOfRows;
133 int taxonBaseRows = numberOfRows;
134 int taxonNodeRows = numberOfRows;
135 int relationshipRows = numberOfRows;
136 int occurrencesRows = numberOfRows;
137 int mediaRows = numberOfRows;
138 int featureDataRows = numberOfRows;
139 int taxonomicTreeDataRows = numberOfRows;
140 int languageDataRows = numberOfRows;
141 int termVocabularyRows = numberOfRows;
142 int homotypicalGroupRows = numberOfRows;
143 int UserRows= numberOfRows;
144
145 if (jaxbExpConfig.isDoUsers() == true) {
146
147 if (UserRows == 0) { UserRows = MAX_ROWS; }
148 logger.info("# User");
149 List<User> users = getUserService().list(null, UserRows, 0, null, null);
150
151
152 for (User user: users){
153 dataSet.addUser( (User)HibernateProxyHelper.deproxy(user));
154 }
155
156 }
157 if (jaxbExpConfig.isDoTermVocabularies() == true) {
158 if (termVocabularyRows == 0) { termVocabularyRows = MAX_ROWS; }
159 logger.info("# TermVocabulary");
160 dataSet.setTermVocabularies((List)getVocabularyService().list(null,termVocabularyRows, 0, null, null));
161 }
162
163
164
165
166
167
168
169
170 dataSet.setLanguageStrings(getTermService().getAllLanguageStrings(MAX_ROWS, 0));
171
172
173 if (jaxbExpConfig.isDoTerms() == true) {
174 if (definedTermBaseRows == 0) { definedTermBaseRows = getTermService().count(DefinedTermBase.class); }
175 logger.info("# DefinedTermBase: " + definedTermBaseRows);
176 dataSet.setTerms(getTermService().list(null,definedTermBaseRows, 0,null,null));
177 }
178
179 if (jaxbExpConfig.isDoAuthors() == true) {
180 if (agentRows == 0) { agentRows = getAgentService().count(AgentBase.class); }
181 logger.info("# Agents: " + agentRows);
182
183 dataSet.setAgents(getAgentService().list(null,agentRows, 0,null,null));
184 }
185
186
187
188 if (jaxbExpConfig.getDoReferences() != IImportConfigurator.DO_REFERENCES.NONE) {
189 if (referenceBaseRows == 0) { referenceBaseRows = getReferenceService().count(ReferenceBase.class); }
190 logger.info("# ReferenceBase: " + referenceBaseRows);
191 dataSet.setReferences(getReferenceService().list(null,referenceBaseRows, 0,null,null));
192 }
193
194 if (jaxbExpConfig.isDoHomotypicalGroups() == true) {
195 if (homotypicalGroupRows == 0) { homotypicalGroupRows = MAX_ROWS; }
196 logger.info("# Homotypical Groups");
197 dataSet.setHomotypicalGroups(getNameService().getAllHomotypicalGroups(homotypicalGroupRows, 0));
198 }
199
200 if (jaxbExpConfig.isDoTaxonNames() == true) {
201 if (taxonNameBaseRows == 0) { taxonNameBaseRows = getNameService().count(TaxonNameBase.class); }
202 logger.info("# TaxonNameBase: " + taxonNameBaseRows);
203
204 dataSet.setTaxonomicNames(getNameService().list(null,taxonNameBaseRows, 0,null,null));
205 }
206
207
208
209 if (jaxbExpConfig.isDoTaxa() == true) {
210 if (taxonBaseRows == 0) { taxonBaseRows = getTaxonService().count(TaxonBase.class); }
211 logger.info("# TaxonBase: " + taxonBaseRows);
212
213
214 List<TaxonBase> tb = getTaxonService().list(null,taxonBaseRows, 0,null,null);
215 for (TaxonBase taxonBase : tb) {
216 dataSet.addTaxonBase((TaxonBase)HibernateProxyHelper.deproxy(taxonBase));
217 }
218 }
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235 if (jaxbExpConfig.isDoOccurrence() == true) {
236 if (occurrencesRows == 0) { occurrencesRows = getOccurrenceService().count(SpecimenOrObservationBase.class); }
237 logger.info("# SpecimenOrObservationBase: " + occurrencesRows);
238 List<SpecimenOrObservationBase> occurrenceList = getOccurrenceService().list(null,occurrencesRows, 0,null,null);
239
240
241
242
243
244 dataSet.setOccurrences(occurrenceList);
245 }
246
247 if (jaxbExpConfig.isDoTypeDesignations() == true) {
248 logger.info("# TypeDesignations");
249 dataSet.addTypeDesignations(getNameService().getAllTypeDesignations(MAX_ROWS, 0));
250 }
251
252
253
254 if (jaxbExpConfig.isDoMedia() == true) {
255 if (mediaRows == 0) { mediaRows = MAX_ROWS; }
256 logger.info("# Media");
257 dataSet.setMedia(getMediaService().list(null,mediaRows, 0,null,null));
258
259
260 }
261
262 if (jaxbExpConfig.isDoFeatureData() == true) {
263 if (featureDataRows == 0) { featureDataRows = MAX_ROWS; }
264 logger.info("# Feature Tree, Feature Node");
265 List<FeatureTree> featureTrees = new ArrayList<FeatureTree>();
266 featureTrees= getFeatureTreeService().list(null,featureDataRows, 0, null, null);
267 List<FeatureTree> taxTreesdeproxy = new ArrayList<FeatureTree>();
268 for (FeatureTree featureTree : featureTrees){
269 HibernateProxyHelper.deproxy(featureTree);
270 taxTreesdeproxy.add(featureTree);
271 }
272
273 dataSet.setFeatureTrees(getFeatureTreeService().list(null,null,null,null,null));
274 }
275 if (jaxbExpConfig.isDoTaxonomicTreeData() == true) {
276 if (taxonomicTreeDataRows == 0) { taxonomicTreeDataRows = MAX_ROWS; }
277 logger.info("# Taxonomic Tree");
278
279
280 List<TaxonomicTree> taxTrees = new ArrayList<TaxonomicTree>();
281 taxTrees= getTaxonTreeService().list(null,taxonomicTreeDataRows, 0, null, null);
282
283 List<TaxonomicTree> taxTreesdeproxy = new ArrayList<TaxonomicTree>();
284 for (TaxonomicTree taxTree : taxTrees){
285 HibernateProxyHelper.deproxy(taxTree);
286 taxTreesdeproxy.add(taxTree);
287 }
288 List<TaxonNode> taxNodes = new ArrayList<TaxonNode>();
289 taxNodes= getTaxonTreeService().getAllNodes();
290 List<TaxonNode> taxNodesdeproxy = new ArrayList<TaxonNode>();
291 for (TaxonNode taxNode : taxNodes){
292 HibernateProxyHelper.deproxy(taxNode);
293 taxNodesdeproxy.add(taxNode);
294 }
295
296 dataSet.setTaxonNodes(taxNodesdeproxy);
297 dataSet.setTaxonomicTrees(taxTreesdeproxy );
298 }
299
300 dataSet.setLanguageStrings(null);
301 }
302
303
304 @Override
305 protected boolean doCheck(JaxbExportState state) {
306 boolean result = true;
307 logger.warn("No check implemented for Jaxb export");
308 return result;
309 }
310
311
312 @Override
313 protected boolean isIgnore(JaxbExportState state) {
314 return false;
315 }
316
317 }