Project

General

Profile

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

    
10
package eu.etaxonomy.cdm.io.berlinModel.in.validation;
11

    
12
import java.sql.ResultSet;
13
import java.sql.SQLException;
14
import java.util.HashSet;
15
import java.util.Set;
16

    
17
import org.apache.commons.lang.StringUtils;
18
import org.apache.log4j.Logger;
19

    
20
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
21
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState;
22
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelReferenceImport;
23
import eu.etaxonomy.cdm.io.common.IOValidator;
24
import eu.etaxonomy.cdm.io.common.Source;
25

    
26
/**
27
 * @author a.mueller
28
 * @created 17.02.2010
29
 */
30
public class BerlinModelReferenceImportValidator implements IOValidator<BerlinModelImportState> {
31
	private static final Logger logger = Logger.getLogger(BerlinModelReferenceImportValidator.class);
32

    
33
	public boolean validate(BerlinModelImportState state, BerlinModelReferenceImport refImport){
34
		boolean result = true;
35
		BerlinModelImportConfigurator config = state.getConfig();
36
		result &= checkArticlesWithoutJournal(config);
37
		result &= checkPartOfJournal(config);
38
		result &= checkPartOfUnresolved(config);
39
		result &= checkPartOfPartOf(config);
40
		result &= checkPartOfArticle(config);
41
		result &= checkJournalsWithSeries(config);
42
		result &= checkObligatoryAttributes(config, refImport);
43
		result &= checkPartOfWithVolume(config);
44
		result &= checkArticleWithEdition(config);
45
		
46
		if (result == false ){System.out.println("========================================================");}
47
		
48
		return result;
49
		
50
	}
51
	
52
	
53
	//******************************** CHECK *************************************************
54
		
55
		private static boolean checkArticlesWithoutJournal(BerlinModelImportConfigurator config){
56
			try {
57
				boolean result = true;
58
				Source source = config.getSource();
59
				String strQuery = "SELECT Reference.RefId, InRef.RefId AS InRefID, Reference.RefCategoryFk, InRef.RefCategoryFk AS InRefCatFk, Reference.RefCache, Reference.NomRefCache, Reference.Title, RefCategory.RefCategoryAbbrev, InRefCategory.RefCategoryAbbrev AS InRefCat, InRef.Title AS InRefTitle " + 
60
							" FROM Reference INNER JOIN Reference AS InRef ON Reference.InRefFk = InRef.RefId INNER JOIN RefCategory ON Reference.RefCategoryFk = RefCategory.RefCategoryId INNER JOIN RefCategory AS InRefCategory ON InRef.RefCategoryFk = InRefCategory.RefCategoryId " +
61
							" WHERE (Reference.RefCategoryFk = 1) AND (InRef.RefCategoryFk <> 9) ";
62
				if (StringUtils.isNotBlank(config.getReferenceIdTable())){
63
					strQuery += String.format(" AND (reference.refId IN " +
64
	                        " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ; 
65
				}
66
				
67
				ResultSet rs = source.getResultSet(strQuery);
68
				boolean firstRow = true;
69
				while (rs.next()){
70
					if (firstRow){
71
						System.out.println("========================================================");
72
						System.out.println("There are Articles with wrong inRef type!");
73
						System.out.println("========================================================");
74
					}
75
					int refId = rs.getInt("RefId");
76
					//int categoryFk = resulSetarticlesWithoutJournal.getInt("RefCategoryFk");
77
					String cat = rs.getString("RefCategoryAbbrev");
78
					int inRefFk = rs.getInt("InRefId");
79
					//int inRefCategoryFk = resulSetarticlesWithoutJournal.getInt("InRefCatFk");
80
					String inRefCat = rs.getString("InRefCat");
81
					String refCache = rs.getString("RefCache");
82
					String nomRefCache = rs.getString("nomRefCache");
83
					String title = rs.getString("title");
84
					String inRefTitle = rs.getString("InRefTitle");
85
					
86
					System.out.println("RefID:" + refId + "\n  cat: " + cat + 
87
							"\n  refCache: " + refCache + "\n  nomRefCache: " + nomRefCache + "\n  title: " + title + 
88
							"\n  inRefFk: " + inRefFk + "\n  inRefCategory: " + inRefCat + 
89
							"\n  inRefTitle: " + inRefTitle );
90
					result = firstRow = false;
91
				}
92
				
93
				return result;
94
			} catch (SQLException e) {
95
				e.printStackTrace();
96
				return false;
97
			}
98
		}
99
		
100
		private static boolean checkPartOfJournal(BerlinModelImportConfigurator config){
101
			try {
102
				boolean result = true;
103
				Source source = config.getSource();
104
				String strQuery = "SELECT Reference.RefId, InRef.RefId AS InRefID, Reference.RefCategoryFk, InRef.RefCategoryFk AS InRefCatFk, Reference.RefCache, Reference.NomRefCache, Reference.Title, RefCategory.RefCategoryAbbrev, InRefCategory.RefCategoryAbbrev AS InRefCat, InRef.Title AS InRefTitle " + 
105
				" FROM Reference INNER JOIN Reference AS InRef ON Reference.InRefFk = InRef.RefId INNER JOIN RefCategory ON Reference.RefCategoryFk = RefCategory.RefCategoryId INNER JOIN RefCategory AS InRefCategory ON InRef.RefCategoryFk = InRefCategory.RefCategoryId " +
106
							" WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 9) ";
107

    
108
				if (StringUtils.isNotBlank(config.getReferenceIdTable())){
109
					strQuery += String.format(" AND (reference.refId IN " +
110
	                        " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ; 
111
				}
112

    
113
				
114
				ResultSet rs = source.getResultSet(strQuery);
115
				boolean firstRow = true;
116
				while (rs.next()){
117
					if (firstRow){
118
						System.out.println("========================================================");
119
						System.out.println("There are part-of-references that have a Journal as in-reference!");
120
						System.out.println("========================================================");
121
					}
122
					int refId = rs.getInt("RefId");
123
					//int categoryFk = rs.getInt("RefCategoryFk");
124
					String cat = rs.getString("RefCategoryAbbrev");
125
					int inRefFk = rs.getInt("InRefId");
126
					//int inRefCategoryFk = rs.getInt("InRefCatFk");
127
					String inRefCat = rs.getString("InRefCat");
128
					String refCache = rs.getString("RefCache");
129
					String nomRefCache = rs.getString("nomRefCache");
130
					String title = rs.getString("title");
131
					String inRefTitle = rs.getString("InRefTitle");
132
					
133
					System.out.println("RefID:" + refId + "\n  cat: " + cat + 
134
							"\n  refCache: " + refCache + "\n  nomRefCache: " + nomRefCache + "\n  title: " + title + 
135
							"\n  inRefFk: " + inRefFk + "\n  inRefCategory: " + inRefCat + 
136
							"\n  inRefTitle: " + inRefTitle );
137
					result = firstRow = false;
138
				}
139
				
140
				return result;
141
			} catch (SQLException e) {
142
				e.printStackTrace();
143
				return false;
144
			}
145
		}
146
		
147
		
148
		private static boolean checkPartOfUnresolved(BerlinModelImportConfigurator config){
149
			try {
150
				boolean result = true;
151
				Source source = config.getSource();
152
				String strQuery = "SELECT Reference.RefId, InRef.RefId AS InRefID, Reference.RefCategoryFk, InRef.RefCategoryFk AS InRefCatFk, Reference.RefCache, Reference.NomRefCache, Reference.Title, RefCategory.RefCategoryAbbrev, InRefCategory.RefCategoryAbbrev AS InRefCat, InRef.Title AS InRefTitle " + 
153
				" FROM Reference INNER JOIN Reference AS InRef ON Reference.InRefFk = InRef.RefId INNER JOIN RefCategory ON Reference.RefCategoryFk = RefCategory.RefCategoryId INNER JOIN RefCategory AS InRefCategory ON InRef.RefCategoryFk = InRefCategory.RefCategoryId " +
154
							" WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 10) ";
155
				
156
				if (StringUtils.isNotBlank(config.getReferenceIdTable())){
157
					strQuery += String.format(" AND (reference.refId IN " +
158
	                        " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ; 
159
				}
160

    
161
				ResultSet rs = source.getResultSet(strQuery);
162
				boolean firstRow = true;
163
				while (rs.next()){
164
					if (firstRow){
165
						System.out.println("========================================================");
166
						System.out.println("There are part-of-references that have an 'unresolved' in-reference!");
167
						System.out.println("========================================================");
168
					}
169
					int refId = rs.getInt("RefId");
170
					//int categoryFk = rs.getInt("RefCategoryFk");
171
					String cat = rs.getString("RefCategoryAbbrev");
172
					int inRefFk = rs.getInt("InRefId");
173
					//int inRefCategoryFk = rs.getInt("InRefCatFk");
174
					String inRefCat = rs.getString("InRefCat");
175
					String refCache = rs.getString("RefCache");
176
					String nomRefCache = rs.getString("nomRefCache");
177
					String title = rs.getString("title");
178
					String inRefTitle = rs.getString("InRefTitle");
179
					
180
					System.out.println("RefID:" + refId + "\n  cat: " + cat + 
181
							"\n  refCache: " + refCache + "\n  nomRefCache: " + nomRefCache + "\n  title: " + title + 
182
							"\n  inRefFk: " + inRefFk + "\n  inRefCategory: " + inRefCat + 
183
							"\n  inRefTitle: " + inRefTitle );
184
					result = firstRow = false;
185
				}
186
				if (result == false){
187
					System.out.println("\nChoose a specific type from the following reference types: \n" +
188
							"  1) Article \n  2) Book \n  3) BookSection \n  4) CdDvd \n  5) ConferenceProceeding \n  6) Database\n" + 
189
							"  7) Generic \n  7) InProceedings \n  8) Journal \n  9) Map \n 10) Patent \n 11) PersonalCommunication\n" +
190
							" 12) PrintSeries \n 13) Proceedings \n 14) Report \n 15) Thesis \n 16) WebPage");
191
				}
192
				return result;
193
			} catch (SQLException e) {
194
				e.printStackTrace();
195
				return false;
196
			}
197
		}
198
		
199
		private static boolean checkPartOfPartOf(BerlinModelImportConfigurator config){
200
			try {
201
				boolean result = true;
202
				Source source = config.getSource();
203
				String strQuery = "SELECT Reference.RefId, InRef.RefId AS InRefID, Reference.RefCategoryFk, InRef.RefCategoryFk AS InRefCatFk, Reference.RefCache, Reference.NomRefCache, Reference.Title, RefCategory.RefCategoryAbbrev, InRefCategory.RefCategoryAbbrev AS InRefCat, InRef.Title AS InRefTitle, InRef.InRefFk as InInRefId, InInRef.Title as inInRefTitle, InInRef.RefCategoryFk as inInRefCategory " + 
204
							" FROM Reference " +
205
								" INNER JOIN Reference AS InRef ON Reference.InRefFk = InRef.RefId " + 
206
								" INNER JOIN RefCategory ON Reference.RefCategoryFk = RefCategory.RefCategoryId " + 
207
								" INNER JOIN RefCategory AS InRefCategory ON InRef.RefCategoryFk = InRefCategory.RefCategoryId " +
208
								" INNER JOIN Reference AS InInRef ON InRef.InRefFk = InInRef.RefId " + 
209
							" WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 2) ";
210
				
211
				if (StringUtils.isNotBlank(config.getReferenceIdTable())){
212
					strQuery += String.format(" AND (reference.refId IN " +
213
	                        " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ; 
214
				}
215

    
216
				ResultSet rs = source.getResultSet(strQuery);
217
				boolean firstRow = true;
218
				while (rs.next()){
219
					if (firstRow){
220
						System.out.println("========================================================");
221
						System.out.println("There are part-of-references that are part of an other 'part-of' reference!\n" + 
222
								"         This is invalid or ambigous. Please try to determine the reference types more detailed ");
223
						System.out.println("========================================================");
224
					}
225
					int refId = rs.getInt("RefId");
226
					//int categoryFk = rs.getInt("RefCategoryFk");
227
					String cat = rs.getString("RefCategoryAbbrev");
228
					int inRefFk = rs.getInt("InRefId");
229
					//int inRefCategoryFk = rs.getInt("InRefCatFk");
230
					String inRefCat = rs.getString("InRefCat");
231
					String refCache = rs.getString("RefCache");
232
					String nomRefCache = rs.getString("nomRefCache");
233
					String title = rs.getString("title");
234
					String inRefTitle = rs.getString("InRefTitle");
235
					int inInRefId = rs.getInt("InInRefId");
236
					String inInRefTitle = rs.getString("inInRefTitle");
237
					int inInRefCategory = rs.getInt("inInRefCategory");
238
					
239
					System.out.println("RefID:" + refId + "\n  cat: " + cat + 
240
							"\n  refCache: " + refCache + "\n  nomRefCache: " + nomRefCache + "\n  title: " + title + 
241
							"\n  inRefFk: " + inRefFk + "\n  inRefCategory: " + inRefCat + 
242
							"\n  inRefTitle: " + inRefTitle + "\n  inInRefId: " + inInRefId + "\n  inInRefTitle: " + inInRefTitle +
243
							"\n  inInRefCategory: " + inInRefCategory );
244
					result = firstRow = false;
245
				}
246
				if (result == false){
247
					System.out.println("\nChoose a specific type from the following reference types: \n" +
248
							"  1) BookSection - Book - PrintSeries \n" +
249
							"  2) InProceedings - pProceedings  - PrintSeries");
250
				}
251
				return result;
252
			} catch (SQLException e) {
253
				e.printStackTrace();
254
				return false;
255
			}
256
		}
257

    
258
		
259
		private static boolean checkPartOfArticle(BerlinModelImportConfigurator config){
260
			try {
261
				boolean result = true;
262
				Source source = config.getSource();
263
				String strQuery = "SELECT Reference.RefId, InRef.RefId AS InRefID, Reference.RefCategoryFk, InRef.RefCategoryFk AS InRefCatFk, Reference.RefCache, Reference.NomRefCache, Reference.Title, Reference.NomTitleAbbrev as nomTitleAbbrev, RefCategory.RefCategoryAbbrev, InRefCategory.RefCategoryAbbrev AS InRefCat, InRef.Title AS InRefTitle, InRef.nomTitleAbbrev AS inRefnomTitleAbbrev, InRef.refCache AS inRefCache, InRef.nomRefCache AS inRefnomRefCache, " +
264
						"	InInRefCategory.RefCategoryAbbrev AS InInRefCat, InInRef.refCache AS inInRefCache, InInRef.nomRefCache AS inInRefNomRefCache	" + 
265
						" FROM Reference " + 
266
							" INNER JOIN Reference AS InRef ON Reference.InRefFk = InRef.RefId " +
267
						    " INNER JOIN Reference AS InInRef ON InRef.InRefFk = InInRef.RefId " +
268
							" INNER JOIN RefCategory ON Reference.RefCategoryFk = RefCategory.RefCategoryId " +
269
						    " INNER JOIN RefCategory AS InRefCategory ON InRef.RefCategoryFk = InRefCategory.RefCategoryId " +
270
						    " INNER JOIN RefCategory AS InInRefCategory ON InInRef.RefCategoryFk = InInRefCategory.RefCategoryId " +
271
						" WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 1) ";
272
				
273
				if (StringUtils.isNotBlank(config.getReferenceIdTable())){
274
					strQuery += String.format(" AND (reference.refId IN " +
275
	                        " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ; 
276
				}
277
				ResultSet rs = source.getResultSet(strQuery);
278
				boolean firstRow = true;
279
				while (rs.next()){
280
					if (firstRow){
281
						System.out.println("========================================================");
282
						System.out.println("There are part-of-references that have an article as in-reference! " +
283
								" This is not necessarily wrong if the article is part of journal.");
284
						System.out.println("========================================================");
285
					}
286
					int refId = rs.getInt("RefId");
287
					//int categoryFk = rs.getInt("RefCategoryFk");
288
					String cat = rs.getString("RefCategoryAbbrev");
289
					int inRefFk = rs.getInt("InRefId");
290
					//int inRefCategoryFk = rs.getInt("InRefCatFk");
291
					String inRefCat = rs.getString("InRefCat");
292
					String refCache = rs.getString("RefCache");
293
					String nomRefCache = rs.getString("nomRefCache");
294
					String title = rs.getString("title");
295
					String nomTitleAbbrev = rs.getString("nomTitleAbbrev");
296
					String inRefTitle = rs.getString("InRefTitle");
297
					String inRefnomTitleAbbrev = rs.getString("inRefnomTitleAbbrev");
298
					String inRefnomRefCache = rs.getString("inRefnomRefCache");
299
					String inRefCache = rs.getString("inRefCache");
300
					String inInRefCat = rs.getString("inInRefCat");
301
					String inInRefCache = rs.getString("inInRefCache");
302
					String inInRefNomRefCache = rs.getString("inInRefNomRefCache");
303
					
304
					
305
					System.out.println("RefID:" + refId + "\n  cat: " + cat + 
306
							"\n  refCache: " + refCache + "\n  nomRefCache: " + nomRefCache + "\n  title: " + title + "\n  titleAbbrev: " + nomTitleAbbrev + 
307
							"\n  inRefFk: " + inRefFk + "\n  inRefCategory: " + inRefCat + 
308
							"\n  inRefTitle: " + inRefTitle + "\n  inRefTitleAbbrev: " + inRefnomTitleAbbrev +
309
							"\n  inRefnomRefCache: " + inRefnomRefCache + "\n  inRefCache: " + inRefCache +
310
							"\n  inInRefCat: " + inInRefCat + "\n  inInRefCache: " + inInRefCache +
311
							"\n  inInRefNomRefCache: " + inInRefNomRefCache 
312
							
313
							);
314
					result = firstRow = false;
315
				}
316
				
317
				return result;
318
			} catch (SQLException e) {
319
				e.printStackTrace();
320
				return false;
321
			}
322
		}
323
		
324
		private static boolean checkJournalsWithSeries(BerlinModelImportConfigurator config){
325
			try {
326
				boolean result = true;
327
				Source source = config.getSource();
328
				String strQuery = "SELECT Reference.RefId, Reference.RefCategoryFk, Reference.RefCache, Reference.NomRefCache, Reference.Title, Reference.NomTitleAbbrev, Reference.Series, RefCategory.RefCategoryAbbrev  " + 
329
							" FROM Reference INNER JOIN " +
330
									" RefCategory ON Reference.RefCategoryFk = RefCategory.RefCategoryId  " +
331
							" WHERE (Reference.RefCategoryFk = 9)  AND ( Reference.series is not null AND Reference.series <>'') ";
332
				
333
				if (StringUtils.isNotBlank(config.getReferenceIdTable())){
334
					strQuery += String.format(" AND (reference.refId IN " +
335
	                        " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ; 
336
				}
337
				
338
				ResultSet rs = source.getResultSet(strQuery);
339
				boolean firstRow = true;
340
				while (rs.next()){
341
					if (firstRow){
342
						System.out.println("========================================================");
343
						System.out.println("There are Journals with series! Series should be part of the according articles.");
344
						System.out.println("========================================================");
345
					}
346
					int refId = rs.getInt("RefId");
347
					//int categoryFk = rs.getInt("RefCategoryFk");
348
					String cat = rs.getString("RefCategoryAbbrev");
349
					String nomRefCache = rs.getString("nomRefCache");
350
					String refCache = rs.getString("refCache");
351
					String title = rs.getString("title");
352
					String nomTitleAbbrev = rs.getString("nomTitleAbbrev");
353
					String series = rs.getString("series");
354
					
355
					System.out.println("RefID:" + refId + "\n  cat: " + cat + 
356
							"\n  refCache: " + refCache + "\n  nomRefCache: " + nomRefCache + 
357
							"\n  title: " + title +  "\n  nomTitleAbbrev: " + nomTitleAbbrev +
358
							"\n  series: " + series );
359
					result = firstRow = false;
360
				}
361
				
362
				return result;
363
			} catch (SQLException e) {
364
				e.printStackTrace();
365
				return false;
366
			}
367
		}
368
		
369
		private static boolean checkPartOfWithVolume(BerlinModelImportConfigurator config){
370
			try {
371
				boolean result = true;
372
				Source source = config.getSource();
373
				String strQuery = "SELECT Ref.RefId as refId, RefCategory.RefCategoryAbbrev as refCategoryAbbrev, Ref.nomRefCache as nomRefCache, Ref.refCache as refCache,Ref.volume as volume, Ref.Series as series, Ref.Edition as edition, Ref.title as title, Ref.nomTitleAbbrev as nomTitleAbbrev,InRef.RefCache as inRefRefCache, InRef.NomRefCache  as inRefNomRefCache, InRef.RefId as inRefId, InRef.Volume as inRefVol, InRef.Series as inRefSeries, InRef.Edition as inRefEdition" +
374
						" FROM Reference AS Ref " + 
375
						 	" INNER JOIN RefCategory ON Ref.RefCategoryFk = RefCategory.RefCategoryId " +
376
						 	"  LEFT OUTER JOIN Reference AS InRef ON Ref.InRefFk = InRef.RefId " +
377
						" WHERE (Ref.RefCategoryFk = 2) AND ((Ref.Volume IS NOT NULL) OR (Ref.Series IS NOT NULL) OR (Ref.Edition IS NOT NULL)) " ; 
378
				
379
				if (StringUtils.isNotBlank(config.getReferenceIdTable())){
380
					strQuery += String.format(" AND (Ref.refId IN " +
381
	                        " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ; 
382
				}
383
				
384
				ResultSet rs = source.getResultSet(strQuery);
385
				boolean firstRow = true;
386
				while (rs.next()){
387
					if (firstRow){
388
						System.out.println("========================================================");
389
						System.out.println("There are PartOfOtherTitles with volumes, editions or series !");
390
						System.out.println("========================================================");
391
					}
392
					int refId = rs.getInt("refId");
393
					String cat = rs.getString("refCategoryAbbrev");
394
					String nomRefCache = rs.getString("nomRefCache");
395
					String refCache = rs.getString("refCache");
396
					String title = rs.getString("title");
397
					String nomTitleAbbrev = rs.getString("nomTitleAbbrev");
398
					String volume = rs.getString("volume");
399
					String edition = rs.getString("edition");
400
					String series = rs.getString("series");
401
					String inRefRefCache = rs.getString("inRefRefCache");
402
					String inRefNomRefCache = rs.getString("inRefNomRefCache");
403
					int inRefId = rs.getInt("inRefId");
404
					String inRefVolume = rs.getString("inRefVol");
405
					String inRefSeries = rs.getString("inRefSeries");
406
					String inRefEdition = rs.getString("inRefEdition");
407
					
408
					System.out.println("RefID:" + refId + "\n  cat: " + cat + 
409
							"\n  refCache: " + refCache + "\n  nomRefCache: " + nomRefCache + 
410
							"\n  title: " + title +  "\n  nomTitleAbbrev: " + nomTitleAbbrev + "\n  volume: " + volume + "\n  series: " + series +"\n  edition: " + edition +
411
							"\n  inRef-ID:" + inRefId + "\n  inRef-cache: " + inRefRefCache +  
412
							"\n  inRef-nomCache: " + inRefNomRefCache + "\n  inRef-volume: " + inRefVolume +"\n  inRef-series: " + inRefSeries +"\n  inRef-edition: " + inRefEdition +
413
							"" );
414
					result = firstRow = false;
415
				}
416
				
417
				return result;
418
			} catch (SQLException e) {
419
				e.printStackTrace();
420
				return false;
421
			}
422
		}
423
		
424
		private static boolean checkArticleWithEdition(BerlinModelImportConfigurator config){
425
			try {
426
				boolean result = true;
427
				Source source = config.getSource();
428
				String strQuery = "SELECT Ref.RefId as refId, RefCategory.RefCategoryAbbrev as refCategoryAbbrev, Ref.nomRefCache as nomRefCache, Ref.refCache as refCache,Ref.edition as edition, Ref.title as title, Ref.nomTitleAbbrev as nomTitleAbbrev,InRef.RefCache as inRefRefCache, InRef.NomRefCache  as inRefNomRefCache, InRef.RefId as inRefId, InRef.Edition as inRefEdition" +
429
						" FROM Reference AS Ref " + 
430
						 	" INNER JOIN RefCategory ON Ref.RefCategoryFk = RefCategory.RefCategoryId " +
431
						 	"  LEFT OUTER JOIN Reference AS InRef ON Ref.InRefFk = InRef.RefId " +
432
						" WHERE (Ref.RefCategoryFk = 1) AND (NOT (Ref.Edition IS NULL))  ";
433
				
434
				if (StringUtils.isNotBlank(config.getReferenceIdTable())){
435
					strQuery += String.format(" AND (Ref.refId IN " +
436
	                        " (SELECT refId FROM %s )) " , config.getReferenceIdTable()) ; 
437
				}
438
				strQuery += " ORDER BY InRef.RefId ";
439
				
440
				
441
				ResultSet rs = source.getResultSet(strQuery);
442
				boolean firstRow = true;
443
				while (rs.next()){
444
					if (firstRow){
445
						System.out.println("========================================================");
446
						System.out.println("There are Articles with editions !");
447
						System.out.println("========================================================");
448
					}
449
					int refId = rs.getInt("refId");
450
					String cat = rs.getString("refCategoryAbbrev");
451
					String nomRefCache = rs.getString("nomRefCache");
452
					String refCache = rs.getString("refCache");
453
					String title = rs.getString("title");
454
					String nomTitleAbbrev = rs.getString("nomTitleAbbrev");
455
					String edition = rs.getString("edition");
456
					String inRefRefCache = rs.getString("inRefRefCache");
457
					String inRefNomRefCache = rs.getString("inRefNomRefCache");
458
					int inRefId = rs.getInt("inRefId");
459
					String inRefEdition = rs.getString("inRefEdition");
460
					
461
					System.out.println("RefID:" + refId + "\n  cat: " + cat + 
462
							"\n  refCache: " + refCache + "\n  nomRefCache: " + nomRefCache + 
463
							"\n  title: " + title +  "\n  nomTitleAbbrev: " + nomTitleAbbrev + "\n  edition: " + edition + 
464
							"\n  inRef-ID:" + inRefId + "\n  inRef-cache: " + inRefRefCache +  
465
							"\n  inRef-nomCache: " + inRefNomRefCache + "\n  inRef-edition: " + inRefEdition +
466
							"" );
467
					result = firstRow = false;
468
				}
469
				
470
				return result;
471
			} catch (SQLException e) {
472
				e.printStackTrace();
473
				return false;
474
			}
475
		}
476
		
477
		protected boolean checkObligatoryAttributes(BerlinModelImportConfigurator config, BerlinModelReferenceImport refImport){
478
			boolean result = true;
479
			
480
			try {
481
				String strQuery = " SELECT Reference.* " +
482
				    " FROM Reference " +
483
//	            	" INNER JOIN Reference ON Reference.RefId = RefDetail.RefFk " +
484
				    " WHERE (1=0) ";
485
				Source source = config.getSource();
486
				ResultSet rs = source.getResultSet(strQuery);
487
				int colCount = rs.getMetaData().getColumnCount();
488
				Set<String> existingAttributes = new HashSet<String>();
489
				for (int c = 0; c < colCount ; c++){
490
					existingAttributes.add(rs.getMetaData().getColumnLabel(c+1).toLowerCase());
491
				}
492
				Set<String> obligatoryAttributes = refImport.getObligatoryAttributes(true, config);
493
				
494
				obligatoryAttributes.removeAll(existingAttributes);
495
				for (String attr : obligatoryAttributes){
496
					System.out.println("Missing attribute: " + attr);
497
				}
498
				
499
				//additional Attributes
500
				obligatoryAttributes = refImport.getObligatoryAttributes(true, config);
501
				
502
				existingAttributes.removeAll(obligatoryAttributes);
503
				for (String attr : existingAttributes){
504
					System.out.println("Additional attribute: " + attr);
505
				}
506
			} catch (SQLException e) {
507
				logger.error(e);
508
				e.printStackTrace();
509
				result = false;
510
			}
511
			return result;
512
		}
513

    
514
		protected boolean checkRefDetailUnimplementedAttributes(BerlinModelImportConfigurator config){
515
			boolean result = true;
516
			
517
			try {
518
				String strQuery = " SELECT Count(*) as n" +
519
				    " FROM RefDetail " +
520
//	            	" INNER JOIN Reference ON Reference.RefId = RefDetail.RefFk " +
521
				    " WHERE SecondarySources is not NULL AND SecondarySources <> '' ";
522
				Source source = config.getSource();
523
				ResultSet rs = source.getResultSet(strQuery);
524
				
525
				rs.next();
526
				int count = rs.getInt("n");
527
				if (count > 0){
528
					System.out.println("========================================================");
529
					System.out.println("There are "+ count + " RefDetails with SecondarySources <> NULL ! Secondary sources are not yet implemented for Berlin Model Import");
530
					System.out.println("========================================================");
531
					
532
				}
533
				strQuery = " SELECT Count(*) as n" +
534
				    " FROM RefDetail " +
535
//		            	" INNER JOIN Reference ON Reference.RefId = RefDetail.RefFk " +
536
				    " WHERE IdInSource is not NULL AND IdInSource <> '' ";
537
				rs = source.getResultSet(strQuery);
538
				
539
				rs.next();
540
				count = rs.getInt("n");
541
				if (count > 0){
542
					System.out.println("========================================================");
543
					System.out.println("There are "+ count + " RefDetails with IdInSource <> NULL ! IdInSource are not yet implemented for Berlin Model Import");
544
					System.out.println("========================================================");
545
					
546
				}
547
				
548
			} catch (SQLException e) {
549
				logger.error(e);
550
				e.printStackTrace();
551
				result = false;
552
			}
553
			return result;
554
		}
555

    
556

    
557
		/* (non-Javadoc)
558
		 * @see eu.etaxonomy.cdm.io.common.IOValidator#validate(eu.etaxonomy.cdm.io.common.IoStateBase)
559
		 */
560
		@Deprecated  //use validate(state, import) instead
561
		public boolean validate(BerlinModelImportState state) {
562
			logger.warn("BerlinModelReferenceImport uses wrong validation method");
563
			return false;
564
		}
565

    
566

    
567

    
568
}
(11-11/19)