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
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("edition", "Edition"));
95
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("volume", "Volume"));
96
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("series", "Series"));
97
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("pages", "PageString"));
98
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("isbn", "ISBN"));
99
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("issn", "ISSN"));
100
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("publisher", "Publisher"));
101
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("placePublished", "PublicationTown"));
102
		mapping.addMapper(DbTimePeriodMapper.NewInstance("datePublished", "RefYear"));
103
		mapping.addMapper(MethodMapper.NewInstance("ThesisFlag", this));
104

    
105
		mapping.addMapper(CreatedAndNotesMapper.NewInstance());
106

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

    
115

    
116
		return mapping;
117
	}
118

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

    
125
			doDelete(state);
126

    
127
			TransactionStatus txStatus = startTransaction(true);
128

    
129
			List<Reference> list = getReferenceService().list(null,100000000, 0,null,null);
130

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

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

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

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

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

    
203
	}
204

    
205
	protected boolean doDelete(BerlinModelExportState state){
206
		BerlinModelExportConfigurator bmeConfig = state.getConfig();
207

    
208
		String sql;
209
		Source destination =  bmeConfig.getDestination();
210

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

    
222

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

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

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

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

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

    
271

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

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

    
283

    
284

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

    
295

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

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

    
316

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