Project

General

Profile

Download (10.5 KB) Statistics
| Branch: | 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
package eu.etaxonomy.cdm.io.berlinModel.out;
10

    
11
import java.sql.Connection;
12
import java.sql.PreparedStatement;
13
import java.sql.SQLException;
14
import java.util.List;
15

    
16
import org.apache.log4j.Logger;
17
import org.springframework.stereotype.Component;
18
import org.springframework.transaction.TransactionStatus;
19

    
20
import eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer;
21
import eu.etaxonomy.cdm.io.common.IImportConfigurator.DO_REFERENCES;
22
import eu.etaxonomy.cdm.io.common.Source;
23
import eu.etaxonomy.cdm.io.common.mapping.out.CdmDbExportMapping;
24
import eu.etaxonomy.cdm.io.common.mapping.out.CreatedAndNotesMapper;
25
import eu.etaxonomy.cdm.io.common.mapping.out.DbBooleanMapper;
26
import eu.etaxonomy.cdm.io.common.mapping.out.DbObjectMapper;
27
import eu.etaxonomy.cdm.io.common.mapping.out.DbStringMapper;
28
import eu.etaxonomy.cdm.io.common.mapping.out.DbTimePeriodMapper;
29
import eu.etaxonomy.cdm.io.common.mapping.out.IExportTransformer;
30
import eu.etaxonomy.cdm.io.common.mapping.out.IdMapper;
31
import eu.etaxonomy.cdm.io.common.mapping.out.MethodMapper;
32
import eu.etaxonomy.cdm.model.common.CdmBase;
33
/*import eu.etaxonomy.cdm.model.reference.Article;
34
import eu.etaxonomy.cdm.model.reference.BookSection;*/
35
import eu.etaxonomy.cdm.model.reference.IArticle;
36
import eu.etaxonomy.cdm.model.reference.IBookSection;
37
import eu.etaxonomy.cdm.model.reference.IInProceedings;
38
import eu.etaxonomy.cdm.model.reference.IPrintedUnitBase;
39
/*import eu.etaxonomy.cdm.model.reference.InProceedings;
40
import eu.etaxonomy.cdm.model.reference.PrintedUnitBase;*/
41
import eu.etaxonomy.cdm.model.reference.Reference;
42
import eu.etaxonomy.cdm.model.reference.ReferenceType;
43
//import eu.etaxonomy.cdm.model.reference.Thesis;
44

    
45

    
46
/**
47
 * @author a.mueller
48
 * @since 20.03.2008
49
 */
50
@Component
51
public class BerlinModelReferenceExport extends BerlinModelExportBase<Reference> {
52

    
53
    private static final long serialVersionUID = 7866036354323372595L;
54

    
55
    private static final Logger logger = Logger.getLogger(BerlinModelReferenceExport.class);
56

    
57
	private static int modCount = 1000;
58
	private static final String dbTableName = "Reference";
59
	private static final String pluralString = "references";
60
	private static final Class<? extends CdmBase> standardMethodParameter = Reference.class;
61

    
62
	public BerlinModelReferenceExport(){
63
		super();
64
	}
65

    
66
	@Override
67
	protected boolean doCheck(BerlinModelExportState state){
68
		boolean result = true;
69
		logger.warn("Checking for References not yet implemented");
70
		//result &= checkArticlesWithoutJournal(bmiConfig);
71
		//result &= checkPartOfJournal(bmiConfig);
72

    
73
		return result;
74
	}
75

    
76
	private CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> getMapping(){
77
		String tableName = dbTableName;
78
		CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> mapping = new CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer>(tableName);
79
		mapping.addMapper(IdMapper.NewInstance("RefId"));
80
		mapping.addMapper(MethodMapper.NewInstance("RefCategoryFk", this));
81
		mapping.addMapper(MethodMapper.NewInstance("RefCache", this));
82
		mapping.addMapper(MethodMapper.NewInstance("NomRefCache", this));
83
		mapping.addMapper(DbBooleanMapper.NewFalseInstance("isProtectedTitleCache","PreliminaryFlag"));
84

    
85
		mapping.addMapper(DbObjectMapper.NewInstance("authorship", "NomAuthorTeamFk"));
86
		mapping.addMapper(MethodMapper.NewInstance("RefAuthorString", this));
87

    
88
		mapping.addMapper(DbStringMapper.NewInstance("title", "Title"));
89
//		mapping.addMapper(MethodMapper.NewInstance("Title", this));
90

    
91
//		mapping.addMapper(DbStringMapper.NewInstance("title", "NomTitleAbbrev"));
92
		mapping.addMapper(MethodMapper.NewInstance("NomTitleAbbrev", this));
93

    
94

    
95

    
96
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("edition", "Edition"));
97
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("volume", "Volume"));
98
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("series", "Series"));
99
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("pages", "PageString"));
100
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("isbn", "ISBN"));
101
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("issn", "ISSN"));
102
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("publisher", "Publisher"));
103
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("placePublished", "PublicationTown"));
104
		mapping.addMapper(DbTimePeriodMapper.NewInstance("datePublished", "RefYear"));
105
		mapping.addMapper(MethodMapper.NewInstance("ThesisFlag", this));
106

    
107
		mapping.addMapper(CreatedAndNotesMapper.NewInstance());
108

    
109
//		        ,[Series] ??
110
//		        ,[URL]
111
//		        ,[ExportDate]
112
//		        ,[InformalRefCategory]
113
//		        ,[IsPaper]
114
//		        ,[RefSourceFk]
115
//		        ,[IdInSource]
116

    
117

    
118
		return mapping;
119
	}
120

    
121
	@Override
122
    protected void doInvoke(BerlinModelExportState state){
123
		try{
124
			logger.info("start make "+pluralString+" ...");
125
			boolean success = true ;
126

    
127
			doDelete(state);
128

    
129
			TransactionStatus txStatus = startTransaction(true);
130

    
131
			List<Reference> list = getReferenceService().list(null,100000000, 0,null,null);
132

    
133
			CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> mapping = getMapping();
134
			mapping.initialize(state);
135

    
136
			int count = 0;
137
			for (Reference ref : list){
138
				doCount(count++, modCount, pluralString);
139
				success &= mapping.invoke(ref);
140
			}
141
			//Prepare InRefStatement
142
			logger.info("start make inRefences ...");
143
			String inRefSql = "UPDATE Reference SET InRefFk = ? WHERE RefId = ?";
144
			Connection con = state.getConfig().getDestination().getConnection();
145
			PreparedStatement stmt = con.prepareStatement(inRefSql);
146
			count = 0;
147
			for (Reference ref : list){
148
				doCount(count++, modCount, "inReferences");
149
				success &= invokeInRef(ref, state, stmt);
150
			}
151

    
152
			commitTransaction(txStatus);
153
			logger.info("end make "+pluralString+" ..." + getSuccessString(success));
154
			if (!success){
155
                String message = "An undefined error occurred during Reference export";
156
                state.getResult().addError(message);
157
			}
158
			return;
159
		}catch(SQLException e){
160
			e.printStackTrace();
161
			logger.error(e.getMessage());
162
			state.getResult().addException(e);
163
			return;
164
		}
165
	}
166

    
167
	protected boolean invokeInRef(Reference ref, BerlinModelExportState state, PreparedStatement stmt) {
168
		if (ref == null){
169
			return true;
170
		}else{
171
			Reference inRef = getInRef(ref);
172
			if (inRef == null){
173
				return true;
174
			}else{
175
				Integer inRefId = state.getDbId(inRef);
176
				Integer refId = state.getDbId(ref);
177
				try {
178
					stmt.setInt(1, inRefId);
179
					stmt.setInt(2, refId);
180
					stmt.executeUpdate();
181
					return true;
182
				} catch (SQLException e) {
183
					logger.error("SQLException during inRef invoke for reference " + ref.getTitleCache() + ": " + e.getMessage());
184
					e.printStackTrace();
185
					return false;
186
				}
187
			}
188
		}
189
	}
190

    
191
	private Reference getInRef(Reference ref){
192
		Reference inRef;
193
		if (ref.getType().equals(ReferenceType.Article)){
194
			return (Reference)((IArticle)ref).getInJournal();
195
		}else if (ref.getType().equals(ReferenceType.BookSection)){
196
			return (Reference)((IBookSection)ref).getInBook();
197
		}else if (ref.getType().equals(ReferenceType.InProceedings)){
198
			return (Reference) ((IInProceedings)ref).getInProceedings();
199
		}else if (ref.getType().isPrintedUnit()){
200
			return (Reference)((IPrintedUnitBase)ref).getInSeries();
201
		}else{
202
			return null;
203
		}
204

    
205
	}
206

    
207
	protected boolean doDelete(BerlinModelExportState state){
208
		BerlinModelExportConfigurator bmeConfig = state.getConfig();
209

    
210
		String sql;
211
		Source destination =  bmeConfig.getDestination();
212

    
213
		//RelReference
214
		sql = "DELETE FROM RelReference";
215
		destination.setQuery(sql);
216
		destination.update(sql);
217
		//References
218
		sql = "DELETE FROM Reference";
219
		destination.setQuery(sql);
220
		destination.update(sql);
221
		return true;
222
	}
223

    
224

    
225
	/* (non-Javadoc)
226
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
227
	 */
228
	@Override
229
    protected boolean isIgnore(BerlinModelExportState state){
230
		if (state.getConfig().getDoReferences().equals(DO_REFERENCES.ALL)){
231
			return false;
232
		}else{
233
			return true;
234
		}
235
	}
236

    
237
	//called by MethodMapper
238
	@SuppressWarnings("unused")
239
	private static Integer getRefCategoryFk(Reference ref){
240
		return BerlinModelTransformer.ref2refCategoryId(ref);
241
	}
242

    
243
	//called by MethodMapper
244
	@SuppressWarnings("unused")
245
	private static String getRefCache(Reference ref){
246
		if (ref.isProtectedTitleCache()){
247
			return ref.getTitleCache();
248
		}else{
249
			return null;
250
		}
251
	}
252

    
253
	//called by MethodMapper
254
	@SuppressWarnings("unused")
255
	private static String getNomRefCache(Reference ref){
256
		if (ref.isProtectedTitleCache()){
257
			return ref.getTitleCache();
258
		}else{
259
			return null;
260
		}
261
	}
262

    
263
//	//called by MethodMapper
264
//	@SuppressWarnings("unused")
265
//	private static String getTtile(StrictReferenceBase<?> ref){
266
////		if (ref.isProtectedTitleCache()){
267
////			return ref.getTitleCache();
268
////		}else{
269
////			return null;
270
////		}
271
//	}
272

    
273

    
274
	//called by MethodMapper
275
	@SuppressWarnings("unused")
276
	private static String getNomTitleAbbrev(Reference ref){
277

    
278
		if (/*ref.isNomenclaturallyRelevant() &&*/ ref.getTitle() != null && ref.getTitle().length() <=80){
279
			return ref.getTitle();
280
		}else{
281
			return null;
282
		}
283
	}
284

    
285

    
286

    
287
	//called by MethodMapper
288
	@SuppressWarnings("unused")
289
	private static String getRefAuthorString(Reference ref){
290
		if (ref == null){
291
			return null;
292
		}else{
293
			return (ref.getAuthorship() == null)? null: ref.getAuthorship().getTitleCache();
294
		}
295
	}
296

    
297

    
298
	//called by MethodMapper
299
	@SuppressWarnings("unused")
300
	private static Boolean getPreliminaryFlag(Reference ref){
301
		if (ref.isProtectedTitleCache()){
302
			return true;
303
		}else{
304
			return false;
305
		}
306
	}
307

    
308
	//called by MethodMapper
309
	@SuppressWarnings("unused")
310
	private static Boolean getThesisFlag(Reference ref){
311
		if (ref.getType().equals(ReferenceType.Thesis)){
312
			return true;
313
		}else{
314
			return false;
315
		}
316
	}
317

    
318

    
319
	/* (non-Javadoc)
320
	 * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()
321
	 */
322
	@Override
323
	public Class<? extends CdmBase> getStandardMethodParameter() {
324
		return standardMethodParameter;
325
	}
326
}
(9-9/12)