Project

General

Profile

Download (10.2 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
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.berlinModel.out.mapper.CreatedAndNotesMapper;
22
import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbBooleanMapper;
23
import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbObjectMapper;
24
import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbStringMapper;
25
import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbTimePeriodMapper;
26
import eu.etaxonomy.cdm.io.berlinModel.out.mapper.IdMapper;
27
import eu.etaxonomy.cdm.io.berlinModel.out.mapper.MethodMapper;
28
import eu.etaxonomy.cdm.io.common.Source;
29
import eu.etaxonomy.cdm.io.common.IImportConfigurator.DO_REFERENCES;
30
import eu.etaxonomy.cdm.model.common.CdmBase;
31
/*import eu.etaxonomy.cdm.model.reference.Article;
32
import eu.etaxonomy.cdm.model.reference.BookSection;*/
33
import eu.etaxonomy.cdm.model.reference.IArticle;
34
import eu.etaxonomy.cdm.model.reference.IBookSection;
35
import eu.etaxonomy.cdm.model.reference.IInProceedings;
36
import eu.etaxonomy.cdm.model.reference.IPrintedUnitBase;
37
/*import eu.etaxonomy.cdm.model.reference.InProceedings;
38
import eu.etaxonomy.cdm.model.reference.PrintedUnitBase;*/
39
import eu.etaxonomy.cdm.model.reference.Reference;
40
import eu.etaxonomy.cdm.model.reference.ReferenceType;
41
//import eu.etaxonomy.cdm.model.reference.Thesis;
42

    
43

    
44
/**
45
 * @author a.mueller
46
 * @created 20.03.2008
47
 * @version 1.0
48
 */
49
@Component
50
public class BerlinModelReferenceExport extends BerlinModelExportBase<Reference> {
51
	private static final Logger logger = Logger.getLogger(BerlinModelReferenceExport.class);
52

    
53
	private static int modCount = 1000;
54
	private static final String dbTableName = "Reference";
55
	private static final String pluralString = "references";
56
	private static final Class<? extends CdmBase> standardMethodParameter = Reference.class;
57

    
58
	public BerlinModelReferenceExport(){
59
		super();
60
	}
61
	
62
	/* (non-Javadoc)
63
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
64
	 */
65
	@Override
66
	protected boolean doCheck(BerlinModelExportState state){
67
		boolean result = true;
68
		logger.warn("Checking for References not yet implemented");
69
		//result &= checkArticlesWithoutJournal(bmiConfig);
70
		//result &= checkPartOfJournal(bmiConfig);
71
		
72
		return result;
73
	}
74
	
75
	private BerlinModelExportMapping getMapping(){
76
		String tableName = dbTableName;
77
		BerlinModelExportMapping mapping = new BerlinModelExportMapping(tableName);
78
		mapping.addMapper(IdMapper.NewInstance("RefId"));
79
		mapping.addMapper(MethodMapper.NewInstance("RefCategoryFk", this));
80
		mapping.addMapper(MethodMapper.NewInstance("RefCache", this));
81
		mapping.addMapper(MethodMapper.NewInstance("NomRefCache", this));
82
		mapping.addMapper(DbBooleanMapper.NewFalseInstance("isProtectedTitleCache","PreliminaryFlag"));
83

    
84
		mapping.addMapper(DbObjectMapper.NewInstance("authorTeam", "NomAuthorTeamFk"));
85
		mapping.addMapper(MethodMapper.NewInstance("RefAuthorString", this));
86
		
87
		mapping.addMapper(DbStringMapper.NewInstance("title", "Title"));
88
//		mapping.addMapper(MethodMapper.NewInstance("Title", this));
89

    
90
//		mapping.addMapper(DbStringMapper.NewInstance("title", "NomTitleAbbrev"));
91
		mapping.addMapper(MethodMapper.NewInstance("NomTitleAbbrev", this));
92
		
93
		
94
		
95
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("edition", "Edition"));
96
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("volume", "Volume"));
97
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("series", "Series"));
98
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("pages", "PageString"));
99
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("isbn", "ISBN"));
100
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("issn", "ISSN"));
101
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("publisher", "Publisher"));
102
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("placePublished", "PublicationTown"));
103
		mapping.addMapper(DbTimePeriodMapper.NewInstance("datePublished", "RefYear"));
104
		mapping.addMapper(MethodMapper.NewInstance("ThesisFlag", this));
105
		
106
		mapping.addMapper(CreatedAndNotesMapper.NewInstance());
107
          
108
//		        ,[Series] ??
109
//		        ,[URL]
110
//		        ,[ExportDate]
111
//		        ,[InformalRefCategory]
112
//		        ,[IsPaper]
113
//		        ,[RefSourceFk]
114
//		        ,[IdInSource] 
115
		
116
		       
117
		return mapping;
118
	}
119
	
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
			BerlinModelExportMapping 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
				state.setUnsuccessfull();
154
			}
155
			return;
156
		}catch(SQLException e){
157
			e.printStackTrace();
158
			logger.error(e.getMessage());
159
			state.setUnsuccessfull();
160
			return;
161
		}
162
	}
163

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

    
188
	private Reference<?> getInRef(Reference<?> ref){
189
		Reference<?> inRef;
190
		if (ref.getType().equals(ReferenceType.Article)){
191
			return (Reference)((IArticle)ref).getInJournal();
192
		}else if (ref.getType().equals(ReferenceType.BookSection)){
193
			return (Reference)((IBookSection)ref).getInBook();
194
		}else if (ref.getType().equals(ReferenceType.InProceedings)){
195
			return (Reference) ((IInProceedings)ref).getInProceedings();
196
		}else if (ref.getType().isPrintedUnit()){
197
			return (Reference)((IPrintedUnitBase)ref).getInSeries();
198
		}else{
199
			return null;
200
		}
201
		
202
	}
203
	
204
	protected boolean doDelete(BerlinModelExportState state){
205
		BerlinModelExportConfigurator bmeConfig = state.getConfig();
206
		
207
		String sql;
208
		Source destination =  bmeConfig.getDestination();
209

    
210
		//RelReference
211
		sql = "DELETE FROM RelReference";
212
		destination.setQuery(sql);
213
		destination.update(sql);
214
		//References
215
		sql = "DELETE FROM Reference";
216
		destination.setQuery(sql);
217
		destination.update(sql);
218
		return true;
219
	}
220
		
221
	
222
	/* (non-Javadoc)
223
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
224
	 */
225
	protected boolean isIgnore(BerlinModelExportState state){
226
		if (state.getConfig().getDoReferences().equals(DO_REFERENCES.ALL)){
227
			return false;
228
		}else{
229
			return true;
230
		}
231
	}
232
	
233
	//called by MethodMapper
234
	@SuppressWarnings("unused")
235
	private static Integer getRefCategoryFk(Reference<?> ref){
236
		return BerlinModelTransformer.ref2refCategoryId(ref);
237
	}
238
	
239
	//called by MethodMapper
240
	@SuppressWarnings("unused")
241
	private static String getRefCache(Reference<?> ref){
242
		if (ref.isProtectedTitleCache()){
243
			return ref.getTitleCache();
244
		}else{
245
			return null;
246
		}
247
	}
248

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

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

    
270
	//called by MethodMapper
271
	@SuppressWarnings("unused")
272
	private static String getNomTitleAbbrev(Reference<?> ref){
273
		
274
		if (/*ref.isNomenclaturallyRelevant() &&*/ ref.getTitle() != null && ref.getTitle().length() <=80){
275
			return ref.getTitle();
276
		}else{
277
			return null;
278
		}
279
	}
280

    
281
	
282
	
283
	//called by MethodMapper
284
	@SuppressWarnings("unused")
285
	private static String getRefAuthorString(Reference<?> ref){
286
		if (ref == null){
287
			return null;
288
		}else{
289
			return (ref.getAuthorTeam() == null)? null: ref.getAuthorTeam().getTitleCache();
290
		}
291
	}
292

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

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

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