2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.cdm
.io
.berlinModel
.in
;
12 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.REF_ARTICLE
;
13 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.REF_BOOK
;
14 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.REF_CONFERENCE_PROCEEDINGS
;
15 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.REF_DATABASE
;
16 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.REF_INFORMAL
;
17 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.REF_JOURNAL
;
18 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.REF_JOURNAL_VOLUME
;
19 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.REF_PART_OF_OTHER_TITLE
;
20 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.REF_PRINT_SERIES
;
21 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.REF_UNKNOWN
;
22 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.REF_WEBSITE
;
23 import static eu
.etaxonomy
.cdm
.io
.common
.IImportConfigurator
.DO_REFERENCES
.ALL
;
24 import static eu
.etaxonomy
.cdm
.io
.common
.IImportConfigurator
.DO_REFERENCES
.CONCEPT_REFERENCES
;
25 import static eu
.etaxonomy
.cdm
.io
.common
.IImportConfigurator
.DO_REFERENCES
.NOMENCLATURAL
;
26 import static eu
.etaxonomy
.cdm
.io
.common
.ImportHelper
.NO_OVERWRITE
;
27 import static eu
.etaxonomy
.cdm
.io
.common
.ImportHelper
.OBLIGATORY
;
28 import static eu
.etaxonomy
.cdm
.io
.common
.ImportHelper
.OVERWRITE
;
30 import java
.sql
.ResultSet
;
31 import java
.sql
.SQLException
;
32 import java
.util
.ArrayList
;
33 import java
.util
.Arrays
;
34 import java
.util
.Collection
;
35 import java
.util
.HashSet
;
36 import java
.util
.Iterator
;
37 import java
.util
.List
;
40 import java
.util
.UUID
;
42 import org
.apache
.log4j
.Logger
;
43 import org
.springframework
.stereotype
.Component
;
45 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
46 import eu
.etaxonomy
.cdm
.io
.berlinModel
.CdmExtensionMapper
;
47 import eu
.etaxonomy
.cdm
.io
.berlinModel
.CdmOneToManyMapper
;
48 import eu
.etaxonomy
.cdm
.io
.berlinModel
.CdmStringMapper
;
49 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.CdmAttributeMapperBase
;
50 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.CdmIoMapping
;
51 import eu
.etaxonomy
.cdm
.io
.common
.ICdmIO
;
52 import eu
.etaxonomy
.cdm
.io
.common
.IImportConfigurator
;
53 import eu
.etaxonomy
.cdm
.io
.common
.ImportHelper
;
54 import eu
.etaxonomy
.cdm
.io
.common
.MapWrapper
;
55 import eu
.etaxonomy
.cdm
.io
.common
.Source
;
56 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.CdmSingleAttributeMapperBase
;
57 import eu
.etaxonomy
.cdm
.model
.agent
.Team
;
58 import eu
.etaxonomy
.cdm
.model
.agent
.TeamOrPersonBase
;
59 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
60 import eu
.etaxonomy
.cdm
.model
.common
.ExtensionType
;
61 import eu
.etaxonomy
.cdm
.model
.common
.IdentifiableSource
;
62 import eu
.etaxonomy
.cdm
.model
.common
.Marker
;
63 import eu
.etaxonomy
.cdm
.model
.common
.MarkerType
;
64 /*import eu.etaxonomy.cdm.model.reference.Article;
65 import eu.etaxonomy.cdm.model.reference.Book;
66 import eu.etaxonomy.cdm.model.reference.BookSection;
67 import eu.etaxonomy.cdm.model.reference.Database;
68 import eu.etaxonomy.cdm.model.reference.Generic;*/
69 import eu
.etaxonomy
.cdm
.model
.reference
.IArticle
;
70 import eu
.etaxonomy
.cdm
.model
.reference
.IBook
;
71 import eu
.etaxonomy
.cdm
.model
.reference
.IBookSection
;
72 import eu
.etaxonomy
.cdm
.model
.reference
.IGeneric
;
73 import eu
.etaxonomy
.cdm
.model
.reference
.IJournal
;
74 import eu
.etaxonomy
.cdm
.model
.reference
.IPrintSeries
;
75 import eu
.etaxonomy
.cdm
.model
.reference
.IWebPage
;
76 /*import eu.etaxonomy.cdm.model.reference.Journal;
77 import eu.etaxonomy.cdm.model.reference.PrintSeries;
78 import eu.etaxonomy.cdm.model.reference.Proceedings;*/
79 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceBase
;
80 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceFactory
;
81 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceType
;
82 /*import eu.etaxonomy.cdm.model.reference.Thesis;
83 import eu.etaxonomy.cdm.model.reference.WebPage;*/
91 public class BerlinModelReferenceImport
extends BerlinModelImportBase
{
92 private static final Logger logger
= Logger
.getLogger(BerlinModelReferenceImport
.class);
94 public static final UUID REF_DEPOSITED_AT_UUID
= UUID
.fromString("23ca88c7-ce73-41b2-8ca3-2cb22f013beb");
95 public static final UUID REF_SOURCE
= UUID
.fromString("d6432582-2216-4b08-b0db-76f6c1013141");
96 public static final UUID DATE_STRING_UUID
= UUID
.fromString("e4130eae-606e-4b0c-be4f-e93dc161be7d");
97 ReferenceFactory refFactory
;
98 private int modCount
= 1000;
100 public BerlinModelReferenceImport(){
102 refFactory
= ReferenceFactory
.newInstance();
107 protected boolean initializeMappers(BerlinModelImportState state
, String tableName
){
108 for (CdmAttributeMapperBase mapper
: classMappers
){
109 if (mapper
instanceof CdmExtensionMapper
){
110 ((CdmExtensionMapper
)mapper
).initialize(getTermService(), state
, tableName
);
116 protected static CdmAttributeMapperBase
[] classMappers
= new CdmAttributeMapperBase
[]{
117 new CdmStringMapper("edition", "edition"),
118 new CdmStringMapper("volume", "volume"),
119 new CdmStringMapper("publisher", "publisher"),
120 new CdmStringMapper("publicationTown", "placePublished"),
121 new CdmStringMapper("isbn", "isbn"),
122 new CdmStringMapper("isbn", "isbn"),
123 new CdmStringMapper("pageString", "pages"),
124 new CdmStringMapper("series", "series"),
125 new CdmStringMapper("issn", "issn"),
126 new CdmStringMapper("url", "uri"),
127 new CdmExtensionMapper("NomStandard", ExtensionType
.NOMENCLATURAL_STANDARD()),
128 new CdmExtensionMapper("DateString", DATE_STRING_UUID
, "Date String", "Date String", "dates"),
129 new CdmExtensionMapper("RefDepositedAt", REF_DEPOSITED_AT_UUID
, "RefDepositedAt", "reference is deposited at", "at"),
130 new CdmExtensionMapper("RefSource", REF_SOURCE
, "RefSource", "reference source", "source")
134 protected static String
[] operationalAttributes
= new String
[]{
135 "refId", "refCache", "nomRefCache", "preliminaryFlag", "inRefFk", "title", "nomTitleAbbrev",
136 "refAuthorString", "nomAuthorTeamFk",
137 "refCategoryFk", "thesisFlag", "informalRefCategory", "idInSource"
140 protected static String
[] createdAndNotesAttributes
= new String
[]{
141 "created_When", "updated_When", "created_Who", "updated_Who", "notes"
144 protected static String
[] unclearMappers
= new String
[]{
145 "isPaper", "exportDate",
153 //type to count the references nomReferences that have been created and saved
154 private class RefCounter
{
155 RefCounter() {nomRefCount
= 0; referenceCount
= 0;};
158 public String
toString(){return String
.valueOf(nomRefCount
) + "," +String
.valueOf(referenceCount
);};
162 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
165 protected boolean doCheck(BerlinModelImportState state
){
166 boolean result
= true;
167 BerlinModelImportConfigurator bmiConfig
= state
.getConfig();
168 result
&= checkArticlesWithoutJournal(bmiConfig
);
169 result
&= checkPartOfJournal(bmiConfig
);
170 result
&= checkPartOfUnresolved(bmiConfig
);
171 result
&= checkPartOfPartOf(bmiConfig
);
172 result
&= checkPartOfArticle(bmiConfig
);
173 result
&= checkJournalsWithSeries(bmiConfig
);
174 result
&= checkObligatoryAttributes(bmiConfig
);
175 result
&= checkPartOfWithVolume(bmiConfig
);
176 result
&= checkArticleWithEdition(bmiConfig
);
178 if (result
== false ){System
.out
.println("========================================================");}
186 private boolean doPreliminaryRefDetails(BerlinModelImportState state
, Map
<String
, MapWrapper
<?
extends CdmBase
>> stores
){
188 IImportConfigurator config
= state
.getConfig();
189 MapWrapper
<TeamOrPersonBase
> teamMap
= (MapWrapper
<TeamOrPersonBase
>)stores
.get(ICdmIO
.TEAM_STORE
);
190 MapWrapper
<ReferenceBase
> refDetailMap
= (MapWrapper
<ReferenceBase
>)stores
.get(ICdmIO
.REF_DETAIL_STORE
);
191 MapWrapper
<ReferenceBase
> nomRefDetailMap
= (MapWrapper
<ReferenceBase
>)stores
.get(ICdmIO
.NOMREF_DETAIL_STORE
);
193 BerlinModelImportConfigurator bmiConfig
= (BerlinModelImportConfigurator
)config
;
194 Source source
= bmiConfig
.getSource();
195 boolean success
= true;
196 logger
.info("start makeRefDetails ...");
199 //get data from database
201 " SELECT RefDetail.*, Reference.RefYear " +
203 " INNER JOIN Reference ON Reference.RefId = RefDetail.RefFk " +
204 " WHERE (1=1) AND (RefDetail.PreliminaryFlag = 1)";
206 ResultSet rs
= source
.getResultSet(strQuery
);
207 String namespace
= "RefDetail";
210 RefCounter refCounter
= new RefCounter();
213 if ((i
++ % modCount
) == 0 && i
!= 1 ){ logger
.info("RefDetails handled: " + (i
-1) );}
214 int refDetailId
= rs
.getInt("refDetailId");
215 String refYear
= rs
.getString("RefYear");
218 String fullNomRefCache
= rs
.getString("fullNomRefCache");
219 if (! CdmUtils
.Nz(fullNomRefCache
).trim().equals("") ){
220 ReferenceBase genericReference
= refFactory
.newGeneric();
221 genericReference
.setTitleCache(fullNomRefCache
);
222 nomRefDetailMap
.put(refDetailId
, genericReference
);
223 //refId, created, notes
224 doIdCreatedUpdatedNotes(state
, genericReference
, rs
, refDetailId
, namespace
);
226 genericReference
.setDatePublished(ImportHelper
.getDatePublished(refYear
));
227 refCounter
.nomRefCount
++;
231 String fullRefCache
= rs
.getString("fullRefCache");
232 if (! CdmUtils
.Nz(fullRefCache
).trim().equals("") &&
233 fullRefCache
.equals(fullNomRefCache
)){
234 ReferenceBase genericReference
= refFactory
.newGeneric();
235 genericReference
.setTitleCache(fullRefCache
);
236 refDetailMap
.put(refDetailId
, genericReference
);
238 //refId, created, notes
239 doIdCreatedUpdatedNotes(state
, genericReference
, rs
, refDetailId
, namespace
);
241 genericReference
.setDatePublished(ImportHelper
.getDatePublished(refYear
));
242 refCounter
.referenceCount
++;
245 //save and store in map
246 logger
.info("Save nomenclatural preliminary references (" + refCounter
.nomRefCount
+ ")");
247 Collection
<ReferenceBase
> col
= nomRefDetailMap
.objects();
248 getReferenceService().save(col
);
249 logger
.info("Save bibliographical preliminary references (" + refCounter
.referenceCount
+")");
250 getReferenceService().save(refDetailMap
.objects());
256 } catch (SQLException e
) {
257 logger
.error("SQLException:" + e
);
266 protected boolean doInvoke(BerlinModelImportState state
){
267 String teamStore
= ICdmIO
.TEAM_STORE
;
268 MapWrapper
<?
extends CdmBase
> store
= state
.getStore(teamStore
);
269 MapWrapper
<ReferenceBase
> referenceStore
= new MapWrapper
<ReferenceBase
>(null);
270 MapWrapper
<ReferenceBase
> nomRefStore
= new MapWrapper
<ReferenceBase
>(null);
272 BerlinModelImportConfigurator config
= state
.getConfig();
273 Source source
= config
.getSource();
275 boolean success
= true;
277 //preliminary RefDetails //TODO -> move to own class ?
278 doPreliminaryRefDetails(state
, state
.getStores());
280 success
&= initializeMappers(state
, "Reference");
282 logger
.info("start makeReferences ...");
285 //get data from database
286 String strQueryBase
=
287 " SELECT Reference.* , InReference.RefId as InRefId, InReference.RefCategoryFk as InRefCategoryFk, " +
288 " InInReference.RefId as InInRefId, InInReference.RefCategoryFk as InInRefCategoryFk, " +
289 " InReference.InRefFk AS InRefInRefFk, InInReference.InRefFk AS InInRefInRefFk, RefSource.RefSource " +
290 " FROM Reference AS InInReference " +
291 " RIGHT OUTER JOIN Reference AS InReference ON InInReference.RefId = InReference.InRefFk " +
292 " RIGHT OUTER JOIN Reference ON InReference.RefId = dbo.Reference.InRefFk " +
293 " LEFT OUTER JOIN RefSource ON Reference.RefSourceFk = RefSource.RefSourceId " +
295 //strQueryBase += " AND Reference.refId = 1933 " ; //7000000
296 String strQueryNoInRef
= strQueryBase
+
297 " AND (Reference.InRefFk is NULL) ";
299 String strQuery1InRef
= strQueryBase
+
300 " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NULL) ";
302 String strQuery2InRef
= strQueryBase
+
303 " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NULL) ";
305 String strQueryTesMaxRecursion
= strQueryBase
+
306 " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NOT NULL) ";
308 ResultSet testMaxRecursionResultSet
= source
.getResultSet(strQueryTesMaxRecursion
);
309 if (testMaxRecursionResultSet
.next() == true){
310 logger
.error("Maximum allowed InReference recursions exceeded in Berlin Model. Maximum recursion level is 2.");
314 if (config
.getDoReferences() == CONCEPT_REFERENCES
){
315 strQueryNoInRef
+= " AND ( Reference.refId IN ( SELECT ptRefFk FROM PTaxon) ) ";
318 List
<ResultSet
> resultSetList
= new ArrayList
<ResultSet
>();
319 resultSetList
.add(source
.getResultSet(strQueryNoInRef
));
320 if (config
.getDoReferences() == ALL
|| config
.getDoReferences() == NOMENCLATURAL
){
321 resultSetList
.add(source
.getResultSet(strQuery1InRef
));
322 resultSetList
.add(source
.getResultSet(strQuery2InRef
));
326 Iterator
<ResultSet
> resultSetListIterator
= resultSetList
.listIterator();
327 //for each resultsetlist
328 while (resultSetListIterator
.hasNext()){
330 RefCounter refCounter
= new RefCounter();
332 ResultSet rs
= resultSetListIterator
.next();
335 if ((i
++ % modCount
) == 0 && i
!= 1 ){ logger
.info("References handled: " + (i
-1) + " in round " + j
);}
337 success
&= makeSingleReferenceRecord(rs
, state
, referenceStore
, nomRefStore
, refCounter
);
340 //for the concept reference a fixed uuid may be needed -> change uuid
341 ReferenceBase
<?
> sec
= referenceStore
.get(config
.getSourceSecId());
343 sec
= nomRefStore
.get(config
.getSourceSecId());
346 sec
.setUuid(config
.getSecUuid());
347 logger
.info("SecUuid changed to: " + config
.getSecUuid());
350 //save and store in map
351 logger
.info("Save nomenclatural references (" + refCounter
.nomRefCount
+ ")");
352 getReferenceService().save(nomRefStore
.objects());
353 logger
.info("Save bibliographical references (" + refCounter
.referenceCount
+")");
354 getReferenceService().save(referenceStore
.objects());
358 logger
.info("end makeReferences ..." + getSuccessString(success
));;
360 } catch (SQLException e
) {
361 logger
.error("SQLException:" + e
);
367 private boolean makeSingleReferenceRecord(ResultSet rs
, BerlinModelImportState state
, MapWrapper
<ReferenceBase
> referenceStore
, MapWrapper
<ReferenceBase
> nomRefStore
, RefCounter refCounter
){
368 boolean success
= true;
369 String namespace
= "Reference";
370 String teamStore
= ICdmIO
.TEAM_STORE
;
371 MapWrapper
<?
extends CdmBase
> store
= state
.getStore(teamStore
);
372 MapWrapper
<TeamOrPersonBase
> teamMap
= (MapWrapper
<TeamOrPersonBase
>)store
;
374 Integer refId
= null;
376 Map
<String
, Object
> valueMap
= getValueMap(rs
);
378 Integer categoryFk
= (Integer
)valueMap
.get("refCategoryFk".toLowerCase());
379 refId
= (Integer
)valueMap
.get("refId".toLowerCase());
380 Boolean thesisFlag
= (Boolean
)valueMap
.get("thesisFlag".toLowerCase());
383 ReferenceBase
<?
> referenceBase
;
384 logger
.debug("RefCategoryFk: " + categoryFk
);
387 referenceBase
= makeThesis(valueMap
);
388 }else if (categoryFk
== REF_JOURNAL
){
389 referenceBase
= makeJournal(valueMap
);
390 }else if(categoryFk
== REF_BOOK
){
391 referenceBase
= makeBook(valueMap
, referenceStore
, nomRefStore
);
392 }else if(categoryFk
== REF_DATABASE
){
393 referenceBase
= makeDatabase(valueMap
);
394 }else if(categoryFk
== REF_INFORMAL
){
395 referenceBase
= makeInformal(valueMap
);
396 }else if(categoryFk
== REF_WEBSITE
){
397 referenceBase
= makeWebSite(valueMap
);
398 }else if(categoryFk
== REF_UNKNOWN
){
399 referenceBase
= makeUnknown(valueMap
);
400 }else if(categoryFk
== REF_PRINT_SERIES
){
401 referenceBase
= makePrintSeries(valueMap
);
402 }else if(categoryFk
== REF_CONFERENCE_PROCEEDINGS
){
403 referenceBase
= makeProceedings(valueMap
);
404 }else if(categoryFk
== REF_ARTICLE
){
405 referenceBase
= makeArticle(valueMap
, referenceStore
, nomRefStore
);
406 }else if(categoryFk
== REF_JOURNAL_VOLUME
){
407 referenceBase
= makeJournalVolume(valueMap
);
408 }else if(categoryFk
== REF_PART_OF_OTHER_TITLE
){
409 referenceBase
= makePartOfOtherTitle(valueMap
, referenceStore
, nomRefStore
);
411 logger
.warn("Unknown categoryFk (" + categoryFk
+ "). Create 'Generic instead'");
412 referenceBase
= refFactory
.newGeneric();
416 //refId, created, notes
417 doIdCreatedUpdatedNotes(state
, referenceBase
, rs
, refId
, namespace
);
419 String refYear
= (String
)valueMap
.get("refYear".toLowerCase());
420 referenceBase
.setDatePublished(ImportHelper
.getDatePublished(refYear
));
422 //nom&BiblioReference
423 success
&= makeNomAndBiblioReference(rs
, refId
, referenceBase
, refCounter
,
424 referenceStore
, nomRefStore
, teamMap
, state
.getStores() );
427 String idInSource
= (String
)valueMap
.get("IdInSource".toLowerCase());
428 if (CdmUtils
.isNotEmpty(idInSource
)){
429 IdentifiableSource source
= IdentifiableSource
.NewInstance(idInSource
);
430 source
.setIdNamespace("import to Berlin Model");
431 referenceBase
.addSource(source
);
435 if ((Boolean
)valueMap
.get("isPaper".toLowerCase())){
436 logger
.warn("IsPaper is not yet implemented, but reference " + refId
+ " is paper");
439 } catch (Exception e
) {
440 logger
.warn("Reference with BM refId '" + CdmUtils
.Nz(refId
) + "' threw Exception and could not be saved");
448 private boolean makeNomAndBiblioReference(ResultSet rs
,
450 ReferenceBase
<?
> referenceBase
,
451 RefCounter refCounter
,
452 MapWrapper
<ReferenceBase
> referenceStore
,
453 MapWrapper
<ReferenceBase
> nomRefStore
,
454 MapWrapper
<TeamOrPersonBase
> teamMap
,
455 Map
<String
, MapWrapper
<?
extends CdmBase
>> stores
456 ) throws SQLException
{
458 MapWrapper
<ReferenceBase
<?
>> referenceMap
= (MapWrapper
<ReferenceBase
<?
>>)stores
.get(ICdmIO
.REFERENCE_STORE
);
459 MapWrapper
<ReferenceBase
<?
>> nomRefMap
= (MapWrapper
<ReferenceBase
<?
>>)stores
.get(ICdmIO
.NOMREF_STORE
);
462 String refCache
= rs
.getString("refCache");
463 String nomRefCache
= rs
.getString("nomRefCache");
464 String title
= rs
.getString("title");
465 String nomTitleAbbrev
= rs
.getString("nomTitleAbbrev");
466 boolean isPreliminary
= rs
.getBoolean("PreliminaryFlag");
467 String refAuthorString
= rs
.getString("refAuthorString");
468 int nomAuthorTeamFk
= rs
.getInt("NomAuthorTeamFk");
469 TeamOrPersonBase
<?
> nomAuthor
= teamMap
.get(nomAuthorTeamFk
);
471 boolean hasNomRef
= false;
472 //is Nomenclatural Reference
473 if ( (CdmUtils
.isNotEmpty(nomRefCache
) && isPreliminary
) || (CdmUtils
.isNotEmpty(nomTitleAbbrev
) && ! isPreliminary
) ){
474 referenceBase
.setTitle(nomTitleAbbrev
);
475 TeamOrPersonBase
<?
> author
= getAuthorTeam(refAuthorString
, nomAuthor
, true);
476 referenceBase
.setAuthorTeam(author
);
477 //referenceBase.setNomenclaturallyRelevant(true);
479 referenceBase
.setTitleCache(nomRefCache
);
481 if (! nomRefStore
.containsId(refId
)){
482 if (referenceBase
== null){
483 logger
.warn("refBase is null");
485 nomRefStore
.put(refId
, referenceBase
);
487 logger
.warn("Duplicate refId in Berlin Model database. Second reference was not imported !!");
489 nomRefMap
.put(refId
, referenceBase
);
491 refCounter
.nomRefCount
++;
493 //is bibliographical Reference
494 if ((CdmUtils
.isNotEmpty(refCache
) && isPreliminary
&& ! refCache
.equalsIgnoreCase(nomRefCache
))
495 || (CdmUtils
.isNotEmpty(title
) && ! isPreliminary
&& ! title
.equalsIgnoreCase(nomTitleAbbrev
))
496 || hasNomRef
== false){
498 referenceBase
= (ReferenceBase
)referenceBase
.clone();
500 referenceBase
.setTitle(title
);
501 TeamOrPersonBase author
= getAuthorTeam(refAuthorString
, nomAuthor
, false);
502 referenceBase
.setAuthorTeam(author
);
503 referenceBase
.setNomenclaturallyRelevant(false);
505 referenceBase
.setTitleCache(refCache
);
507 if (! referenceStore
.containsId(refId
)){
508 referenceStore
.put(refId
, referenceBase
);
510 logger
.warn("Duplicate refId in Berlin Model database. Second reference was not imported !!");
512 referenceMap
.put(refId
, referenceBase
);
513 refCounter
.referenceCount
++;
519 private ReferenceBase
<?
> makeArticle (Map
<String
, Object
> valueMap
, MapWrapper
<ReferenceBase
> referenceStore
, MapWrapper
<ReferenceBase
> nomRefStore
){
521 IArticle article
= refFactory
.newArticle();
522 Object inRefFk
= valueMap
.get("inRefFk".toLowerCase());
523 Integer inRefCategoryFk
= (Integer
)valueMap
.get("inRefCategoryFk".toLowerCase());
524 Integer refId
= (Integer
)valueMap
.get("refId".toLowerCase());
526 if (inRefFk
!= null){
527 if (inRefCategoryFk
== REF_JOURNAL
){
528 int inRefFkInt
= (Integer
)inRefFk
;
529 if (nomRefStore
.containsId(inRefFkInt
) || referenceStore
.containsId(inRefFkInt
)){
530 ReferenceBase
<?
> inJournal
= nomRefStore
.get(inRefFkInt
);
531 if (inJournal
== null){
532 inJournal
= referenceStore
.get(inRefFkInt
);
533 logger
.info("inJournal (" + inRefFkInt
+ ") found in referenceStore instead of nomRefStore.");
534 nomRefStore
.put(inRefFkInt
, inJournal
);
536 if (inJournal
== null){
537 logger
.warn("inJournal for " + inRefFkInt
+ " is null. "+
538 " InReference relation could not be set");
539 //}else if (ReferenceBase.class.isAssignableFrom(inJournal.getClass())){
540 }else if (inJournal
.getType().equals(ReferenceType
.Journal
)){
541 article
.setInJournal((IJournal
)inJournal
);
543 logger
.warn("InJournal is not of type journal but of type " + inJournal
.getClass().getSimpleName() +
544 " Inreference relation could not be set");
547 logger
.error("Journal (refId = " + inRefFkInt
+ " ) for Article (refID = " + refId
+") could not be found in nomRefStore. Inconsistency error. ");
551 logger
.warn("Wrong inrefCategory for Article (refID = " + refId
+"). Type must be 'Journal' but was not (RefCategoryFk=" + inRefCategoryFk
+ "))." +
552 " InReference was not added to Article! ");
555 makeStandardMapper(valueMap
, (ReferenceBase
)article
); //url, pages, series, volume
556 return (ReferenceBase
)article
;
559 private ReferenceBase
<?
> makePartOfOtherTitle (Map
<String
, Object
> valueMap
, MapWrapper
<ReferenceBase
> referenceStore
, MapWrapper
<ReferenceBase
> nomRefStore
){
560 ReferenceBase
<?
> result
;
561 Object inRefFk
= valueMap
.get("inRefFk".toLowerCase());
562 Integer inRefCategoryFk
= (Integer
)valueMap
.get("inRefCategoryFk".toLowerCase());
563 Integer refId
= (Integer
)valueMap
.get("refId".toLowerCase());
565 if (inRefCategoryFk
== REF_BOOK
){
567 IBookSection bookSection
= refFactory
.newBookSection();
568 result
= (ReferenceBase
)bookSection
;
569 if (inRefFk
!= null){
570 int inRefFkInt
= (Integer
)inRefFk
;
571 if (nomRefStore
.containsId(inRefFkInt
) || referenceStore
.containsId(inRefFkInt
)){
572 ReferenceBase
<?
> inBook
= nomRefStore
.get(inRefFkInt
);
574 inBook
= referenceStore
.get(inRefFkInt
);
575 logger
.info("inBook (" + inRefFkInt
+ ") found in referenceStore instead of nomRefStore.");
576 nomRefStore
.put(inRefFkInt
, inBook
);
579 logger
.warn("inBook for " + inRefFkInt
+ " is null. "+
580 " InReference relation could not be set");;
581 //}else if (Book.class.isAssignableFrom(inBook.getClass())){
582 }else if (inBook
.getType().equals(ReferenceType
.Book
)){
583 bookSection
.setInBook((IBook
)inBook
);
586 logger
.warn("InBook is not of type book but of type " + inBook
.getClass().getSimpleName() +
587 " Inreference relation could not be set");
590 logger
.error("Book (refId = " + inRefFkInt
+ ") for part_of_other_title (refID = " + refId
+") could not be found in nomRefStore. Inconsistency error. ");
594 }else if (inRefCategoryFk
== REF_ARTICLE
){
597 logger
.warn("Reference (refId = " + refId
+ ") of type 'part_of_other_title' is part of 'article'." +
598 " This type is not implemented yet. Generic reference created instead") ;
599 result
= refFactory
.newGeneric();
600 }else if (inRefCategoryFk
== REF_JOURNAL
){
602 logger
.warn("Reference (refId = " + refId
+ ") of type 'part_of_other_title' has inReference of type 'journal'." +
603 " This is not allowed! Generic reference created instead") ;
604 result
= refFactory
.newGeneric();
605 result
.addMarker(Marker
.NewInstance(MarkerType
.TO_BE_CHECKED(), true));
607 logger
.warn("InReference type (catFk = " + inRefCategoryFk
+ ") of part-of-reference not recognized for refId " + refId
+ "." +
608 " Create 'Generic' reference instead");
609 result
= refFactory
.newGeneric();
611 makeStandardMapper(valueMap
, result
); //url, pages
615 private ReferenceBase
<?
> makeWebSite(Map
<String
, Object
> valueMap
){
616 if (logger
.isDebugEnabled()){logger
.debug("RefType 'Website'");}
617 ReferenceBase webPage
= refFactory
.newWebPage();
618 makeStandardMapper(valueMap
, webPage
); //placePublished, publisher
622 private ReferenceBase
<?
> makeUnknown(Map
<String
, Object
> valueMap
){
623 if (logger
.isDebugEnabled()){logger
.debug("RefType 'Unknown'");}
624 ReferenceBase generic
= refFactory
.newGeneric();
625 // generic.setSeries(series);
626 makeStandardMapper(valueMap
, generic
); //pages, placePublished, publisher, series, volume
630 private ReferenceBase
<?
> makeInformal(Map
<String
, Object
> valueMap
){
631 if (logger
.isDebugEnabled()){logger
.debug("RefType 'Informal'");}
632 ReferenceBase generic
= refFactory
.newGeneric();
633 // informal.setSeries(series);
634 makeStandardMapper(valueMap
, generic
);//editor, pages, placePublished, publisher, series, volume
635 String informal
= (String
)valueMap
.get("InformalRefCategory".toLowerCase());
636 if (CdmUtils
.isNotEmpty(informal
) ){
637 generic
.addExtension(informal
, ExtensionType
.INFORMAL_CATEGORY());
642 private ReferenceBase
<?
> makeDatabase(Map
<String
, Object
> valueMap
){
643 if (logger
.isDebugEnabled()){logger
.debug("RefType 'Database'");}
644 ReferenceBase database
= refFactory
.newDatabase();
645 makeStandardMapper(valueMap
, database
); //?
649 private ReferenceBase
<?
> makeJournal(Map
<String
, Object
> valueMap
){
650 if (logger
.isDebugEnabled()){logger
.debug("RefType 'Journal'");}
651 ReferenceBase journal
= refFactory
.newJournal();
653 Set
<String
> omitAttributes
= new HashSet
<String
>();
654 String series
= "series";
655 // omitAttributes.add(series);
657 makeStandardMapper(valueMap
, journal
, omitAttributes
); //issn,placePublished,publisher
658 // if (valueMap.get(series) != null){
659 // logger.warn("Series not yet implemented for journal!");
664 private ReferenceBase
<?
> makeBook(Map
<String
, Object
> valueMap
, MapWrapper
<ReferenceBase
> referenceStore
, MapWrapper
<ReferenceBase
> nomRefStore
){
665 if (logger
.isDebugEnabled()){logger
.debug("RefType 'Book'");}
666 ReferenceBase book
= refFactory
.newBook();
667 Integer refId
= (Integer
)valueMap
.get("refId".toLowerCase());
669 //Set bookAttributes = new String[]{"edition", "isbn", "pages","publicationTown","publisher","volume"};
671 Set
<String
> omitAttributes
= new HashSet
<String
>();
672 String attrSeries
= "series";
673 // omitAttributes.add(attrSeries);
675 makeStandardMapper(valueMap
, book
, omitAttributes
);
678 IPrintSeries printSeries
= null;
679 if (valueMap
.get(attrSeries
) != null){
680 String series
= (String
)valueMap
.get("title".toLowerCase());
682 String nomTitle
= (String
)valueMap
.get("nomTitleAbbrev".toLowerCase());
685 printSeries
= refFactory
.newPrintSeries(series
);
686 //TODO only one for ref and nomRef
687 logger
.warn("Implementation of printSeries is preliminary");
689 Object inRefFk
= valueMap
.get("inRefFk".toLowerCase());
690 //Series (as Reference)
691 if (inRefFk
!= null){
692 int inRefFkInt
= (Integer
)inRefFk
;
693 if (nomRefStore
.containsId(inRefFkInt
) || referenceStore
.containsId(inRefFkInt
)){
694 ReferenceBase
<?
> inSeries
= nomRefStore
.get(inRefFkInt
);
695 if (inSeries
== null){
696 inSeries
= referenceStore
.get(inRefFkInt
);
697 logger
.info("inSeries (" + inRefFkInt
+ ") found in referenceStore instead of nomRefStore.");
698 nomRefStore
.put(inRefFkInt
, inSeries
);
700 if (inSeries
== null){
701 logger
.warn("inSeries for " + inRefFkInt
+ " is null. "+
702 " InReference relation could not be set");;
703 //}else if (PrintSeries.class.isAssignableFrom(inSeries.getClass())){
704 }else if (inSeries
.getType().equals(ReferenceType
.PrintSeries
)){
705 book
.setInSeries((IPrintSeries
)inSeries
);
708 logger
.warn("inSeries is not of type PrintSeries but of type " + inSeries
.getClass().getSimpleName() +
709 " Inreference relation could not be set");
712 logger
.error("PrintSeries (refId = " + inRefFkInt
+ ") for book (refID = " + refId
+") could not be found in nomRefStore. Inconsistency error. ");
716 if (book
.getInSeries() != null && printSeries
!= null){
717 logger
.warn("Book has series string and inSeries reference. Can not take both. Series string neglected");
719 book
.setInSeries(printSeries
);
721 book
.setEditor(null);
726 private ReferenceBase
<?
> makePrintSeries(Map
<String
, Object
> valueMap
){
727 if (logger
.isDebugEnabled()){logger
.debug("RefType 'PrintSeries'");}
728 ReferenceBase printSeries
= refFactory
.newPrintSeries();
729 makeStandardMapper(valueMap
, printSeries
, null);
733 private ReferenceBase
<?
> makeProceedings(Map
<String
, Object
> valueMap
){
734 if (logger
.isDebugEnabled()){logger
.debug("RefType 'Proceedings'");}
735 ReferenceBase proceedings
= refFactory
.newProceedings();
736 makeStandardMapper(valueMap
, proceedings
, null);
740 private ReferenceBase
<?
> makeThesis(Map
<String
, Object
> valueMap
){
741 if (logger
.isDebugEnabled()){logger
.debug("RefType 'Thesis'");}
742 ReferenceBase thesis
= refFactory
.newThesis();
743 makeStandardMapper(valueMap
, thesis
, null);
748 private ReferenceBase
<?
> makeJournalVolume(Map
<String
, Object
> valueMap
){
749 if (logger
.isDebugEnabled()){logger
.debug("RefType 'JournalVolume'");}
750 //Proceedings proceedings = Proceedings.NewInstance();
751 ReferenceBase journalVolume
= refFactory
.newGeneric();
752 makeStandardMapper(valueMap
, journalVolume
, null);
753 logger
.warn("Journal volumes not yet implemented. Generic created instead but with errors");
754 return journalVolume
;
757 private boolean makeStandardMapper(Map
<String
, Object
> valueMap
, ReferenceBase
<?
> ref
){
758 return makeStandardMapper(valueMap
, ref
, null);
762 private boolean makeStandardMapper(Map
<String
, Object
> valueMap
, CdmBase cdmBase
, Set
<String
> omitAttributes
){
763 boolean result
= true;
764 for (CdmAttributeMapperBase mapper
: classMappers
){
765 if (mapper
instanceof CdmSingleAttributeMapperBase
){
766 result
&= makeStandardSingleMapper(valueMap
, cdmBase
, (CdmSingleAttributeMapperBase
)mapper
, omitAttributes
);
767 }else if (mapper
instanceof CdmOneToManyMapper
){
768 result
&= makeMultipleValueAddMapper(valueMap
, cdmBase
, (CdmOneToManyMapper
)mapper
, omitAttributes
);
770 logger
.error("Unknown mapper type");
777 private boolean makeStandardSingleMapper(Map
<String
, Object
> valueMap
, CdmBase cdmBase
, CdmSingleAttributeMapperBase mapper
, Set
<String
> omitAttributes
){
778 boolean result
= true;
779 if (omitAttributes
== null){
780 omitAttributes
= new HashSet
<String
>();
782 if (mapper
instanceof CdmExtensionMapper
){
783 result
&= ((CdmExtensionMapper
)mapper
).invoke(valueMap
, cdmBase
);
785 String sourceAttribute
= mapper
.getSourceAttributeList().get(0).toLowerCase();
786 Object value
= valueMap
.get(sourceAttribute
);
788 String destinationAttribute
= mapper
.getDestinationAttribute();
789 if (! omitAttributes
.contains(destinationAttribute
)){
790 result
&= ImportHelper
.addValue(value
, cdmBase
, destinationAttribute
, mapper
.getTypeClass(), OVERWRITE
, OBLIGATORY
);
798 private boolean makeMultipleValueAddMapper(Map
<String
, Object
> valueMap
, CdmBase cdmBase
, CdmOneToManyMapper
<CdmBase
, CdmBase
, CdmSingleAttributeMapperBase
> mapper
, Set
<String
> omitAttributes
){
799 if (omitAttributes
== null){
800 omitAttributes
= new HashSet
<String
>();
802 boolean result
= true;
803 String destinationAttribute
= mapper
.getSingleAttributeName();
804 List
<Object
> sourceValues
= new ArrayList
<Object
>();
805 List
<Class
> classes
= new ArrayList
<Class
>();
806 for (CdmSingleAttributeMapperBase singleMapper
: mapper
.getSingleMappers()){
807 String sourceAttribute
= singleMapper
.getSourceAttribute();
808 Object value
= valueMap
.get(sourceAttribute
);
809 sourceValues
.add(value
);
810 Class
<?
> clazz
= singleMapper
.getTypeClass();
814 result
&= ImportHelper
.addMultipleValues(sourceValues
, cdmBase
, destinationAttribute
, classes
, NO_OVERWRITE
, OBLIGATORY
);
815 // //only for testing
816 // if (cdmBase instanceof PublicationBase){
817 // PublicationBase pub = ((PublicationBase)cdmBase);
818 // pub.addPublisher("A new publisher for " + pub.getTitleCache(), "A nice place");
824 private static TeamOrPersonBase
<?
> getAuthorTeam(String authorString
, TeamOrPersonBase
<?
> nomAuthor
, boolean preferNomeclaturalAuthor
){
825 TeamOrPersonBase
<?
> result
;
826 if (preferNomeclaturalAuthor
){
827 if (nomAuthor
!= null){
830 if (CdmUtils
.Nz(authorString
).equals("")){
833 TeamOrPersonBase
<?
> team
= Team
.NewInstance();
834 //TODO which one to use??
835 team
.setNomenclaturalTitle(authorString
);
836 team
.setTitleCache(authorString
);
840 }else{ //prefer bibliographic
841 if (! CdmUtils
.Nz(authorString
).equals("")){
842 TeamOrPersonBase
<?
> team
= Team
.NewInstance();
843 //TODO which one to use??
844 team
.setNomenclaturalTitle(authorString
);
845 team
.setTitleCache(authorString
);
857 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
859 protected boolean isIgnore(BerlinModelImportState state
){
860 return (state
.getConfig().getDoReferences() == IImportConfigurator
.DO_REFERENCES
.NONE
);
865 //******************************** CHECK *************************************************
867 private static boolean checkArticlesWithoutJournal(BerlinModelImportConfigurator bmiConfig
){
869 boolean result
= true;
870 Source source
= bmiConfig
.getSource();
871 String strQueryArticlesWithoutJournal
= "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 " +
872 " 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 " +
873 " WHERE (Reference.RefCategoryFk = 1) AND (InRef.RefCategoryFk <> 9) ";
874 ResultSet resulSetarticlesWithoutJournal
= source
.getResultSet(strQueryArticlesWithoutJournal
);
875 boolean firstRow
= true;
876 while (resulSetarticlesWithoutJournal
.next()){
878 System
.out
.println("========================================================");
879 logger
.warn("There are Articles with wrong inRef type!");
880 System
.out
.println("========================================================");
882 int refId
= resulSetarticlesWithoutJournal
.getInt("RefId");
883 //int categoryFk = resulSetarticlesWithoutJournal.getInt("RefCategoryFk");
884 String cat
= resulSetarticlesWithoutJournal
.getString("RefCategoryAbbrev");
885 int inRefFk
= resulSetarticlesWithoutJournal
.getInt("InRefId");
886 //int inRefCategoryFk = resulSetarticlesWithoutJournal.getInt("InRefCatFk");
887 String inRefCat
= resulSetarticlesWithoutJournal
.getString("InRefCat");
888 String refCache
= resulSetarticlesWithoutJournal
.getString("RefCache");
889 String nomRefCache
= resulSetarticlesWithoutJournal
.getString("nomRefCache");
890 String title
= resulSetarticlesWithoutJournal
.getString("title");
891 String inRefTitle
= resulSetarticlesWithoutJournal
.getString("InRefTitle");
893 System
.out
.println("RefID:" + refId
+ "\n cat: " + cat
+
894 "\n refCache: " + refCache
+ "\n nomRefCache: " + nomRefCache
+ "\n title: " + title
+
895 "\n inRefFk: " + inRefFk
+ "\n inRefCategory: " + inRefCat
+
896 "\n inRefTitle: " + inRefTitle
);
897 result
= firstRow
= false;
901 } catch (SQLException e
) {
907 private static boolean checkPartOfJournal(BerlinModelImportConfigurator bmiConfig
){
909 boolean result
= true;
910 Source source
= bmiConfig
.getSource();
911 String strQueryPartOfJournal
= "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 " +
912 " 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 " +
913 " WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 9) ";
914 ResultSet rs
= source
.getResultSet(strQueryPartOfJournal
);
915 boolean firstRow
= true;
918 System
.out
.println("========================================================");
919 logger
.warn("There are part-of-references that have a Journal as in-reference!");
920 System
.out
.println("========================================================");
922 int refId
= rs
.getInt("RefId");
923 //int categoryFk = rs.getInt("RefCategoryFk");
924 String cat
= rs
.getString("RefCategoryAbbrev");
925 int inRefFk
= rs
.getInt("InRefId");
926 //int inRefCategoryFk = rs.getInt("InRefCatFk");
927 String inRefCat
= rs
.getString("InRefCat");
928 String refCache
= rs
.getString("RefCache");
929 String nomRefCache
= rs
.getString("nomRefCache");
930 String title
= rs
.getString("title");
931 String inRefTitle
= rs
.getString("InRefTitle");
933 System
.out
.println("RefID:" + refId
+ "\n cat: " + cat
+
934 "\n refCache: " + refCache
+ "\n nomRefCache: " + nomRefCache
+ "\n title: " + title
+
935 "\n inRefFk: " + inRefFk
+ "\n inRefCategory: " + inRefCat
+
936 "\n inRefTitle: " + inRefTitle
);
937 result
= firstRow
= false;
941 } catch (SQLException e
) {
948 private static boolean checkPartOfUnresolved(BerlinModelImportConfigurator bmiConfig
){
950 boolean result
= true;
951 Source source
= bmiConfig
.getSource();
952 String strQueryPartOfJournal
= "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 " +
953 " 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 " +
954 " WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 10) ";
955 ResultSet rs
= source
.getResultSet(strQueryPartOfJournal
);
956 boolean firstRow
= true;
959 System
.out
.println("========================================================");
960 logger
.warn("There are part-of-references that have an 'unresolved' in-reference!");
961 System
.out
.println("========================================================");
963 int refId
= rs
.getInt("RefId");
964 //int categoryFk = rs.getInt("RefCategoryFk");
965 String cat
= rs
.getString("RefCategoryAbbrev");
966 int inRefFk
= rs
.getInt("InRefId");
967 //int inRefCategoryFk = rs.getInt("InRefCatFk");
968 String inRefCat
= rs
.getString("InRefCat");
969 String refCache
= rs
.getString("RefCache");
970 String nomRefCache
= rs
.getString("nomRefCache");
971 String title
= rs
.getString("title");
972 String inRefTitle
= rs
.getString("InRefTitle");
974 System
.out
.println("RefID:" + refId
+ "\n cat: " + cat
+
975 "\n refCache: " + refCache
+ "\n nomRefCache: " + nomRefCache
+ "\n title: " + title
+
976 "\n inRefFk: " + inRefFk
+ "\n inRefCategory: " + inRefCat
+
977 "\n inRefTitle: " + inRefTitle
);
978 result
= firstRow
= false;
980 if (result
== false){
981 System
.out
.println("\nChoose a specific type from the following reference types: \n" +
982 " 1) Article \n 2) Book \n 3) BookSection \n 4) CdDvd \n 5) ConferenceProceeding \n 6) Database\n" +
983 " 7) Generic \n 7) InProceedings \n 8) Journal \n 9) Map \n 10) Patent \n 11) PersonalCommunication\n" +
984 " 12) PrintSeries \n 13) Proceedings \n 14) Report \n 15) Thesis \n 16) WebPage");
987 } catch (SQLException e
) {
993 private static boolean checkPartOfPartOf(BerlinModelImportConfigurator bmiConfig
){
995 boolean result
= true;
996 Source source
= bmiConfig
.getSource();
997 String strQueryPartOfJournal
= "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 " +
999 " INNER JOIN Reference AS InRef ON Reference.InRefFk = InRef.RefId " +
1000 " INNER JOIN RefCategory ON Reference.RefCategoryFk = RefCategory.RefCategoryId " +
1001 " INNER JOIN RefCategory AS InRefCategory ON InRef.RefCategoryFk = InRefCategory.RefCategoryId " +
1002 " INNER JOIN Reference AS InInRef ON InRef.InRefFk = InInRef.RefId " +
1003 " WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 2) ";
1004 ResultSet rs
= source
.getResultSet(strQueryPartOfJournal
);
1005 boolean firstRow
= true;
1008 System
.out
.println("========================================================");
1009 logger
.warn("There are part-of-references that are part of an other 'part-of' reference!\n" +
1010 " This is invalid or ambigous. Please try to determine the reference types more detailed ");
1011 System
.out
.println("========================================================");
1013 int refId
= rs
.getInt("RefId");
1014 //int categoryFk = rs.getInt("RefCategoryFk");
1015 String cat
= rs
.getString("RefCategoryAbbrev");
1016 int inRefFk
= rs
.getInt("InRefId");
1017 //int inRefCategoryFk = rs.getInt("InRefCatFk");
1018 String inRefCat
= rs
.getString("InRefCat");
1019 String refCache
= rs
.getString("RefCache");
1020 String nomRefCache
= rs
.getString("nomRefCache");
1021 String title
= rs
.getString("title");
1022 String inRefTitle
= rs
.getString("InRefTitle");
1023 int inInRefId
= rs
.getInt("InInRefId");
1024 String inInRefTitle
= rs
.getString("inInRefTitle");
1025 int inInRefCategory
= rs
.getInt("inInRefCategory");
1027 System
.out
.println("RefID:" + refId
+ "\n cat: " + cat
+
1028 "\n refCache: " + refCache
+ "\n nomRefCache: " + nomRefCache
+ "\n title: " + title
+
1029 "\n inRefFk: " + inRefFk
+ "\n inRefCategory: " + inRefCat
+
1030 "\n inRefTitle: " + inRefTitle
+ "\n inInRefId: " + inInRefId
+ "\n inInRefTitle: " + inInRefTitle
+
1031 "\n inInRefCategory: " + inInRefCategory
);
1032 result
= firstRow
= false;
1034 if (result
== false){
1035 System
.out
.println("\nChoose a specific type from the following reference types: \n" +
1036 " 1) BookSection - Book - PrintSeries \n" +
1037 " 2) InProceedings - pProceedings - PrintSeries");
1040 } catch (SQLException e
) {
1041 e
.printStackTrace();
1047 private static boolean checkPartOfArticle(BerlinModelImportConfigurator bmiConfig
){
1049 boolean result
= true;
1050 Source source
= bmiConfig
.getSource();
1051 String strQueryPartOfJournal
= "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 " +
1052 " 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 " +
1053 " WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 1) ";
1054 ResultSet rs
= source
.getResultSet(strQueryPartOfJournal
);
1055 boolean firstRow
= true;
1058 System
.out
.println("========================================================");
1059 logger
.warn("There are part-of-references that have an article as in-reference!");
1060 System
.out
.println("========================================================");
1062 int refId
= rs
.getInt("RefId");
1063 //int categoryFk = rs.getInt("RefCategoryFk");
1064 String cat
= rs
.getString("RefCategoryAbbrev");
1065 int inRefFk
= rs
.getInt("InRefId");
1066 //int inRefCategoryFk = rs.getInt("InRefCatFk");
1067 String inRefCat
= rs
.getString("InRefCat");
1068 String refCache
= rs
.getString("RefCache");
1069 String nomRefCache
= rs
.getString("nomRefCache");
1070 String title
= rs
.getString("title");
1071 String nomTitleAbbrev
= rs
.getString("nomTitleAbbrev");
1072 String inRefTitle
= rs
.getString("InRefTitle");
1073 String inRefnomTitleAbbrev
= rs
.getString("inRefnomTitleAbbrev");
1074 String inRefnomRefCache
= rs
.getString("inRefnomRefCache");
1075 String inRefCache
= rs
.getString("inRefCache");
1077 System
.out
.println("RefID:" + refId
+ "\n cat: " + cat
+
1078 "\n refCache: " + refCache
+ "\n nomRefCache: " + nomRefCache
+ "\n title: " + title
+ "\n titleAbbrev: " + nomTitleAbbrev
+
1079 "\n inRefFk: " + inRefFk
+ "\n inRefCategory: " + inRefCat
+
1080 "\n inRefTitle: " + inRefTitle
+ "\n inRefTitleAbbrev: " + inRefnomTitleAbbrev
+
1081 "\n inRefnomRefCache: " + inRefnomRefCache
+ "\n inRefCache: " + inRefCache
1083 result
= firstRow
= false;
1087 } catch (SQLException e
) {
1088 e
.printStackTrace();
1093 private static boolean checkJournalsWithSeries(BerlinModelImportConfigurator bmiConfig
){
1095 boolean result
= true;
1096 Source source
= bmiConfig
.getSource();
1097 String strQueryArticlesWithoutJournal
= "SELECT Reference.RefId, Reference.RefCategoryFk, Reference.RefCache, Reference.NomRefCache, Reference.Title, Reference.NomTitleAbbrev, RefCategory.RefCategoryAbbrev " +
1098 " FROM Reference INNER JOIN " +
1099 " RefCategory ON Reference.RefCategoryFk = RefCategory.RefCategoryId " +
1100 " WHERE (Reference.RefCategoryFk = 9) AND ( Reference.series is not null OR Reference.series <>'') ";
1101 ResultSet rs
= source
.getResultSet(strQueryArticlesWithoutJournal
);
1102 boolean firstRow
= true;
1105 System
.out
.println("========================================================");
1106 logger
.warn("There are Journals with series!");
1107 System
.out
.println("========================================================");
1109 int refId
= rs
.getInt("RefId");
1110 //int categoryFk = rs.getInt("RefCategoryFk");
1111 String cat
= rs
.getString("RefCategoryAbbrev");
1112 String nomRefCache
= rs
.getString("nomRefCache");
1113 String refCache
= rs
.getString("refCache");
1114 String title
= rs
.getString("title");
1115 String nomTitleAbbrev
= rs
.getString("nomTitleAbbrev");
1117 System
.out
.println("RefID:" + refId
+ "\n cat: " + cat
+
1118 "\n refCache: " + refCache
+ "\n nomRefCache: " + nomRefCache
+
1119 "\n title: " + title
+ "\n nomTitleAbbrev: " + nomTitleAbbrev
+
1121 result
= firstRow
= false;
1125 } catch (SQLException e
) {
1126 e
.printStackTrace();
1131 private static boolean checkPartOfWithVolume(BerlinModelImportConfigurator bmiConfig
){
1133 boolean result
= true;
1134 Source source
= bmiConfig
.getSource();
1135 String strQueryArticlesWithoutJournal
= "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" +
1136 " FROM Reference AS Ref " +
1137 " INNER JOIN RefCategory ON Ref.RefCategoryFk = RefCategory.RefCategoryId " +
1138 " LEFT OUTER JOIN Reference AS InRef ON Ref.InRefFk = InRef.RefId " +
1139 " WHERE (Ref.RefCategoryFk = 2) AND ((Ref.Volume IS NOT NULL) OR (Ref.Series IS NOT NULL) OR (Ref.Edition IS NOT NULL)) " ;
1140 ResultSet rs
= source
.getResultSet(strQueryArticlesWithoutJournal
);
1141 boolean firstRow
= true;
1144 System
.out
.println("========================================================");
1145 logger
.warn("There are PartOfOtherTitles with volumes, editions or series !");
1146 System
.out
.println("========================================================");
1148 int refId
= rs
.getInt("refId");
1149 String cat
= rs
.getString("refCategoryAbbrev");
1150 String nomRefCache
= rs
.getString("nomRefCache");
1151 String refCache
= rs
.getString("refCache");
1152 String title
= rs
.getString("title");
1153 String nomTitleAbbrev
= rs
.getString("nomTitleAbbrev");
1154 String volume
= rs
.getString("volume");
1155 String edition
= rs
.getString("edition");
1156 String series
= rs
.getString("series");
1157 String inRefRefCache
= rs
.getString("inRefRefCache");
1158 String inRefNomRefCache
= rs
.getString("inRefNomRefCache");
1159 int inRefId
= rs
.getInt("inRefId");
1160 String inRefVolume
= rs
.getString("inRefVol");
1161 String inRefSeries
= rs
.getString("inRefSeries");
1162 String inRefEdition
= rs
.getString("inRefEdition");
1164 System
.out
.println("RefID:" + refId
+ "\n cat: " + cat
+
1165 "\n refCache: " + refCache
+ "\n nomRefCache: " + nomRefCache
+
1166 "\n title: " + title
+ "\n nomTitleAbbrev: " + nomTitleAbbrev
+ "\n volume: " + volume
+ "\n series: " + series
+"\n edition: " + edition
+
1167 "\n inRef-ID:" + inRefId
+ "\n inRef-cache: " + inRefRefCache
+
1168 "\n inRef-nomCache: " + inRefNomRefCache
+ "\n inRef-volume: " + inRefVolume
+"\n inRef-series: " + inRefSeries
+"\n inRef-edition: " + inRefEdition
+
1170 result
= firstRow
= false;
1174 } catch (SQLException e
) {
1175 e
.printStackTrace();
1180 private static boolean checkArticleWithEdition(BerlinModelImportConfigurator bmiConfig
){
1182 boolean result
= true;
1183 Source source
= bmiConfig
.getSource();
1184 String strQueryArticlesWithoutJournal
= "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" +
1185 " FROM Reference AS Ref " +
1186 " INNER JOIN RefCategory ON Ref.RefCategoryFk = RefCategory.RefCategoryId " +
1187 " LEFT OUTER JOIN Reference AS InRef ON Ref.InRefFk = InRef.RefId " +
1188 " WHERE (Ref.RefCategoryFk = 1) AND (NOT (Ref.Edition IS NULL)) " +
1189 " ORDER BY InRef.RefId ";
1190 ResultSet rs
= source
.getResultSet(strQueryArticlesWithoutJournal
);
1191 boolean firstRow
= true;
1194 System
.out
.println("========================================================");
1195 logger
.warn("There are Articles with editions !");
1196 System
.out
.println("========================================================");
1198 int refId
= rs
.getInt("refId");
1199 String cat
= rs
.getString("refCategoryAbbrev");
1200 String nomRefCache
= rs
.getString("nomRefCache");
1201 String refCache
= rs
.getString("refCache");
1202 String title
= rs
.getString("title");
1203 String nomTitleAbbrev
= rs
.getString("nomTitleAbbrev");
1204 String edition
= rs
.getString("edition");
1205 String inRefRefCache
= rs
.getString("inRefRefCache");
1206 String inRefNomRefCache
= rs
.getString("inRefNomRefCache");
1207 int inRefId
= rs
.getInt("inRefId");
1208 String inRefEdition
= rs
.getString("inRefEdition");
1210 System
.out
.println("RefID:" + refId
+ "\n cat: " + cat
+
1211 "\n refCache: " + refCache
+ "\n nomRefCache: " + nomRefCache
+
1212 "\n title: " + title
+ "\n nomTitleAbbrev: " + nomTitleAbbrev
+ "\n edition: " + edition
+
1213 "\n inRef-ID:" + inRefId
+ "\n inRef-cache: " + inRefRefCache
+
1214 "\n inRef-nomCache: " + inRefNomRefCache
+ "\n inRef-edition: " + inRefEdition
+
1216 result
= firstRow
= false;
1220 } catch (SQLException e
) {
1221 e
.printStackTrace();
1226 protected boolean checkObligatoryAttributes(IImportConfigurator config
){
1227 boolean result
= true;
1230 String strQuery
= " SELECT Reference.* " +
1231 " FROM Reference " +
1232 // " INNER JOIN Reference ON Reference.RefId = RefDetail.RefFk " +
1234 BerlinModelImportConfigurator bmiConfig
= (BerlinModelImportConfigurator
)config
;
1235 Source source
= bmiConfig
.getSource();
1236 ResultSet rs
= source
.getResultSet(strQuery
);
1237 int colCount
= rs
.getMetaData().getColumnCount();
1238 Set
<String
> existingAttributes
= new HashSet
<String
>();
1239 for (int c
= 0; c
< colCount
; c
++){
1240 existingAttributes
.add(rs
.getMetaData().getColumnLabel(c
+1).toLowerCase());
1242 Set
<String
> obligatoryAttributes
= getObligatoryAttributes(true);
1244 obligatoryAttributes
.removeAll(existingAttributes
);
1245 for (String attr
: obligatoryAttributes
){
1246 logger
.warn("Missing attribute: " + attr
);
1249 //additional Attributes
1250 obligatoryAttributes
= getObligatoryAttributes(true);
1252 existingAttributes
.removeAll(obligatoryAttributes
);
1253 for (String attr
: existingAttributes
){
1254 logger
.warn("Additional attribute: " + attr
);
1256 } catch (SQLException e
) {
1258 e
.printStackTrace();
1264 protected Set
<String
> getObligatoryAttributes(boolean lowerCase
){
1265 Set
<String
> result
= new HashSet
<String
>();
1266 result
.addAll(Arrays
.asList(unclearMappers
));
1267 result
.addAll(Arrays
.asList(createdAndNotesAttributes
));
1268 result
.addAll(Arrays
.asList(operationalAttributes
));
1269 CdmIoMapping mapping
= new CdmIoMapping();
1270 for (CdmAttributeMapperBase mapper
: classMappers
){
1271 mapping
.addMapper(mapper
);
1273 result
.addAll(mapping
.getSourceAttributes());
1275 Set
<String
> lowerCaseResult
= new HashSet
<String
>();
1276 for (String str
: result
){
1277 if (str
!= null){lowerCaseResult
.add(str
.toLowerCase());}
1279 result
= lowerCaseResult
;
1284 protected boolean checkRefDetailUnimplementedAttributes(IImportConfigurator config
){
1285 boolean result
= true;
1288 String strQuery
= " SELECT Count(*) as n" +
1289 " FROM RefDetail " +
1290 // " INNER JOIN Reference ON Reference.RefId = RefDetail.RefFk " +
1291 " WHERE SecondarySources is not NULL AND SecondarySources <> '' ";
1292 BerlinModelImportConfigurator bmiConfig
= (BerlinModelImportConfigurator
)config
;
1293 Source source
= bmiConfig
.getSource();
1294 ResultSet rs
= source
.getResultSet(strQuery
);
1297 int count
= rs
.getInt("n");
1299 System
.out
.println("========================================================");
1300 logger
.warn("There are "+ count
+ " RefDetails with SecondarySources <> NULL ! Secondary sources are not yet implemented for Berlin Model Import");
1301 System
.out
.println("========================================================");
1304 strQuery
= " SELECT Count(*) as n" +
1305 " FROM RefDetail " +
1306 // " INNER JOIN Reference ON Reference.RefId = RefDetail.RefFk " +
1307 " WHERE IdInSource is not NULL AND IdInSource <> '' ";
1308 rs
= source
.getResultSet(strQuery
);
1311 count
= rs
.getInt("n");
1313 System
.out
.println("========================================================");
1314 logger
.warn("There are "+ count
+ " RefDetails with IdInSource <> NULL ! IdInSource are not yet implemented for Berlin Model Import");
1315 System
.out
.println("========================================================");
1319 } catch (SQLException e
) {
1321 e
.printStackTrace();