ref #9359, ref #10072 adapt app-import to log4j2 and cleanup
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / berlinModel / in / validation / BerlinModelReferenceImportValidator.java
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.logging.log4j.LogManager;
18 import org.apache.logging.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 * @since 17.02.2010
29 */
30 public class BerlinModelReferenceImportValidator implements IOValidator<BerlinModelImportState> {
31
32 private static final Logger logger = LogManager.getLogger();
33
34 public boolean validate(BerlinModelImportState state, BerlinModelReferenceImport refImport){
35 boolean result = true;
36 BerlinModelImportConfigurator config = state.getConfig();
37 result &= checkArticlesWithoutJournal(config);
38 result &= checkPartOfJournal(config);
39 result &= checkPartOfUnresolved(config);
40 result &= checkPartOfPartOf(config);
41 result &= checkPartOfArticle(config);
42 result &= checkJournalsWithSeries(config);
43 result &= checkObligatoryAttributes(config, refImport);
44 result &= checkPartOfWithVolume(config);
45 result &= checkArticleWithEdition(config);
46
47 if (result == false ){System.out.println("========================================================");}
48
49 return result;
50 }
51
52 //******************************** CHECK *************************************************
53
54 private static boolean checkArticlesWithoutJournal(BerlinModelImportConfigurator config){
55 try {
56 boolean result = true;
57 Source source = config.getSource();
58 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 " +
59 " 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 " +
60 " WHERE (Reference.RefCategoryFk = 1) AND (InRef.RefCategoryFk <> 9) ";
61 if (StringUtils.isNotBlank(config.getReferenceIdTable())){
62 strQuery += String.format(" AND (reference.refId IN " +
63 " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ;
64 }
65
66 ResultSet rs = source.getResultSet(strQuery);
67 boolean firstRow = true;
68 while (rs.next()){
69 if (firstRow){
70 System.out.println("========================================================");
71 System.out.println("There are Articles with wrong inRef type!");
72 System.out.println("========================================================");
73 }
74 int refId = rs.getInt("RefId");
75 //int categoryFk = resulSetarticlesWithoutJournal.getInt("RefCategoryFk");
76 String cat = rs.getString("RefCategoryAbbrev");
77 int inRefFk = rs.getInt("InRefId");
78 //int inRefCategoryFk = resulSetarticlesWithoutJournal.getInt("InRefCatFk");
79 String inRefCat = rs.getString("InRefCat");
80 String refCache = rs.getString("RefCache");
81 String nomRefCache = rs.getString("nomRefCache");
82 String title = rs.getString("title");
83 String inRefTitle = rs.getString("InRefTitle");
84
85 System.out.println("RefID:" + refId + "\n cat: " + cat +
86 "\n refCache: " + refCache + "\n nomRefCache: " + nomRefCache + "\n title: " + title +
87 "\n inRefFk: " + inRefFk + "\n inRefCategory: " + inRefCat +
88 "\n inRefTitle: " + inRefTitle );
89 result = firstRow = false;
90 }
91
92 return result;
93 } catch (SQLException e) {
94 e.printStackTrace();
95 return false;
96 }
97 }
98
99 private static boolean checkPartOfJournal(BerlinModelImportConfigurator config){
100 try {
101 boolean result = true;
102 Source source = config.getSource();
103 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 " +
104 " 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 " +
105 " WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 9) ";
106
107 if (StringUtils.isNotBlank(config.getReferenceIdTable())){
108 strQuery += String.format(" AND (reference.refId IN " +
109 " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ;
110 }
111
112 ResultSet rs = source.getResultSet(strQuery);
113 boolean firstRow = true;
114 while (rs.next()){
115 if (firstRow){
116 System.out.println("========================================================");
117 System.out.println("There are part-of-references that have a Journal as in-reference!");
118 System.out.println("========================================================");
119 }
120 int refId = rs.getInt("RefId");
121 //int categoryFk = rs.getInt("RefCategoryFk");
122 String cat = rs.getString("RefCategoryAbbrev");
123 int inRefFk = rs.getInt("InRefId");
124 //int inRefCategoryFk = rs.getInt("InRefCatFk");
125 String inRefCat = rs.getString("InRefCat");
126 String refCache = rs.getString("RefCache");
127 String nomRefCache = rs.getString("nomRefCache");
128 String title = rs.getString("title");
129 String inRefTitle = rs.getString("InRefTitle");
130
131 System.out.println("RefID:" + refId + "\n cat: " + cat +
132 "\n refCache: " + refCache + "\n nomRefCache: " + nomRefCache + "\n title: " + title +
133 "\n inRefFk: " + inRefFk + "\n inRefCategory: " + inRefCat +
134 "\n inRefTitle: " + inRefTitle );
135 result = firstRow = false;
136 }
137
138 return result;
139 } catch (SQLException e) {
140 e.printStackTrace();
141 return false;
142 }
143 }
144
145 private static boolean checkPartOfUnresolved(BerlinModelImportConfigurator config){
146 try {
147 boolean result = true;
148 Source source = config.getSource();
149 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 " +
150 " 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 " +
151 " WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 10) ";
152
153 if (StringUtils.isNotBlank(config.getReferenceIdTable())){
154 strQuery += String.format(" AND (reference.refId IN " +
155 " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ;
156 }
157
158 ResultSet rs = source.getResultSet(strQuery);
159 boolean firstRow = true;
160 while (rs.next()){
161 if (firstRow){
162 System.out.println("========================================================");
163 System.out.println("There are part-of-references that have an 'unresolved' in-reference!");
164 System.out.println("========================================================");
165 }
166 int refId = rs.getInt("RefId");
167 //int categoryFk = rs.getInt("RefCategoryFk");
168 String cat = rs.getString("RefCategoryAbbrev");
169 int inRefFk = rs.getInt("InRefId");
170 //int inRefCategoryFk = rs.getInt("InRefCatFk");
171 String inRefCat = rs.getString("InRefCat");
172 String refCache = rs.getString("RefCache");
173 String nomRefCache = rs.getString("nomRefCache");
174 String title = rs.getString("title");
175 String inRefTitle = rs.getString("InRefTitle");
176
177 System.out.println("RefID:" + refId + "\n cat: " + cat +
178 "\n refCache: " + refCache + "\n nomRefCache: " + nomRefCache + "\n title: " + title +
179 "\n inRefFk: " + inRefFk + "\n inRefCategory: " + inRefCat +
180 "\n inRefTitle: " + inRefTitle );
181 result = firstRow = false;
182 }
183 if (result == false){
184 System.out.println("\nChoose a specific type from the following reference types: \n" +
185 " 1) Article \n 2) Book \n 3) BookSection \n 4) CdDvd \n 5) ConferenceProceeding \n 6) Database\n" +
186 " 7) Generic \n 7) InProceedings \n 8) Journal \n 9) Map \n 10) Patent \n 11) PersonalCommunication\n" +
187 " 12) PrintSeries \n 13) Proceedings \n 14) Report \n 15) Thesis \n 16) WebPage");
188 }
189 return result;
190 } catch (SQLException e) {
191 e.printStackTrace();
192 return false;
193 }
194 }
195
196 private static boolean checkPartOfPartOf(BerlinModelImportConfigurator config){
197 try {
198 boolean result = true;
199 Source source = config.getSource();
200 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 " +
201 " FROM Reference " +
202 " INNER JOIN Reference AS InRef ON Reference.InRefFk = InRef.RefId " +
203 " INNER JOIN RefCategory ON Reference.RefCategoryFk = RefCategory.RefCategoryId " +
204 " INNER JOIN RefCategory AS InRefCategory ON InRef.RefCategoryFk = InRefCategory.RefCategoryId " +
205 " INNER JOIN Reference AS InInRef ON InRef.InRefFk = InInRef.RefId " +
206 " WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 2) ";
207
208 if (StringUtils.isNotBlank(config.getReferenceIdTable())){
209 strQuery += String.format(" AND (reference.refId IN " +
210 " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ;
211 }
212
213 ResultSet rs = source.getResultSet(strQuery);
214 boolean firstRow = true;
215 while (rs.next()){
216 if (firstRow){
217 System.out.println("========================================================");
218 System.out.println("There are part-of-references that are part of an other 'part-of' reference!\n" +
219 " This is invalid or ambigous. Please try to determine the reference types more detailed ");
220 System.out.println("========================================================");
221 }
222 int refId = rs.getInt("RefId");
223 //int categoryFk = rs.getInt("RefCategoryFk");
224 String cat = rs.getString("RefCategoryAbbrev");
225 int inRefFk = rs.getInt("InRefId");
226 //int inRefCategoryFk = rs.getInt("InRefCatFk");
227 String inRefCat = rs.getString("InRefCat");
228 String refCache = rs.getString("RefCache");
229 String nomRefCache = rs.getString("nomRefCache");
230 String title = rs.getString("title");
231 String inRefTitle = rs.getString("InRefTitle");
232 int inInRefId = rs.getInt("InInRefId");
233 String inInRefTitle = rs.getString("inInRefTitle");
234 int inInRefCategory = rs.getInt("inInRefCategory");
235
236 System.out.println("RefID:" + refId + "\n cat: " + cat +
237 "\n refCache: " + refCache + "\n nomRefCache: " + nomRefCache + "\n title: " + title +
238 "\n inRefFk: " + inRefFk + "\n inRefCategory: " + inRefCat +
239 "\n inRefTitle: " + inRefTitle + "\n inInRefId: " + inInRefId + "\n inInRefTitle: " + inInRefTitle +
240 "\n inInRefCategory: " + inInRefCategory );
241 result = firstRow = false;
242 }
243 if (result == false){
244 System.out.println("\nChoose a specific type from the following reference types: \n" +
245 " 1) BookSection - Book - PrintSeries \n" +
246 " 2) InProceedings - pProceedings - PrintSeries");
247 }
248 return result;
249 } catch (SQLException e) {
250 e.printStackTrace();
251 return false;
252 }
253 }
254
255
256 private static boolean checkPartOfArticle(BerlinModelImportConfigurator config){
257 try {
258 boolean result = true;
259 Source source = config.getSource();
260 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, " +
261 " InInRefCategory.RefCategoryAbbrev AS InInRefCat, InInRef.refCache AS inInRefCache, InInRef.nomRefCache AS inInRefNomRefCache " +
262 " FROM Reference r " +
263 " INNER JOIN Reference AS InRef ON r.InRefFk = InRef.RefId " +
264 " INNER JOIN Reference AS InInRef ON InRef.InRefFk = InInRef.RefId " +
265 " INNER JOIN RefCategory ON r.RefCategoryFk = RefCategory.RefCategoryId " +
266 " INNER JOIN RefCategory AS InRefCategory ON InRef.RefCategoryFk = InRefCategory.RefCategoryId " +
267 " INNER JOIN RefCategory AS InInRefCategory ON InInRef.RefCategoryFk = InInRefCategory.RefCategoryId " +
268 " WHERE (r.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 1) ";
269
270 if (StringUtils.isNotBlank(config.getReferenceIdTable())){
271 strQuery += String.format(" AND (r.refId IN " +
272 " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ;
273 }
274 if (config.isEuroMed()){
275 strQuery += " AND r.RefId NOT IN (6187, 10269, 26613) ";
276 }
277
278 ResultSet rs = source.getResultSet(strQuery);
279 boolean firstRow = true;
280 while (rs.next()){
281 if (firstRow){
282 System.out.println("========================================================");
283 System.out.println("There are part-of-references that have an article as in-reference! " +
284 " This is not necessarily wrong if the article is part of journal.");
285 System.out.println("========================================================");
286 }
287 int refId = rs.getInt("RefId");
288 //int categoryFk = rs.getInt("RefCategoryFk");
289 String cat = rs.getString("RefCategoryAbbrev");
290 int inRefFk = rs.getInt("InRefId");
291 //int inRefCategoryFk = rs.getInt("InRefCatFk");
292 String inRefCat = rs.getString("InRefCat");
293 String refCache = rs.getString("RefCache");
294 String nomRefCache = rs.getString("nomRefCache");
295 String title = rs.getString("title");
296 String nomTitleAbbrev = rs.getString("nomTitleAbbrev");
297 String inRefTitle = rs.getString("InRefTitle");
298 String inRefnomTitleAbbrev = rs.getString("inRefnomTitleAbbrev");
299 String inRefnomRefCache = rs.getString("inRefnomRefCache");
300 String inRefCache = rs.getString("inRefCache");
301 String inInRefCat = rs.getString("inInRefCat");
302 String inInRefCache = rs.getString("inInRefCache");
303 String inInRefNomRefCache = rs.getString("inInRefNomRefCache");
304
305
306 System.out.println("RefID:" + refId + "\n cat: " + cat +
307 "\n refCache: " + refCache + "\n nomRefCache: " + nomRefCache + "\n title: " + title + "\n titleAbbrev: " + nomTitleAbbrev +
308 "\n inRefFk: " + inRefFk + "\n inRefCategory: " + inRefCat +
309 "\n inRefTitle: " + inRefTitle + "\n inRefTitleAbbrev: " + inRefnomTitleAbbrev +
310 "\n inRefnomRefCache: " + inRefnomRefCache + "\n inRefCache: " + inRefCache +
311 "\n inInRefCat: " + inInRefCat + "\n inInRefCache: " + inInRefCache +
312 "\n inInRefNomRefCache: " + inInRefNomRefCache
313
314 );
315 result = firstRow = false;
316 }
317
318 return result;
319 } catch (SQLException e) {
320 e.printStackTrace();
321 return false;
322 }
323 }
324
325 private static boolean checkJournalsWithSeries(BerlinModelImportConfigurator config){
326 try {
327 boolean result = true;
328 Source source = config.getSource();
329 String strQuery = "SELECT Reference.RefId, Reference.RefCategoryFk, Reference.RefCache, Reference.NomRefCache, Reference.Title, Reference.NomTitleAbbrev, Reference.Series, RefCategory.RefCategoryAbbrev " +
330 " FROM Reference INNER JOIN " +
331 " RefCategory ON Reference.RefCategoryFk = RefCategory.RefCategoryId " +
332 " WHERE (Reference.RefCategoryFk = 9) AND ( Reference.series is not null AND Reference.series <>'') ";
333
334 if (StringUtils.isNotBlank(config.getReferenceIdTable())){
335 strQuery += String.format(" AND (reference.refId IN " +
336 " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ;
337 }
338
339 ResultSet rs = source.getResultSet(strQuery);
340 boolean firstRow = true;
341 while (rs.next()){
342 if (firstRow){
343 System.out.println("========================================================");
344 System.out.println("There are Journals with series! Series should be part of the according articles.");
345 System.out.println("========================================================");
346 }
347 int refId = rs.getInt("RefId");
348 //int categoryFk = rs.getInt("RefCategoryFk");
349 String cat = rs.getString("RefCategoryAbbrev");
350 String nomRefCache = rs.getString("nomRefCache");
351 String refCache = rs.getString("refCache");
352 String title = rs.getString("title");
353 String nomTitleAbbrev = rs.getString("nomTitleAbbrev");
354 String series = rs.getString("series");
355
356 System.out.println("RefID:" + refId + "\n cat: " + cat +
357 "\n refCache: " + refCache + "\n nomRefCache: " + nomRefCache +
358 "\n title: " + title + "\n nomTitleAbbrev: " + nomTitleAbbrev +
359 "\n series: " + series );
360 result = firstRow = false;
361 }
362
363 return result;
364 } catch (SQLException e) {
365 e.printStackTrace();
366 return false;
367 }
368 }
369
370 private static boolean checkPartOfWithVolume(BerlinModelImportConfigurator config){
371 try {
372 boolean result = true;
373 Source source = config.getSource();
374 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" +
375 " FROM Reference AS Ref " +
376 " INNER JOIN RefCategory ON Ref.RefCategoryFk = RefCategory.RefCategoryId " +
377 " LEFT OUTER JOIN Reference AS InRef ON Ref.InRefFk = InRef.RefId " +
378 " WHERE (Ref.RefCategoryFk = 2) AND ((Ref.Volume IS NOT NULL) OR (Ref.Series IS NOT NULL) OR (Ref.Edition IS NOT NULL)) " ;
379
380 if (StringUtils.isNotBlank(config.getReferenceIdTable())){
381 strQuery += String.format(" AND (Ref.refId IN " +
382 " (SELECT refId FROM %s ))" , config.getReferenceIdTable()) ;
383 }
384
385 ResultSet rs = source.getResultSet(strQuery);
386 boolean firstRow = true;
387 while (rs.next()){
388 if (firstRow){
389 System.out.println("========================================================");
390 System.out.println("There are PartOfOtherTitles with volumes, editions or series !");
391 System.out.println("========================================================");
392 }
393 int refId = rs.getInt("refId");
394 String cat = rs.getString("refCategoryAbbrev");
395 String nomRefCache = rs.getString("nomRefCache");
396 String refCache = rs.getString("refCache");
397 String title = rs.getString("title");
398 String nomTitleAbbrev = rs.getString("nomTitleAbbrev");
399 String volume = rs.getString("volume");
400 String edition = rs.getString("edition");
401 String series = rs.getString("series");
402 String inRefRefCache = rs.getString("inRefRefCache");
403 String inRefNomRefCache = rs.getString("inRefNomRefCache");
404 int inRefId = rs.getInt("inRefId");
405 String inRefVolume = rs.getString("inRefVol");
406 String inRefSeries = rs.getString("inRefSeries");
407 String inRefEdition = rs.getString("inRefEdition");
408
409 System.out.println("RefID:" + refId + "\n cat: " + cat +
410 "\n refCache: " + refCache + "\n nomRefCache: " + nomRefCache +
411 "\n title: " + title + "\n nomTitleAbbrev: " + nomTitleAbbrev + "\n volume: " + volume + "\n series: " + series +"\n edition: " + edition +
412 "\n inRef-ID:" + inRefId + "\n inRef-cache: " + inRefRefCache +
413 "\n inRef-nomCache: " + inRefNomRefCache + "\n inRef-volume: " + inRefVolume +"\n inRef-series: " + inRefSeries +"\n inRef-edition: " + inRefEdition +
414 "" );
415 result = firstRow = false;
416 }
417
418 return result;
419 } catch (SQLException e) {
420 e.printStackTrace();
421 return false;
422 }
423 }
424
425 private static boolean checkArticleWithEdition(BerlinModelImportConfigurator config){
426 try {
427 boolean result = true;
428 Source source = config.getSource();
429 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" +
430 " FROM Reference AS Ref " +
431 " INNER JOIN RefCategory ON Ref.RefCategoryFk = RefCategory.RefCategoryId " +
432 " LEFT OUTER JOIN Reference AS InRef ON Ref.InRefFk = InRef.RefId " +
433 " WHERE (Ref.RefCategoryFk = 1) AND (NOT (Ref.Edition IS NULL)) ";
434
435 if (StringUtils.isNotBlank(config.getReferenceIdTable())){
436 strQuery += String.format(" AND (Ref.refId IN " +
437 " (SELECT refId FROM %s )) " , config.getReferenceIdTable()) ;
438 }
439 strQuery += " ORDER BY InRef.RefId ";
440
441
442 ResultSet rs = source.getResultSet(strQuery);
443 boolean firstRow = true;
444 while (rs.next()){
445 if (firstRow){
446 System.out.println("========================================================");
447 System.out.println("There are Articles with editions !");
448 System.out.println("========================================================");
449 }
450 int refId = rs.getInt("refId");
451 String cat = rs.getString("refCategoryAbbrev");
452 String nomRefCache = rs.getString("nomRefCache");
453 String refCache = rs.getString("refCache");
454 String title = rs.getString("title");
455 String nomTitleAbbrev = rs.getString("nomTitleAbbrev");
456 String edition = rs.getString("edition");
457 String inRefRefCache = rs.getString("inRefRefCache");
458 String inRefNomRefCache = rs.getString("inRefNomRefCache");
459 int inRefId = rs.getInt("inRefId");
460 String inRefEdition = rs.getString("inRefEdition");
461
462 System.out.println("RefID:" + refId + "\n cat: " + cat +
463 "\n refCache: " + refCache + "\n nomRefCache: " + nomRefCache +
464 "\n title: " + title + "\n nomTitleAbbrev: " + nomTitleAbbrev + "\n edition: " + edition +
465 "\n inRef-ID:" + inRefId + "\n inRef-cache: " + inRefRefCache +
466 "\n inRef-nomCache: " + inRefNomRefCache + "\n inRef-edition: " + inRefEdition +
467 "" );
468 result = firstRow = false;
469 }
470
471 return result;
472 } catch (SQLException e) {
473 e.printStackTrace();
474 return false;
475 }
476 }
477
478 protected boolean checkObligatoryAttributes(BerlinModelImportConfigurator config, BerlinModelReferenceImport refImport){
479 boolean result = true;
480
481 try {
482 String strQuery = " SELECT Reference.* " +
483 " FROM Reference " +
484 // " INNER JOIN Reference ON Reference.RefId = RefDetail.RefFk " +
485 " WHERE (1=0) ";
486 Source source = config.getSource();
487 ResultSet rs = source.getResultSet(strQuery);
488 int colCount = rs.getMetaData().getColumnCount();
489 Set<String> existingAttributes = new HashSet<>();
490 for (int c = 0; c < colCount ; c++){
491 existingAttributes.add(rs.getMetaData().getColumnLabel(c+1).toLowerCase());
492 }
493 Set<String> obligatoryAttributes = refImport.getObligatoryAttributes(true, config);
494
495 obligatoryAttributes.removeAll(existingAttributes);
496 for (String attr : obligatoryAttributes){
497 System.out.println("Missing attribute: " + attr);
498 }
499
500 //additional Attributes
501 obligatoryAttributes = refImport.getObligatoryAttributes(true, config);
502
503 existingAttributes.removeAll(obligatoryAttributes);
504 for (String attr : existingAttributes){
505 System.out.println("Additional attribute: " + attr);
506 }
507 } catch (SQLException e) {
508 logger.error(e);
509 e.printStackTrace();
510 result = false;
511 }
512 return result;
513 }
514
515 protected boolean checkRefDetailUnimplementedAttributes(BerlinModelImportConfigurator config){
516 boolean result = true;
517
518 try {
519 String strQuery = " SELECT Count(*) as n" +
520 " FROM RefDetail " +
521 // " INNER JOIN Reference ON Reference.RefId = RefDetail.RefFk " +
522 " WHERE SecondarySources is not NULL AND SecondarySources <> '' ";
523 Source source = config.getSource();
524 ResultSet rs = source.getResultSet(strQuery);
525
526 rs.next();
527 int count = rs.getInt("n");
528 if (count > 0){
529 System.out.println("========================================================");
530 System.out.println("There are "+ count + " RefDetails with SecondarySources <> NULL ! Secondary sources are not yet implemented for Berlin Model Import");
531 System.out.println("========================================================");
532
533 }
534 strQuery = " SELECT Count(*) as n" +
535 " FROM RefDetail " +
536 // " INNER JOIN Reference ON Reference.RefId = RefDetail.RefFk " +
537 " WHERE IdInSource is not NULL AND IdInSource <> '' ";
538 rs = source.getResultSet(strQuery);
539
540 rs.next();
541 count = rs.getInt("n");
542 if (count > 0){
543 System.out.println("========================================================");
544 System.out.println("There are "+ count + " RefDetails with IdInSource <> NULL ! IdInSource are not yet implemented for Berlin Model Import");
545 System.out.println("========================================================");
546
547 }
548
549 } catch (SQLException e) {
550 logger.error(e);
551 e.printStackTrace();
552 result = false;
553 }
554 return result;
555 }
556
557 @Override
558 @Deprecated //use validate(state, import) instead
559 public boolean validate(BerlinModelImportState state) {
560 logger.warn("BerlinModelReferenceImport uses wrong validation method");
561 return false;
562 }
563 }