Project

General

Profile

Download (26.8 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.in.validation;
10

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

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

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

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

    
32
	public boolean validate(BerlinModelImportState state, BerlinModelReferenceImport refImport){
33
		boolean result = true;
34
		BerlinModelImportConfigurator config = state.getConfig();
35
		result &= checkArticlesWithoutJournal(config);
36
		result &= checkPartOfJournal(config);
37
		result &= checkPartOfUnresolved(config);
38
		result &= checkPartOfPartOf(config);
39
		result &= checkPartOfArticle(config);
40
		result &= checkJournalsWithSeries(config);
41
		result &= checkObligatoryAttributes(config, refImport);
42
		result &= checkPartOfWithVolume(config);
43
		result &= checkArticleWithEdition(config);
44

    
45
		if (result == false ){System.out.println("========================================================");}
46

    
47
		return result;
48
	}
49

    
50
	//******************************** CHECK *************************************************
51

    
52
		private static boolean checkArticlesWithoutJournal(BerlinModelImportConfigurator config){
53
			try {
54
				boolean result = true;
55
				Source source = config.getSource();
56
				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 " +
57
							" 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 " +
58
							" WHERE (Reference.RefCategoryFk = 1) AND (InRef.RefCategoryFk <> 9) ";
59
				if (StringUtils.isNotBlank(config.getReferenceIdTable())){
60
					strQuery += String.format(" AND (reference.refId IN " +
61
	                        " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ;
62
				}
63

    
64
				ResultSet rs = source.getResultSet(strQuery);
65
				boolean firstRow = true;
66
				while (rs.next()){
67
					if (firstRow){
68
						System.out.println("========================================================");
69
						System.out.println("There are Articles with wrong inRef type!");
70
						System.out.println("========================================================");
71
					}
72
					int refId = rs.getInt("RefId");
73
					//int categoryFk = resulSetarticlesWithoutJournal.getInt("RefCategoryFk");
74
					String cat = rs.getString("RefCategoryAbbrev");
75
					int inRefFk = rs.getInt("InRefId");
76
					//int inRefCategoryFk = resulSetarticlesWithoutJournal.getInt("InRefCatFk");
77
					String inRefCat = rs.getString("InRefCat");
78
					String refCache = rs.getString("RefCache");
79
					String nomRefCache = rs.getString("nomRefCache");
80
					String title = rs.getString("title");
81
					String inRefTitle = rs.getString("InRefTitle");
82

    
83
					System.out.println("RefID:" + refId + "\n  cat: " + cat +
84
							"\n  refCache: " + refCache + "\n  nomRefCache: " + nomRefCache + "\n  title: " + title +
85
							"\n  inRefFk: " + inRefFk + "\n  inRefCategory: " + inRefCat +
86
							"\n  inRefTitle: " + inRefTitle );
87
					result = firstRow = false;
88
				}
89

    
90
				return result;
91
			} catch (SQLException e) {
92
				e.printStackTrace();
93
				return false;
94
			}
95
		}
96

    
97
		private static boolean checkPartOfJournal(BerlinModelImportConfigurator config){
98
			try {
99
				boolean result = true;
100
				Source source = config.getSource();
101
				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 " +
102
				" 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 " +
103
							" WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 9) ";
104

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

    
110
				ResultSet rs = source.getResultSet(strQuery);
111
				boolean firstRow = true;
112
				while (rs.next()){
113
					if (firstRow){
114
						System.out.println("========================================================");
115
						System.out.println("There are part-of-references that have a Journal as in-reference!");
116
						System.out.println("========================================================");
117
					}
118
					int refId = rs.getInt("RefId");
119
					//int categoryFk = rs.getInt("RefCategoryFk");
120
					String cat = rs.getString("RefCategoryAbbrev");
121
					int inRefFk = rs.getInt("InRefId");
122
					//int inRefCategoryFk = rs.getInt("InRefCatFk");
123
					String inRefCat = rs.getString("InRefCat");
124
					String refCache = rs.getString("RefCache");
125
					String nomRefCache = rs.getString("nomRefCache");
126
					String title = rs.getString("title");
127
					String inRefTitle = rs.getString("InRefTitle");
128

    
129
					System.out.println("RefID:" + refId + "\n  cat: " + cat +
130
							"\n  refCache: " + refCache + "\n  nomRefCache: " + nomRefCache + "\n  title: " + title +
131
							"\n  inRefFk: " + inRefFk + "\n  inRefCategory: " + inRefCat +
132
							"\n  inRefTitle: " + inRefTitle );
133
					result = firstRow = false;
134
				}
135

    
136
				return result;
137
			} catch (SQLException e) {
138
				e.printStackTrace();
139
				return false;
140
			}
141
		}
142

    
143
		private static boolean checkPartOfUnresolved(BerlinModelImportConfigurator config){
144
			try {
145
				boolean result = true;
146
				Source source = config.getSource();
147
				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 " +
148
				" 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 " +
149
							" WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 10) ";
150

    
151
				if (StringUtils.isNotBlank(config.getReferenceIdTable())){
152
					strQuery += String.format(" AND (reference.refId IN " +
153
	                        " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ;
154
				}
155

    
156
				ResultSet rs = source.getResultSet(strQuery);
157
				boolean firstRow = true;
158
				while (rs.next()){
159
					if (firstRow){
160
						System.out.println("========================================================");
161
						System.out.println("There are part-of-references that have an 'unresolved' in-reference!");
162
						System.out.println("========================================================");
163
					}
164
					int refId = rs.getInt("RefId");
165
					//int categoryFk = rs.getInt("RefCategoryFk");
166
					String cat = rs.getString("RefCategoryAbbrev");
167
					int inRefFk = rs.getInt("InRefId");
168
					//int inRefCategoryFk = rs.getInt("InRefCatFk");
169
					String inRefCat = rs.getString("InRefCat");
170
					String refCache = rs.getString("RefCache");
171
					String nomRefCache = rs.getString("nomRefCache");
172
					String title = rs.getString("title");
173
					String inRefTitle = rs.getString("InRefTitle");
174

    
175
					System.out.println("RefID:" + refId + "\n  cat: " + cat +
176
							"\n  refCache: " + refCache + "\n  nomRefCache: " + nomRefCache + "\n  title: " + title +
177
							"\n  inRefFk: " + inRefFk + "\n  inRefCategory: " + inRefCat +
178
							"\n  inRefTitle: " + inRefTitle );
179
					result = firstRow = false;
180
				}
181
				if (result == false){
182
					System.out.println("\nChoose a specific type from the following reference types: \n" +
183
							"  1) Article \n  2) Book \n  3) BookSection \n  4) CdDvd \n  5) ConferenceProceeding \n  6) Database\n" +
184
							"  7) Generic \n  7) InProceedings \n  8) Journal \n  9) Map \n 10) Patent \n 11) PersonalCommunication\n" +
185
							" 12) PrintSeries \n 13) Proceedings \n 14) Report \n 15) Thesis \n 16) WebPage");
186
				}
187
				return result;
188
			} catch (SQLException e) {
189
				e.printStackTrace();
190
				return false;
191
			}
192
		}
193

    
194
		private static boolean checkPartOfPartOf(BerlinModelImportConfigurator config){
195
			try {
196
				boolean result = true;
197
				Source source = config.getSource();
198
				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 " +
199
							" FROM Reference " +
200
								" INNER JOIN Reference AS InRef ON Reference.InRefFk = InRef.RefId " +
201
								" INNER JOIN RefCategory ON Reference.RefCategoryFk = RefCategory.RefCategoryId " +
202
								" INNER JOIN RefCategory AS InRefCategory ON InRef.RefCategoryFk = InRefCategory.RefCategoryId " +
203
								" INNER JOIN Reference AS InInRef ON InRef.InRefFk = InInRef.RefId " +
204
							" WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 2) ";
205

    
206
				if (StringUtils.isNotBlank(config.getReferenceIdTable())){
207
					strQuery += String.format(" AND (reference.refId IN " +
208
	                        " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ;
209
				}
210

    
211
				ResultSet rs = source.getResultSet(strQuery);
212
				boolean firstRow = true;
213
				while (rs.next()){
214
					if (firstRow){
215
						System.out.println("========================================================");
216
						System.out.println("There are part-of-references that are part of an other 'part-of' reference!\n" +
217
								"         This is invalid or ambigous. Please try to determine the reference types more detailed ");
218
						System.out.println("========================================================");
219
					}
220
					int refId = rs.getInt("RefId");
221
					//int categoryFk = rs.getInt("RefCategoryFk");
222
					String cat = rs.getString("RefCategoryAbbrev");
223
					int inRefFk = rs.getInt("InRefId");
224
					//int inRefCategoryFk = rs.getInt("InRefCatFk");
225
					String inRefCat = rs.getString("InRefCat");
226
					String refCache = rs.getString("RefCache");
227
					String nomRefCache = rs.getString("nomRefCache");
228
					String title = rs.getString("title");
229
					String inRefTitle = rs.getString("InRefTitle");
230
					int inInRefId = rs.getInt("InInRefId");
231
					String inInRefTitle = rs.getString("inInRefTitle");
232
					int inInRefCategory = rs.getInt("inInRefCategory");
233

    
234
					System.out.println("RefID:" + refId + "\n  cat: " + cat +
235
							"\n  refCache: " + refCache + "\n  nomRefCache: " + nomRefCache + "\n  title: " + title +
236
							"\n  inRefFk: " + inRefFk + "\n  inRefCategory: " + inRefCat +
237
							"\n  inRefTitle: " + inRefTitle + "\n  inInRefId: " + inInRefId + "\n  inInRefTitle: " + inInRefTitle +
238
							"\n  inInRefCategory: " + inInRefCategory );
239
					result = firstRow = false;
240
				}
241
				if (result == false){
242
					System.out.println("\nChoose a specific type from the following reference types: \n" +
243
							"  1) BookSection - Book - PrintSeries \n" +
244
							"  2) InProceedings - pProceedings  - PrintSeries");
245
				}
246
				return result;
247
			} catch (SQLException e) {
248
				e.printStackTrace();
249
				return false;
250
			}
251
		}
252

    
253

    
254
		private static boolean checkPartOfArticle(BerlinModelImportConfigurator config){
255
			try {
256
				boolean result = true;
257
				Source source = config.getSource();
258
				String strQuery = "SELECT r.RefId, InRef.RefId AS InRefID, r.RefCategoryFk, InRef.RefCategoryFk AS InRefCatFk, r.RefCache, r.NomRefCache, r.Title, r.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, " +
259
						"	InInRefCategory.RefCategoryAbbrev AS InInRefCat, InInRef.refCache AS inInRefCache, InInRef.nomRefCache AS inInRefNomRefCache	" +
260
						" FROM Reference r " +
261
							" INNER JOIN Reference AS InRef ON r.InRefFk = InRef.RefId " +
262
						    " INNER JOIN Reference AS InInRef ON InRef.InRefFk = InInRef.RefId " +
263
							" INNER JOIN RefCategory ON r.RefCategoryFk = RefCategory.RefCategoryId " +
264
						    " INNER JOIN RefCategory AS InRefCategory ON InRef.RefCategoryFk = InRefCategory.RefCategoryId " +
265
						    " INNER JOIN RefCategory AS InInRefCategory ON InInRef.RefCategoryFk = InInRefCategory.RefCategoryId " +
266
						" WHERE (r.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 1) ";
267

    
268
				if (StringUtils.isNotBlank(config.getReferenceIdTable())){
269
					strQuery += String.format(" AND (r.refId IN " +
270
	                        " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ;
271
				}
272
				if (config.isEuroMed()){
273
				    strQuery += " AND r.RefId NOT IN (6187, 10269, 26613) ";
274
				}
275

    
276
				ResultSet rs = source.getResultSet(strQuery);
277
				boolean firstRow = true;
278
				while (rs.next()){
279
					if (firstRow){
280
						System.out.println("========================================================");
281
						System.out.println("There are part-of-references that have an article as in-reference! " +
282
								" This is not necessarily wrong if the article is part of journal.");
283
						System.out.println("========================================================");
284
					}
285
					int refId = rs.getInt("RefId");
286
					//int categoryFk = rs.getInt("RefCategoryFk");
287
					String cat = rs.getString("RefCategoryAbbrev");
288
					int inRefFk = rs.getInt("InRefId");
289
					//int inRefCategoryFk = rs.getInt("InRefCatFk");
290
					String inRefCat = rs.getString("InRefCat");
291
					String refCache = rs.getString("RefCache");
292
					String nomRefCache = rs.getString("nomRefCache");
293
					String title = rs.getString("title");
294
					String nomTitleAbbrev = rs.getString("nomTitleAbbrev");
295
					String inRefTitle = rs.getString("InRefTitle");
296
					String inRefnomTitleAbbrev = rs.getString("inRefnomTitleAbbrev");
297
					String inRefnomRefCache = rs.getString("inRefnomRefCache");
298
					String inRefCache = rs.getString("inRefCache");
299
					String inInRefCat = rs.getString("inInRefCat");
300
					String inInRefCache = rs.getString("inInRefCache");
301
					String inInRefNomRefCache = rs.getString("inInRefNomRefCache");
302

    
303

    
304
					System.out.println("RefID:" + refId + "\n  cat: " + cat +
305
							"\n  refCache: " + refCache + "\n  nomRefCache: " + nomRefCache + "\n  title: " + title + "\n  titleAbbrev: " + nomTitleAbbrev +
306
							"\n  inRefFk: " + inRefFk + "\n  inRefCategory: " + inRefCat +
307
							"\n  inRefTitle: " + inRefTitle + "\n  inRefTitleAbbrev: " + inRefnomTitleAbbrev +
308
							"\n  inRefnomRefCache: " + inRefnomRefCache + "\n  inRefCache: " + inRefCache +
309
							"\n  inInRefCat: " + inInRefCat + "\n  inInRefCache: " + inInRefCache +
310
							"\n  inInRefNomRefCache: " + inInRefNomRefCache
311

    
312
							);
313
					result = firstRow = false;
314
				}
315

    
316
				return result;
317
			} catch (SQLException e) {
318
				e.printStackTrace();
319
				return false;
320
			}
321
		}
322

    
323
		private static boolean checkJournalsWithSeries(BerlinModelImportConfigurator config){
324
			try {
325
				boolean result = true;
326
				Source source = config.getSource();
327
				String strQuery = "SELECT Reference.RefId, Reference.RefCategoryFk, Reference.RefCache, Reference.NomRefCache, Reference.Title, Reference.NomTitleAbbrev, Reference.Series, RefCategory.RefCategoryAbbrev  " +
328
							" FROM Reference INNER JOIN " +
329
									" RefCategory ON Reference.RefCategoryFk = RefCategory.RefCategoryId  " +
330
							" WHERE (Reference.RefCategoryFk = 9)  AND ( Reference.series is not null AND Reference.series <>'') ";
331

    
332
				if (StringUtils.isNotBlank(config.getReferenceIdTable())){
333
					strQuery += String.format(" AND (reference.refId IN " +
334
	                        " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ;
335
				}
336

    
337
				ResultSet rs = source.getResultSet(strQuery);
338
				boolean firstRow = true;
339
				while (rs.next()){
340
					if (firstRow){
341
						System.out.println("========================================================");
342
						System.out.println("There are Journals with series! Series should be part of the according articles.");
343
						System.out.println("========================================================");
344
					}
345
					int refId = rs.getInt("RefId");
346
					//int categoryFk = rs.getInt("RefCategoryFk");
347
					String cat = rs.getString("RefCategoryAbbrev");
348
					String nomRefCache = rs.getString("nomRefCache");
349
					String refCache = rs.getString("refCache");
350
					String title = rs.getString("title");
351
					String nomTitleAbbrev = rs.getString("nomTitleAbbrev");
352
					String series = rs.getString("series");
353

    
354
					System.out.println("RefID:" + refId + "\n  cat: " + cat +
355
							"\n  refCache: " + refCache + "\n  nomRefCache: " + nomRefCache +
356
							"\n  title: " + title +  "\n  nomTitleAbbrev: " + nomTitleAbbrev +
357
							"\n  series: " + series );
358
					result = firstRow = false;
359
				}
360

    
361
				return result;
362
			} catch (SQLException e) {
363
				e.printStackTrace();
364
				return false;
365
			}
366
		}
367

    
368
		private static boolean checkPartOfWithVolume(BerlinModelImportConfigurator config){
369
			try {
370
				boolean result = true;
371
				Source source = config.getSource();
372
				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" +
373
						" FROM Reference AS Ref " +
374
						 	" INNER JOIN RefCategory ON Ref.RefCategoryFk = RefCategory.RefCategoryId " +
375
						 	"  LEFT OUTER JOIN Reference AS InRef ON Ref.InRefFk = InRef.RefId " +
376
						" WHERE (Ref.RefCategoryFk = 2) AND ((Ref.Volume IS NOT NULL) OR (Ref.Series IS NOT NULL) OR (Ref.Edition IS NOT NULL)) " ;
377

    
378
				if (StringUtils.isNotBlank(config.getReferenceIdTable())){
379
					strQuery += String.format(" AND (Ref.refId IN " +
380
	                        " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ;
381
				}
382

    
383
				ResultSet rs = source.getResultSet(strQuery);
384
				boolean firstRow = true;
385
				while (rs.next()){
386
					if (firstRow){
387
						System.out.println("========================================================");
388
						System.out.println("There are PartOfOtherTitles with volumes, editions or series !");
389
						System.out.println("========================================================");
390
					}
391
					int refId = rs.getInt("refId");
392
					String cat = rs.getString("refCategoryAbbrev");
393
					String nomRefCache = rs.getString("nomRefCache");
394
					String refCache = rs.getString("refCache");
395
					String title = rs.getString("title");
396
					String nomTitleAbbrev = rs.getString("nomTitleAbbrev");
397
					String volume = rs.getString("volume");
398
					String edition = rs.getString("edition");
399
					String series = rs.getString("series");
400
					String inRefRefCache = rs.getString("inRefRefCache");
401
					String inRefNomRefCache = rs.getString("inRefNomRefCache");
402
					int inRefId = rs.getInt("inRefId");
403
					String inRefVolume = rs.getString("inRefVol");
404
					String inRefSeries = rs.getString("inRefSeries");
405
					String inRefEdition = rs.getString("inRefEdition");
406

    
407
					System.out.println("RefID:" + refId + "\n  cat: " + cat +
408
							"\n  refCache: " + refCache + "\n  nomRefCache: " + nomRefCache +
409
							"\n  title: " + title +  "\n  nomTitleAbbrev: " + nomTitleAbbrev + "\n  volume: " + volume + "\n  series: " + series +"\n  edition: " + edition +
410
							"\n  inRef-ID:" + inRefId + "\n  inRef-cache: " + inRefRefCache +
411
							"\n  inRef-nomCache: " + inRefNomRefCache + "\n  inRef-volume: " + inRefVolume +"\n  inRef-series: " + inRefSeries +"\n  inRef-edition: " + inRefEdition +
412
							"" );
413
					result = firstRow = false;
414
				}
415

    
416
				return result;
417
			} catch (SQLException e) {
418
				e.printStackTrace();
419
				return false;
420
			}
421
		}
422

    
423
		private static boolean checkArticleWithEdition(BerlinModelImportConfigurator config){
424
			try {
425
				boolean result = true;
426
				Source source = config.getSource();
427
				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" +
428
						" FROM Reference AS Ref " +
429
						 	" INNER JOIN RefCategory ON Ref.RefCategoryFk = RefCategory.RefCategoryId " +
430
						 	"  LEFT OUTER JOIN Reference AS InRef ON Ref.InRefFk = InRef.RefId " +
431
						" WHERE (Ref.RefCategoryFk = 1) AND (NOT (Ref.Edition IS NULL))  ";
432

    
433
				if (StringUtils.isNotBlank(config.getReferenceIdTable())){
434
					strQuery += String.format(" AND (Ref.refId IN " +
435
	                        " (SELECT refId FROM %s )) " , config.getReferenceIdTable()) ;
436
				}
437
				strQuery += " ORDER BY InRef.RefId ";
438

    
439

    
440
				ResultSet rs = source.getResultSet(strQuery);
441
				boolean firstRow = true;
442
				while (rs.next()){
443
					if (firstRow){
444
						System.out.println("========================================================");
445
						System.out.println("There are Articles with editions !");
446
						System.out.println("========================================================");
447
					}
448
					int refId = rs.getInt("refId");
449
					String cat = rs.getString("refCategoryAbbrev");
450
					String nomRefCache = rs.getString("nomRefCache");
451
					String refCache = rs.getString("refCache");
452
					String title = rs.getString("title");
453
					String nomTitleAbbrev = rs.getString("nomTitleAbbrev");
454
					String edition = rs.getString("edition");
455
					String inRefRefCache = rs.getString("inRefRefCache");
456
					String inRefNomRefCache = rs.getString("inRefNomRefCache");
457
					int inRefId = rs.getInt("inRefId");
458
					String inRefEdition = rs.getString("inRefEdition");
459

    
460
					System.out.println("RefID:" + refId + "\n  cat: " + cat +
461
							"\n  refCache: " + refCache + "\n  nomRefCache: " + nomRefCache +
462
							"\n  title: " + title +  "\n  nomTitleAbbrev: " + nomTitleAbbrev + "\n  edition: " + edition +
463
							"\n  inRef-ID:" + inRefId + "\n  inRef-cache: " + inRefRefCache +
464
							"\n  inRef-nomCache: " + inRefNomRefCache + "\n  inRef-edition: " + inRefEdition +
465
							"" );
466
					result = firstRow = false;
467
				}
468

    
469
				return result;
470
			} catch (SQLException e) {
471
				e.printStackTrace();
472
				return false;
473
			}
474
		}
475

    
476
		protected boolean checkObligatoryAttributes(BerlinModelImportConfigurator config, BerlinModelReferenceImport refImport){
477
			boolean result = true;
478

    
479
			try {
480
				String strQuery = " SELECT Reference.* " +
481
				    " FROM Reference " +
482
//	            	" INNER JOIN Reference ON Reference.RefId = RefDetail.RefFk " +
483
				    " WHERE (1=0) ";
484
				Source source = config.getSource();
485
				ResultSet rs = source.getResultSet(strQuery);
486
				int colCount = rs.getMetaData().getColumnCount();
487
				Set<String> existingAttributes = new HashSet<>();
488
				for (int c = 0; c < colCount ; c++){
489
					existingAttributes.add(rs.getMetaData().getColumnLabel(c+1).toLowerCase());
490
				}
491
				Set<String> obligatoryAttributes = refImport.getObligatoryAttributes(true, config);
492

    
493
				obligatoryAttributes.removeAll(existingAttributes);
494
				for (String attr : obligatoryAttributes){
495
					System.out.println("Missing attribute: " + attr);
496
				}
497

    
498
				//additional Attributes
499
				obligatoryAttributes = refImport.getObligatoryAttributes(true, config);
500

    
501
				existingAttributes.removeAll(obligatoryAttributes);
502
				for (String attr : existingAttributes){
503
					System.out.println("Additional attribute: " + attr);
504
				}
505
			} catch (SQLException e) {
506
				logger.error(e);
507
				e.printStackTrace();
508
				result = false;
509
			}
510
			return result;
511
		}
512

    
513
		protected boolean checkRefDetailUnimplementedAttributes(BerlinModelImportConfigurator config){
514
			boolean result = true;
515

    
516
			try {
517
				String strQuery = " SELECT Count(*) as n" +
518
				    " FROM RefDetail " +
519
//	            	" INNER JOIN Reference ON Reference.RefId = RefDetail.RefFk " +
520
				    " WHERE SecondarySources is not NULL AND SecondarySources <> '' ";
521
				Source source = config.getSource();
522
				ResultSet rs = source.getResultSet(strQuery);
523

    
524
				rs.next();
525
				int count = rs.getInt("n");
526
				if (count > 0){
527
					System.out.println("========================================================");
528
					System.out.println("There are "+ count + " RefDetails with SecondarySources <> NULL ! Secondary sources are not yet implemented for Berlin Model Import");
529
					System.out.println("========================================================");
530

    
531
				}
532
				strQuery = " SELECT Count(*) as n" +
533
				    " FROM RefDetail " +
534
//		            	" INNER JOIN Reference ON Reference.RefId = RefDetail.RefFk " +
535
				    " WHERE IdInSource is not NULL AND IdInSource <> '' ";
536
				rs = source.getResultSet(strQuery);
537

    
538
				rs.next();
539
				count = rs.getInt("n");
540
				if (count > 0){
541
					System.out.println("========================================================");
542
					System.out.println("There are "+ count + " RefDetails with IdInSource <> NULL ! IdInSource are not yet implemented for Berlin Model Import");
543
					System.out.println("========================================================");
544

    
545
				}
546

    
547
			} catch (SQLException e) {
548
				logger.error(e);
549
				e.printStackTrace();
550
				result = false;
551
			}
552
			return result;
553
		}
554

    
555
		@Override
556
        @Deprecated  //use validate(state, import) instead
557
		public boolean validate(BerlinModelImportState state) {
558
			logger.warn("BerlinModelReferenceImport uses wrong validation method");
559
			return false;
560
		}
561
}
(12-12/20)