1
|
/**
|
2
|
*
|
3
|
*/
|
4
|
package eu.etaxonomy.cdm.io.berlinModel;
|
5
|
|
6
|
import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_ARTICLE;
|
7
|
import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_BOOK;
|
8
|
import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_DATABASE;
|
9
|
import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_INFORMAL;
|
10
|
import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_JOURNAL;
|
11
|
import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_PART_OF_OTHER_TITLE;
|
12
|
import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_UNKNOWN;
|
13
|
import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_WEBSITE;
|
14
|
import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_PRINT_SERIES;
|
15
|
import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_CONFERENCE_PROCEEDINGS;
|
16
|
import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_JOURNAL_VOLUME;
|
17
|
|
18
|
import static eu.etaxonomy.cdm.io.common.IImportConfigurator.DO_REFERENCES.ALL;
|
19
|
import static eu.etaxonomy.cdm.io.common.IImportConfigurator.DO_REFERENCES.CONCEPT_REFERENCES;
|
20
|
import static eu.etaxonomy.cdm.io.common.IImportConfigurator.DO_REFERENCES.NOMENCLATURAL;
|
21
|
import static eu.etaxonomy.cdm.io.common.ImportHelper.OBLIGATORY;
|
22
|
import static eu.etaxonomy.cdm.io.common.ImportHelper.OVERWRITE;
|
23
|
|
24
|
import java.sql.ResultSet;
|
25
|
import java.sql.SQLException;
|
26
|
import java.util.ArrayList;
|
27
|
import java.util.Arrays;
|
28
|
import java.util.HashMap;
|
29
|
import java.util.HashSet;
|
30
|
import java.util.Iterator;
|
31
|
import java.util.List;
|
32
|
import java.util.Map;
|
33
|
import java.util.Set;
|
34
|
|
35
|
import org.apache.log4j.Logger;
|
36
|
|
37
|
import eu.etaxonomy.cdm.api.application.CdmApplicationController;
|
38
|
import eu.etaxonomy.cdm.api.service.IReferenceService;
|
39
|
import eu.etaxonomy.cdm.common.CdmUtils;
|
40
|
import eu.etaxonomy.cdm.io.common.CdmIoMapperBase;
|
41
|
import eu.etaxonomy.cdm.io.common.CdmIoMapping;
|
42
|
import eu.etaxonomy.cdm.io.common.ICdmIO;
|
43
|
import eu.etaxonomy.cdm.io.common.IImportConfigurator;
|
44
|
import eu.etaxonomy.cdm.io.common.ImportHelper;
|
45
|
import eu.etaxonomy.cdm.io.common.MapWrapper;
|
46
|
import eu.etaxonomy.cdm.io.common.Source;
|
47
|
import eu.etaxonomy.cdm.model.agent.Team;
|
48
|
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
|
49
|
import eu.etaxonomy.cdm.model.common.CdmBase;
|
50
|
import eu.etaxonomy.cdm.model.common.Marker;
|
51
|
import eu.etaxonomy.cdm.model.common.MarkerType;
|
52
|
import eu.etaxonomy.cdm.model.common.TimePeriod;
|
53
|
import eu.etaxonomy.cdm.model.reference.Article;
|
54
|
import eu.etaxonomy.cdm.model.reference.Book;
|
55
|
import eu.etaxonomy.cdm.model.reference.BookSection;
|
56
|
import eu.etaxonomy.cdm.model.reference.Database;
|
57
|
import eu.etaxonomy.cdm.model.reference.Generic;
|
58
|
import eu.etaxonomy.cdm.model.reference.Journal;
|
59
|
import eu.etaxonomy.cdm.model.reference.PrintSeries;
|
60
|
import eu.etaxonomy.cdm.model.reference.Proceedings;
|
61
|
import eu.etaxonomy.cdm.model.reference.ReferenceBase;
|
62
|
import eu.etaxonomy.cdm.model.reference.StrictReferenceBase;
|
63
|
import eu.etaxonomy.cdm.model.reference.WebPage;
|
64
|
|
65
|
/**
|
66
|
* @author a.mueller
|
67
|
*
|
68
|
*/
|
69
|
public class BerlinModelReferenceIO extends BerlinModelIOBase {
|
70
|
private static final Logger logger = Logger.getLogger(BerlinModelReferenceIO.class);
|
71
|
|
72
|
private int modCount = 1000;
|
73
|
|
74
|
public BerlinModelReferenceIO(){
|
75
|
super();
|
76
|
}
|
77
|
|
78
|
|
79
|
protected static CdmIoMapperBase[] classMappers = new CdmIoMapperBase[]{
|
80
|
new CdmStringMapper("edition", "edition"),
|
81
|
new CdmStringMapper("volume", "volume"),
|
82
|
new CdmStringMapper("publicationTown", "placePublished"),
|
83
|
new CdmStringMapper("publisher", "publisher"),
|
84
|
new CdmStringMapper("isbn", "isbn"),
|
85
|
new CdmStringMapper("pageString", "pages"),
|
86
|
new CdmStringMapper("series", "series"),
|
87
|
new CdmStringMapper("issn", "issn"),
|
88
|
new CdmStringMapper("url", "uri")
|
89
|
};
|
90
|
|
91
|
|
92
|
protected static String[] operationalAttributes = new String[]{
|
93
|
"refId", "refCache", "nomRefCache", "preliminaryFlag", "inRefFk", "title", "nomTitleAbbrev",
|
94
|
"refAuthorString", "nomAuthorTeamFk",
|
95
|
"refCategoryFk", "thesisFlag", "informalRefCategory", "idInSource"
|
96
|
};
|
97
|
|
98
|
protected static String[] createdAndNotesAttributes = new String[]{
|
99
|
"created_When", "updated_When", "created_Who", "updated_Who", "notes"
|
100
|
};
|
101
|
|
102
|
protected static String[] unclearMappers = new String[]{
|
103
|
"dateString", "refYear", "nomStandard",
|
104
|
"refDepositedAt", "isPaper", "exportDate",
|
105
|
"refSourceFk"
|
106
|
};
|
107
|
|
108
|
|
109
|
protected boolean checkObligatoryAttributes(IImportConfigurator config){
|
110
|
boolean result = true;
|
111
|
|
112
|
try {
|
113
|
String strQuery = " SELECT Reference.* " +
|
114
|
" FROM Reference " +
|
115
|
// " INNER JOIN Reference ON Reference.RefId = RefDetail.RefFk " +
|
116
|
" WHERE (1=0) ";
|
117
|
BerlinModelImportConfigurator bmiConfig = (BerlinModelImportConfigurator)config;
|
118
|
Source source = bmiConfig.getSource();
|
119
|
ResultSet rs = source.getResultSet(strQuery);
|
120
|
int colCount = rs.getMetaData().getColumnCount();
|
121
|
Set<String> existingAttributes = new HashSet<String>();
|
122
|
for (int c = 0; c < colCount ; c++){
|
123
|
existingAttributes.add(rs.getMetaData().getColumnLabel(c+1).toLowerCase());
|
124
|
}
|
125
|
Set<String> obligatoryAttributes = getObligatoryAttributes(true);
|
126
|
|
127
|
obligatoryAttributes.removeAll(existingAttributes);
|
128
|
for (String attr : obligatoryAttributes){
|
129
|
logger.warn("Missing attribute: " + attr);
|
130
|
}
|
131
|
|
132
|
//additional Attributes
|
133
|
obligatoryAttributes = getObligatoryAttributes(true);
|
134
|
|
135
|
existingAttributes.removeAll(obligatoryAttributes);
|
136
|
for (String attr : existingAttributes){
|
137
|
logger.warn("Additional attribute: " + attr);
|
138
|
}
|
139
|
} catch (SQLException e) {
|
140
|
logger.error(e);
|
141
|
e.printStackTrace();
|
142
|
result = false;
|
143
|
}
|
144
|
return result;
|
145
|
}
|
146
|
|
147
|
protected Set<String> getObligatoryAttributes(boolean lowerCase){
|
148
|
Set<String> result = new HashSet<String>();
|
149
|
result.addAll(Arrays.asList(unclearMappers));
|
150
|
result.addAll(Arrays.asList(createdAndNotesAttributes));
|
151
|
result.addAll(Arrays.asList(operationalAttributes));
|
152
|
CdmIoMapping mapping = new CdmIoMapping();
|
153
|
for (CdmIoMapperBase mapper : classMappers){
|
154
|
mapping.addMapper(mapper);
|
155
|
}
|
156
|
result.addAll(mapping.getSourceAttributes());
|
157
|
if (lowerCase){
|
158
|
Set<String> lowerCaseResult = new HashSet<String>();
|
159
|
for (String str : result){
|
160
|
if (str != null){lowerCaseResult.add(str.toLowerCase());}
|
161
|
}
|
162
|
result = lowerCaseResult;
|
163
|
}
|
164
|
return result;
|
165
|
}
|
166
|
|
167
|
|
168
|
//type to count the references nomReferences that have been created and saved
|
169
|
private class RefCounter{
|
170
|
RefCounter() {nomRefCount = 0; referenceCount = 0;};
|
171
|
int nomRefCount;
|
172
|
int referenceCount;
|
173
|
public String toString(){return String.valueOf(nomRefCount) + "," +String.valueOf(referenceCount);};
|
174
|
}
|
175
|
|
176
|
/* (non-Javadoc)
|
177
|
* @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
|
178
|
*/
|
179
|
@Override
|
180
|
protected boolean doCheck(IImportConfigurator config){
|
181
|
boolean result = true;
|
182
|
BerlinModelImportConfigurator bmiConfig = (BerlinModelImportConfigurator)config;
|
183
|
result &= checkArticlesWithoutJournal(bmiConfig);
|
184
|
result &= checkPartOfJournal(bmiConfig);
|
185
|
result &= checkPartOfUnresolved(bmiConfig);
|
186
|
result &= checkPartOfPartOf(bmiConfig);
|
187
|
result &= checkPartOfArticle(bmiConfig);
|
188
|
result &= checkJournalsWithSeries(bmiConfig);
|
189
|
result &= checkObligatoryAttributes(bmiConfig);
|
190
|
|
191
|
if (result == false ){System.out.println("========================================================");}
|
192
|
|
193
|
|
194
|
return result;
|
195
|
}
|
196
|
|
197
|
|
198
|
|
199
|
private boolean doPreliminaryRefDetails(IImportConfigurator config, CdmApplicationController cdmApp,
|
200
|
Map<String, MapWrapper<? extends CdmBase>> stores){
|
201
|
|
202
|
MapWrapper<TeamOrPersonBase> authorMap = (MapWrapper<TeamOrPersonBase>)stores.get(ICdmIO.AUTHOR_STORE);
|
203
|
MapWrapper<ReferenceBase> refDetailMap = (MapWrapper<ReferenceBase>)stores.get(ICdmIO.REF_DETAIL_STORE);
|
204
|
MapWrapper<ReferenceBase> nomRefDetailMap = (MapWrapper<ReferenceBase>)stores.get(ICdmIO.NOMREF_DETAIL_STORE);
|
205
|
|
206
|
BerlinModelImportConfigurator bmiConfig = (BerlinModelImportConfigurator)config;
|
207
|
Source source = bmiConfig.getSource();
|
208
|
boolean success = true;
|
209
|
logger.info("start makeRefDetails ...");
|
210
|
|
211
|
IReferenceService referenceService = cdmApp.getReferenceService();
|
212
|
|
213
|
try {
|
214
|
//get data from database
|
215
|
String strQuery =
|
216
|
" SELECT RefDetail.*, Reference.RefYear " +
|
217
|
" FROM RefDetail " +
|
218
|
" INNER JOIN Reference ON Reference.RefId = RefDetail.RefFk " +
|
219
|
" WHERE (1=1) AND (RefDetail.PreliminaryFlag = 1)";
|
220
|
|
221
|
ResultSet rs = source.getResultSet(strQuery);
|
222
|
String namespace = "RefDetail";
|
223
|
|
224
|
int i = 0;
|
225
|
RefCounter refCounter = new RefCounter();
|
226
|
while (rs.next()){
|
227
|
|
228
|
if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("RefDetails handled: " + (i-1) );}
|
229
|
int refDetailId = rs.getInt("refDetailId");
|
230
|
String refYear = rs.getString("RefYear");
|
231
|
|
232
|
//nomRef
|
233
|
String fullNomRefCache = rs.getString("fullNomRefCache");
|
234
|
if (! CdmUtils.Nz(fullNomRefCache).trim().equals("") ){
|
235
|
Generic genericReference = Generic.NewInstance();
|
236
|
genericReference.setTitleCache(fullNomRefCache);
|
237
|
nomRefDetailMap.put(refDetailId, genericReference);
|
238
|
//refId, created, notes
|
239
|
doIdCreatedUpdatedNotes(bmiConfig, genericReference, rs, refDetailId, namespace );
|
240
|
//year
|
241
|
genericReference.setDatePublished(ImportHelper.getDatePublished(refYear));
|
242
|
refCounter.nomRefCount++;
|
243
|
}
|
244
|
|
245
|
//biblioRef
|
246
|
String fullRefCache = rs.getString("fullRefCache");
|
247
|
if (! CdmUtils.Nz(fullRefCache).trim().equals("") &&
|
248
|
fullRefCache.equals(fullNomRefCache)){
|
249
|
Generic genericReference = Generic.NewInstance();
|
250
|
genericReference.setTitleCache(fullRefCache);
|
251
|
refDetailMap.put(refDetailId, genericReference);
|
252
|
|
253
|
//refId, created, notes
|
254
|
doIdCreatedUpdatedNotes(bmiConfig, genericReference, rs, refDetailId, namespace );
|
255
|
//year
|
256
|
genericReference.setDatePublished(ImportHelper.getDatePublished(refYear));
|
257
|
refCounter.referenceCount++;
|
258
|
}
|
259
|
|
260
|
|
261
|
//TODO
|
262
|
//SecondarySources
|
263
|
//IdInSource
|
264
|
}
|
265
|
//save and store in map
|
266
|
logger.info("Save nomenclatural preliminary references (" + refCounter.nomRefCount + ")");
|
267
|
referenceService.saveReferenceAll(nomRefDetailMap.objects());
|
268
|
logger.info("Save bibliographical preliminary references (" + refCounter.referenceCount +")");
|
269
|
referenceService.saveReferenceAll(refDetailMap.objects());
|
270
|
|
271
|
} catch (SQLException e) {
|
272
|
logger.error("SQLException:" + e);
|
273
|
return false;
|
274
|
}
|
275
|
return success;
|
276
|
}
|
277
|
|
278
|
|
279
|
|
280
|
@Override
|
281
|
protected boolean doInvoke(IImportConfigurator config,
|
282
|
Map<String, MapWrapper<? extends CdmBase>> stores){
|
283
|
|
284
|
MapWrapper<TeamOrPersonBase> authorMap = (MapWrapper<TeamOrPersonBase>)stores.get(ICdmIO.AUTHOR_STORE);
|
285
|
|
286
|
BerlinModelImportConfigurator bmiConfig = (BerlinModelImportConfigurator)config;
|
287
|
Source source = bmiConfig.getSource();
|
288
|
CdmApplicationController cdmApp = config.getCdmAppController();
|
289
|
boolean success = true;
|
290
|
MapWrapper<ReferenceBase> referenceStore= new MapWrapper<ReferenceBase>(null);
|
291
|
MapWrapper<ReferenceBase> nomRefStore= new MapWrapper<ReferenceBase>(null);
|
292
|
|
293
|
//preliminary RefDetails //TODO -> move to own class ?
|
294
|
doPreliminaryRefDetails(config, cdmApp, stores);
|
295
|
|
296
|
logger.info("start makeReferences ...");
|
297
|
IReferenceService referenceService = cdmApp.getReferenceService();
|
298
|
|
299
|
try {
|
300
|
//get data from database
|
301
|
String strQueryBase =
|
302
|
" SELECT Reference.* , InReference.RefId as InRefId, InReference.RefCategoryFk as InRefCategoryFk, " +
|
303
|
" InInReference.RefId as InInRefId, InInReference.RefCategoryFk as InInRefCategoryFk, " +
|
304
|
" InReference.InRefFk AS InRefInRefFk, InInReference.InRefFk AS InInRefInRefFk " +
|
305
|
" FROM Reference AS InInReference " +
|
306
|
" RIGHT OUTER JOIN Reference AS InReference ON InInReference.RefId = InReference.InRefFk " +
|
307
|
" RIGHT OUTER JOIN Reference ON InReference.RefId = dbo.Reference.InRefFk " +
|
308
|
" WHERE (1=1) ";
|
309
|
//strQueryBase += " AND Reference.refId = 1933 " ; //7000000
|
310
|
String strQueryNoInRef = strQueryBase +
|
311
|
" AND (Reference.InRefFk is NULL) ";
|
312
|
|
313
|
String strQuery1InRef = strQueryBase +
|
314
|
" AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NULL) ";
|
315
|
|
316
|
String strQuery2InRef = strQueryBase +
|
317
|
" AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NULL) ";
|
318
|
|
319
|
String strQueryTesMaxRecursion = strQueryBase +
|
320
|
" AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NOT NULL) ";
|
321
|
|
322
|
ResultSet testMaxRecursionResultSet = source.getResultSet(strQueryTesMaxRecursion);
|
323
|
if (testMaxRecursionResultSet.next() == true){
|
324
|
logger.error("Maximum allowed InReference recursions exceeded in Berlin Model. Maximum recursion level is 2.");
|
325
|
return false;
|
326
|
}
|
327
|
|
328
|
if (bmiConfig.getDoReferences() == CONCEPT_REFERENCES){
|
329
|
strQueryNoInRef += " AND ( Reference.refId IN ( SELECT ptRefFk FROM PTaxon) ) ";
|
330
|
}
|
331
|
|
332
|
List<ResultSet> resultSetList = new ArrayList<ResultSet>();
|
333
|
resultSetList.add(source.getResultSet(strQueryNoInRef));
|
334
|
if (bmiConfig.getDoReferences() == ALL || bmiConfig.getDoReferences() == NOMENCLATURAL){
|
335
|
resultSetList.add(source.getResultSet(strQuery1InRef));
|
336
|
resultSetList.add(source.getResultSet(strQuery2InRef));
|
337
|
}
|
338
|
|
339
|
String namespace = "Reference";
|
340
|
|
341
|
int j = 0;
|
342
|
Iterator<ResultSet> resultSetListIterator = resultSetList.listIterator();
|
343
|
//for each resultsetlist
|
344
|
while (resultSetListIterator.hasNext()){
|
345
|
int i = 0;
|
346
|
RefCounter refCounter = new RefCounter();
|
347
|
|
348
|
ResultSet rs = resultSetListIterator.next();
|
349
|
//for each resultset
|
350
|
while (rs.next()){
|
351
|
|
352
|
if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("References handled: " + (i-1) + " in round " + j);}
|
353
|
|
354
|
Map<String, Object> valueMap = new HashMap<String, Object>();
|
355
|
int colCount = rs.getMetaData().getColumnCount();
|
356
|
for (int c = 0; c < colCount ; c++){
|
357
|
Object value = rs.getObject(c+1);
|
358
|
String label = rs.getMetaData().getColumnLabel(c+1).toLowerCase();
|
359
|
if (value != null && ! CdmUtils.Nz(value.toString()).trim().equals("")){
|
360
|
valueMap.put(label, value);
|
361
|
}
|
362
|
}
|
363
|
|
364
|
Integer categoryFk = (Integer)valueMap.get("refCategoryFk".toLowerCase());
|
365
|
Integer refId = (Integer)valueMap.get("refId".toLowerCase());
|
366
|
|
367
|
|
368
|
StrictReferenceBase referenceBase;
|
369
|
try {
|
370
|
logger.debug("RefCategoryFk: " + categoryFk);
|
371
|
|
372
|
if (categoryFk == REF_JOURNAL){
|
373
|
referenceBase = makeJournal(valueMap);
|
374
|
}else if(categoryFk == REF_BOOK){
|
375
|
referenceBase = makeBook(valueMap, referenceStore, nomRefStore);
|
376
|
}else if(categoryFk == REF_DATABASE){
|
377
|
referenceBase = makeDatabase(valueMap);
|
378
|
}else if(categoryFk == REF_INFORMAL){
|
379
|
referenceBase = makeInformal(valueMap);
|
380
|
}else if(categoryFk == REF_WEBSITE){
|
381
|
referenceBase = makeWebSite(valueMap);
|
382
|
}else if(categoryFk == REF_UNKNOWN){
|
383
|
referenceBase = makeUnknown(valueMap);
|
384
|
}else if(categoryFk == REF_PRINT_SERIES){
|
385
|
referenceBase = makePrintSeries(valueMap);
|
386
|
}else if(categoryFk == REF_CONFERENCE_PROCEEDINGS){
|
387
|
referenceBase = makeProceedings(valueMap);
|
388
|
}else if(categoryFk == REF_ARTICLE){
|
389
|
referenceBase = makeArticle(valueMap, referenceStore, nomRefStore);
|
390
|
}else if(categoryFk == REF_JOURNAL_VOLUME){
|
391
|
referenceBase = makeJournalVolume(valueMap);
|
392
|
}else if(categoryFk == REF_PART_OF_OTHER_TITLE){
|
393
|
referenceBase = makePartOfOtherTitle(valueMap, referenceStore, nomRefStore);
|
394
|
}else{
|
395
|
logger.warn("Unknown categoryFk (" + categoryFk + "). Create 'Generic instead'");
|
396
|
referenceBase = Generic.NewInstance();
|
397
|
}
|
398
|
|
399
|
|
400
|
String refYear = (String)valueMap.get("refYear".toLowerCase());
|
401
|
|
402
|
//refId, created, notes
|
403
|
doIdCreatedUpdatedNotes(bmiConfig, referenceBase, rs, refId, namespace );
|
404
|
//refYear
|
405
|
referenceBase.setDatePublished(ImportHelper.getDatePublished(refYear));
|
406
|
|
407
|
//
|
408
|
success &= makeNomAndBiblioReference(rs, refId, referenceBase, refCounter,
|
409
|
referenceStore, nomRefStore, authorMap, stores );
|
410
|
|
411
|
} catch (Exception e) {
|
412
|
logger.warn("Reference with BM refId " + refId + " threw Exception and could not be saved");
|
413
|
e.printStackTrace();
|
414
|
success = false;
|
415
|
return success;
|
416
|
}
|
417
|
} // end resultSet
|
418
|
|
419
|
//for the concept reference a fixed uuid may be needed -> change uuid
|
420
|
ReferenceBase sec = referenceStore.get(bmiConfig.getSourceSecId());
|
421
|
if (sec == null){
|
422
|
sec = nomRefStore.get(bmiConfig.getSourceSecId());
|
423
|
}
|
424
|
if (sec != null){
|
425
|
sec.setUuid(bmiConfig.getSecUuid());
|
426
|
logger.info("SecUuid changed to: " + bmiConfig.getSecUuid());
|
427
|
}
|
428
|
|
429
|
//save and store in map
|
430
|
logger.info("Save nomenclatural references (" + refCounter.nomRefCount + ")");
|
431
|
referenceService.saveReferenceAll(nomRefStore.objects());
|
432
|
logger.info("Save bibliographical references (" + refCounter.referenceCount +")");
|
433
|
referenceService.saveReferenceAll(referenceStore.objects());
|
434
|
j++;
|
435
|
}//end resultSetList
|
436
|
|
437
|
logger.info("end makeReferences ...");
|
438
|
return success;
|
439
|
} catch (SQLException e) {
|
440
|
logger.error("SQLException:" + e);
|
441
|
return false;
|
442
|
}
|
443
|
}
|
444
|
|
445
|
private boolean makeNomAndBiblioReference(ResultSet rs,
|
446
|
int refId,
|
447
|
StrictReferenceBase referenceBase,
|
448
|
RefCounter refCounter,
|
449
|
MapWrapper<ReferenceBase> referenceStore,
|
450
|
MapWrapper<ReferenceBase> nomRefStore,
|
451
|
MapWrapper<TeamOrPersonBase> authorMap,
|
452
|
Map<String, MapWrapper<? extends CdmBase>> stores
|
453
|
) throws SQLException{
|
454
|
|
455
|
MapWrapper<ReferenceBase> referenceMap = (MapWrapper<ReferenceBase>)stores.get(ICdmIO.REFERENCE_STORE);
|
456
|
MapWrapper<ReferenceBase> nomRefMap = (MapWrapper<ReferenceBase>)stores.get(ICdmIO.NOMREF_STORE);
|
457
|
|
458
|
|
459
|
String refCache = rs.getString("refCache");
|
460
|
String nomRefCache = rs.getString("nomRefCache");
|
461
|
String title = rs.getString("title");
|
462
|
String nomTitleAbbrev = rs.getString("nomTitleAbbrev");
|
463
|
boolean isPreliminary = rs.getBoolean("PreliminaryFlag");
|
464
|
String refAuthorString = rs.getString("refAuthorString");
|
465
|
int nomAuthorTeamFk = rs.getInt("NomAuthorTeamFk");
|
466
|
TeamOrPersonBase nomAuthor = authorMap.get(nomAuthorTeamFk);
|
467
|
|
468
|
boolean hasNomRef = false;
|
469
|
//is Nomenclatural Reference
|
470
|
if ( (! CdmUtils.Nz(nomRefCache).equals("") && isPreliminary) || (! CdmUtils.Nz(nomTitleAbbrev).equals("") && ! isPreliminary) ){
|
471
|
referenceBase.setTitle(nomTitleAbbrev);
|
472
|
TeamOrPersonBase author = getAuthorTeam(refAuthorString , nomAuthor, true);
|
473
|
referenceBase.setAuthorTeam(author);
|
474
|
//referenceBase.setNomenclaturallyRelevant(true);
|
475
|
if (isPreliminary){
|
476
|
referenceBase.setTitleCache(nomRefCache);
|
477
|
}
|
478
|
if (! nomRefStore.containsId(refId)){
|
479
|
if (referenceBase == null){
|
480
|
logger.warn("refBase is null");
|
481
|
}
|
482
|
nomRefStore.put(refId, referenceBase);
|
483
|
}else{
|
484
|
logger.warn("Duplicate refId in Berlin Model database. Second reference was not imported !!");
|
485
|
}
|
486
|
nomRefMap.put(refId, referenceBase);
|
487
|
hasNomRef = true;
|
488
|
refCounter.nomRefCount++;
|
489
|
}
|
490
|
//is bibliographical Reference
|
491
|
if ((! CdmUtils.Nz(refCache).equals("") && isPreliminary) || (! CdmUtils.Nz(title).equals("") && ! isPreliminary) || hasNomRef == false){
|
492
|
if (hasNomRef){
|
493
|
referenceBase = (StrictReferenceBase)referenceBase.clone();
|
494
|
}
|
495
|
referenceBase.setTitle(title);
|
496
|
TeamOrPersonBase author = getAuthorTeam(refAuthorString , nomAuthor, false);
|
497
|
referenceBase.setAuthorTeam(author);
|
498
|
referenceBase.setNomenclaturallyRelevant(false);
|
499
|
if (isPreliminary){
|
500
|
referenceBase.setTitleCache(refCache);
|
501
|
}
|
502
|
if (! referenceStore.containsId(refId)){
|
503
|
referenceStore.put(refId, referenceBase);
|
504
|
}else{
|
505
|
logger.warn("Duplicate refId in Berlin Model database. Second reference was not imported !!");
|
506
|
}
|
507
|
referenceMap.put(refId, referenceBase);
|
508
|
refCounter.referenceCount++;
|
509
|
}
|
510
|
return true;
|
511
|
|
512
|
}
|
513
|
|
514
|
|
515
|
|
516
|
private StrictReferenceBase makeArticle (Map<String, Object> valueMap, MapWrapper<ReferenceBase> referenceStore, MapWrapper<ReferenceBase> nomRefStore){
|
517
|
Article article = Article.NewInstance();
|
518
|
Object inRefFk = valueMap.get("inRefFk".toLowerCase());
|
519
|
Integer inRefCategoryFk = (Integer)valueMap.get("inRefCategoryFk".toLowerCase());
|
520
|
Integer refId = (Integer)valueMap.get("refId".toLowerCase());
|
521
|
//
|
522
|
// //FIXME pages
|
523
|
// String pages = (String)valueMap.get("pages".toLowerCase());
|
524
|
// String series = (String)valueMap.get("series".toLowerCase());
|
525
|
// String volume = (String)valueMap.get("volume".toLowerCase());
|
526
|
// String url = (String)valueMap.get("url".toLowerCase());
|
527
|
|
528
|
|
529
|
if (inRefFk != null){
|
530
|
if (inRefCategoryFk == REF_JOURNAL){
|
531
|
int inRefFkInt = (Integer)inRefFk;
|
532
|
if (nomRefStore.containsId(inRefFkInt) || referenceStore.containsId(inRefFkInt)){
|
533
|
ReferenceBase inJournal = nomRefStore.get(inRefFkInt);
|
534
|
if (inJournal == null){
|
535
|
inJournal = referenceStore.get(inRefFkInt);
|
536
|
logger.info("inJournal (" + inRefFkInt + ") found in referenceStore instead of nomRefStore.");
|
537
|
nomRefStore.put(inRefFkInt, inJournal);
|
538
|
}
|
539
|
if (inJournal == null){
|
540
|
logger.warn("inJournal for " + inRefFkInt + " is null. "+
|
541
|
" InReference relation could not be set");
|
542
|
}else if (Journal.class.isAssignableFrom(inJournal.getClass())){
|
543
|
article.setInJournal((Journal)inJournal);
|
544
|
// article.setPages(pages);
|
545
|
// article.setSeries(series);
|
546
|
// article.setVolume(volume);
|
547
|
// article.setUri(url);
|
548
|
//logger.info("InJournal success " + inRefFkInt);
|
549
|
}else{
|
550
|
logger.warn("InJournal is not of type journal but of type " + inJournal.getClass().getSimpleName() +
|
551
|
" Inreference relation could not be set");
|
552
|
}
|
553
|
}else{
|
554
|
logger.error("Journal (refId = " + inRefFkInt + " ) for Article (refID = " + refId +") could not be found in nomRefStore. Inconsistency error. ");
|
555
|
//success = false;;
|
556
|
}
|
557
|
}else{
|
558
|
logger.warn("Wrong inrefCategory for Article (refID = " + refId +"). Type must be 'Journal' but was not (RefCategoryFk=" + inRefCategoryFk + "))." +
|
559
|
" InReference was not added to Article! ");
|
560
|
}
|
561
|
}
|
562
|
makeStandardMapper(valueMap, article); //url, pages, series, volume
|
563
|
return article;
|
564
|
}
|
565
|
|
566
|
private StrictReferenceBase makePartOfOtherTitle (Map<String, Object> valueMap, MapWrapper<ReferenceBase> referenceStore, MapWrapper<ReferenceBase> nomRefStore){
|
567
|
StrictReferenceBase result;
|
568
|
Object inRefFk = valueMap.get("inRefFk".toLowerCase());
|
569
|
Integer inRefCategoryFk = (Integer)valueMap.get("inRefCategoryFk".toLowerCase());
|
570
|
Integer refId = (Integer)valueMap.get("refId".toLowerCase());
|
571
|
|
572
|
if (inRefCategoryFk == REF_BOOK){
|
573
|
//BookSection
|
574
|
BookSection bookSection = BookSection.NewInstance();
|
575
|
result = bookSection;
|
576
|
if (inRefFk != null){
|
577
|
int inRefFkInt = (Integer)inRefFk;
|
578
|
if (nomRefStore.containsId(inRefFkInt) || referenceStore.containsId(inRefFkInt)){
|
579
|
ReferenceBase inBook = nomRefStore.get(inRefFkInt);
|
580
|
if (inBook == null){
|
581
|
inBook = referenceStore.get(inRefFkInt);
|
582
|
logger.info("inBook (" + inRefFkInt + ") found in referenceStore instead of nomRefStore.");
|
583
|
nomRefStore.put(inRefFkInt, inBook);
|
584
|
}
|
585
|
if (inBook == null){
|
586
|
logger.warn("inBook for " + inRefFkInt + " is null. "+
|
587
|
" InReference relation could not be set");;
|
588
|
}else if (Book.class.isAssignableFrom(inBook.getClass())){
|
589
|
bookSection.setInBook((Book)inBook);
|
590
|
//TODO
|
591
|
}else{
|
592
|
logger.warn("InBook is not of type book but of type " + inBook.getClass().getSimpleName() +
|
593
|
" Inreference relation could not be set");
|
594
|
}
|
595
|
}else{
|
596
|
logger.error("Book (refId = " + inRefFkInt + ") for part_of_other_title (refID = " + refId +") could not be found in nomRefStore. Inconsistency error. ");
|
597
|
//success = false;
|
598
|
}
|
599
|
}
|
600
|
}else if (inRefCategoryFk == REF_ARTICLE){
|
601
|
//Article
|
602
|
//TODO
|
603
|
logger.warn("Reference (refId = " + refId + ") of type 'part_of_other_title' is part of 'article'." +
|
604
|
" This type is not implemented yet. Generic reference created instead") ;
|
605
|
result = Generic.NewInstance();
|
606
|
}else if (inRefCategoryFk == REF_JOURNAL){
|
607
|
//TODO
|
608
|
logger.warn("Reference (refId = " + refId + ") of type 'part_of_other_title' has inReference of type 'journal'." +
|
609
|
" This is not allowed! Generic reference created instead") ;
|
610
|
result = Generic.NewInstance();
|
611
|
result.addMarker(Marker.NewInstance(MarkerType.TO_BE_CHECKED(), true));
|
612
|
}else{
|
613
|
logger.warn("InReference type (catFk = " + inRefCategoryFk + ") of part-of-reference not recognized for refId " + refId + "." +
|
614
|
" Create 'Generic' reference instead");
|
615
|
result = Generic.NewInstance();
|
616
|
}
|
617
|
makeStandardMapper(valueMap, result); //url, pages
|
618
|
return result;
|
619
|
}
|
620
|
|
621
|
private StrictReferenceBase makeWebSite(Map<String, Object> valueMap){
|
622
|
if (logger.isDebugEnabled()){logger.debug("RefType 'Website'");}
|
623
|
WebPage webPage = WebPage.NewInstance();
|
624
|
makeStandardMapper(valueMap, webPage); //placePublished, publisher
|
625
|
return webPage;
|
626
|
}
|
627
|
|
628
|
private StrictReferenceBase makeUnknown(Map<String, Object> valueMap){
|
629
|
if (logger.isDebugEnabled()){logger.debug("RefType 'Unknown'");}
|
630
|
Generic generic = Generic.NewInstance();
|
631
|
// generic.setSeries(series);
|
632
|
makeStandardMapper(valueMap, generic); //pages, placePublished, publisher, series, volume
|
633
|
return generic;
|
634
|
}
|
635
|
|
636
|
private StrictReferenceBase makeInformal(Map<String, Object> valueMap){
|
637
|
if (logger.isDebugEnabled()){logger.debug("RefType 'Informal'");}
|
638
|
Generic generic = Generic.NewInstance();
|
639
|
// informal.setSeries(series);
|
640
|
makeStandardMapper(valueMap, generic);//editor, pages, placePublished, publisher, series, volume
|
641
|
return generic;
|
642
|
}
|
643
|
|
644
|
private StrictReferenceBase makeDatabase(Map<String, Object> valueMap){
|
645
|
if (logger.isDebugEnabled()){logger.debug("RefType 'Database'");}
|
646
|
Database database = Database.NewInstance();
|
647
|
makeStandardMapper(valueMap, database); //?
|
648
|
return database;
|
649
|
}
|
650
|
|
651
|
private StrictReferenceBase makeJournal(Map<String, Object> valueMap){
|
652
|
if (logger.isDebugEnabled()){logger.debug("RefType 'Journal'");}
|
653
|
Journal journal = Journal.NewInstance();
|
654
|
|
655
|
Set<String> omitAttributes = new HashSet<String>();
|
656
|
String series = "series";
|
657
|
// omitAttributes.add(series);
|
658
|
|
659
|
makeStandardMapper(valueMap, journal, omitAttributes); //issn,placePublished,publisher
|
660
|
// if (valueMap.get(series) != null){
|
661
|
// logger.warn("Series not yet implemented for journal!");
|
662
|
// }
|
663
|
return journal;
|
664
|
}
|
665
|
|
666
|
private StrictReferenceBase makeBook(Map<String, Object> valueMap, MapWrapper<ReferenceBase> referenceStore, MapWrapper<ReferenceBase> nomRefStore){
|
667
|
if (logger.isDebugEnabled()){logger.debug("RefType 'Book'");}
|
668
|
Book book = Book.NewInstance();
|
669
|
Integer refId = (Integer)valueMap.get("refId".toLowerCase());
|
670
|
|
671
|
//Set bookAttributes = new String[]{"edition", "isbn", "pages","publicationTown","publisher","volume"};
|
672
|
|
673
|
Set<String> omitAttributes = new HashSet<String>();
|
674
|
String attrSeries = "series";
|
675
|
// omitAttributes.add(attrSeries);
|
676
|
|
677
|
makeStandardMapper(valueMap, book, omitAttributes);
|
678
|
|
679
|
//Series (as String)
|
680
|
PrintSeries printSeries = null;
|
681
|
if (valueMap.get(attrSeries) != null){
|
682
|
String series = (String)valueMap.get("title".toLowerCase());
|
683
|
if (series == null){
|
684
|
String nomTitle = (String)valueMap.get("nomTitleAbbrev".toLowerCase());
|
685
|
series = nomTitle;
|
686
|
}
|
687
|
printSeries = PrintSeries.NewInstance(series);
|
688
|
//TODO only one for ref and nomRef
|
689
|
logger.warn("Implementation of printSeries is preliminary");
|
690
|
}
|
691
|
Object inRefFk = valueMap.get("inRefFk".toLowerCase());
|
692
|
//Series (as Reference)
|
693
|
if (inRefFk != null){
|
694
|
int inRefFkInt = (Integer)inRefFk;
|
695
|
if (nomRefStore.containsId(inRefFkInt) || referenceStore.containsId(inRefFkInt)){
|
696
|
ReferenceBase inSeries = nomRefStore.get(inRefFkInt);
|
697
|
if (inSeries == null){
|
698
|
inSeries = referenceStore.get(inRefFkInt);
|
699
|
logger.info("inSeries (" + inRefFkInt + ") found in referenceStore instead of nomRefStore.");
|
700
|
nomRefStore.put(inRefFkInt, inSeries);
|
701
|
}
|
702
|
if (inSeries == null){
|
703
|
logger.warn("inSeries for " + inRefFkInt + " is null. "+
|
704
|
" InReference relation could not be set");;
|
705
|
}else if (PrintSeries.class.isAssignableFrom(inSeries.getClass())){
|
706
|
book.setInSeries((PrintSeries)inSeries);
|
707
|
//TODO
|
708
|
}else{
|
709
|
logger.warn("inSeries is not of type PrintSeries but of type " + inSeries.getClass().getSimpleName() +
|
710
|
" Inreference relation could not be set");
|
711
|
}
|
712
|
}else{
|
713
|
logger.error("PrintSeries (refId = " + inRefFkInt + ") for book (refID = " + refId +") could not be found in nomRefStore. Inconsistency error. ");
|
714
|
//success = false;
|
715
|
}
|
716
|
}
|
717
|
if (book.getInSeries() != null && printSeries != null){
|
718
|
logger.warn("Book has series string and inSeries reference. Can not take both. Series string neglected");
|
719
|
}else{
|
720
|
book.setInSeries(printSeries);
|
721
|
}
|
722
|
book.setEditor(null);
|
723
|
return book;
|
724
|
|
725
|
}
|
726
|
|
727
|
private StrictReferenceBase makePrintSeries(Map<String, Object> valueMap){
|
728
|
if (logger.isDebugEnabled()){logger.debug("RefType 'PrintSeries'");}
|
729
|
PrintSeries printSeries = PrintSeries.NewInstance();
|
730
|
makeStandardMapper(valueMap, printSeries, null);
|
731
|
return printSeries;
|
732
|
}
|
733
|
|
734
|
private StrictReferenceBase makeProceedings(Map<String, Object> valueMap){
|
735
|
if (logger.isDebugEnabled()){logger.debug("RefType 'Proceedings'");}
|
736
|
Proceedings proceedings = Proceedings.NewInstance();
|
737
|
makeStandardMapper(valueMap, proceedings, null);
|
738
|
return proceedings;
|
739
|
}
|
740
|
|
741
|
private StrictReferenceBase makeJournalVolume(Map<String, Object> valueMap){
|
742
|
if (logger.isDebugEnabled()){logger.debug("RefType 'JournalVolume'");}
|
743
|
//Proceedings proceedings = Proceedings.NewInstance();
|
744
|
Generic journalVolume = Generic.NewInstance();
|
745
|
makeStandardMapper(valueMap, journalVolume, null);
|
746
|
logger.warn("Journal volumes not yet implemented. Generic created instead but with errors");
|
747
|
return journalVolume;
|
748
|
}
|
749
|
|
750
|
private boolean makeStandardMapper(Map<String, Object> valueMap, StrictReferenceBase ref){
|
751
|
return makeStandardMapper(valueMap, ref, null);
|
752
|
}
|
753
|
|
754
|
|
755
|
private boolean makeStandardMapper(Map<String, Object> valueMap, StrictReferenceBase ref, Set<String> omitAttributes){
|
756
|
if (omitAttributes == null){
|
757
|
omitAttributes = new HashSet<String>();
|
758
|
}
|
759
|
boolean result = true;
|
760
|
for (CdmIoMapperBase mapper : classMappers){
|
761
|
String sourceAttribute = mapper.getSourceAttribute().toLowerCase();
|
762
|
Object value = valueMap.get(sourceAttribute);
|
763
|
if (value != null){
|
764
|
String destinationAttribute = mapper.getDestinationAttribute();
|
765
|
if (! omitAttributes.contains(destinationAttribute)){
|
766
|
result &= ImportHelper.addValue(value, ref, destinationAttribute, mapper.getTypeClass(), OVERWRITE, OBLIGATORY);
|
767
|
}
|
768
|
}
|
769
|
}
|
770
|
return true;
|
771
|
}
|
772
|
|
773
|
private static TeamOrPersonBase getAuthorTeam(String authorString, TeamOrPersonBase nomAuthor, boolean preferNomeclaturalAuthor){
|
774
|
TeamOrPersonBase result;
|
775
|
if (preferNomeclaturalAuthor){
|
776
|
if (nomAuthor != null){
|
777
|
result = nomAuthor;
|
778
|
}else{
|
779
|
if (CdmUtils.Nz(authorString).equals("")){
|
780
|
result = null;
|
781
|
}else{
|
782
|
TeamOrPersonBase team = Team.NewInstance();
|
783
|
//TODO which one to use??
|
784
|
team.setNomenclaturalTitle(authorString);
|
785
|
team.setTitleCache(authorString);
|
786
|
result = team;
|
787
|
}
|
788
|
}
|
789
|
}else{ //prefer bibliographic
|
790
|
if (! CdmUtils.Nz(authorString).equals("")){
|
791
|
TeamOrPersonBase team = Team.NewInstance();
|
792
|
//TODO which one to use??
|
793
|
team.setNomenclaturalTitle(authorString);
|
794
|
team.setTitleCache(authorString);
|
795
|
result = team;
|
796
|
}else{
|
797
|
result = nomAuthor;
|
798
|
}
|
799
|
}
|
800
|
return result;
|
801
|
}
|
802
|
|
803
|
|
804
|
|
805
|
/* (non-Javadoc)
|
806
|
* @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
|
807
|
*/
|
808
|
protected boolean isIgnore(IImportConfigurator config){
|
809
|
return (config.getDoReferences() == IImportConfigurator.DO_REFERENCES.NONE);
|
810
|
}
|
811
|
|
812
|
|
813
|
|
814
|
//******************************** CHECK *************************************************
|
815
|
|
816
|
private static boolean checkArticlesWithoutJournal(BerlinModelImportConfigurator bmiConfig){
|
817
|
try {
|
818
|
boolean result = true;
|
819
|
Source source = bmiConfig.getSource();
|
820
|
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 " +
|
821
|
" 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 " +
|
822
|
" WHERE (Reference.RefCategoryFk = 1) AND (InRef.RefCategoryFk <> 9) ";
|
823
|
ResultSet resulSetarticlesWithoutJournal = source.getResultSet(strQueryArticlesWithoutJournal);
|
824
|
boolean firstRow = true;
|
825
|
while (resulSetarticlesWithoutJournal.next()){
|
826
|
if (firstRow){
|
827
|
System.out.println("========================================================");
|
828
|
logger.warn("There are Articles with wrong inRef type!");
|
829
|
System.out.println("========================================================");
|
830
|
}
|
831
|
int refId = resulSetarticlesWithoutJournal.getInt("RefId");
|
832
|
int categoryFk = resulSetarticlesWithoutJournal.getInt("RefCategoryFk");
|
833
|
String cat = resulSetarticlesWithoutJournal.getString("RefCategoryAbbrev");
|
834
|
int inRefFk = resulSetarticlesWithoutJournal.getInt("InRefId");
|
835
|
int inRefCategoryFk = resulSetarticlesWithoutJournal.getInt("InRefCatFk");
|
836
|
String inRefCat = resulSetarticlesWithoutJournal.getString("InRefCat");
|
837
|
String refCache = resulSetarticlesWithoutJournal.getString("RefCache");
|
838
|
String nomRefCache = resulSetarticlesWithoutJournal.getString("nomRefCache");
|
839
|
String title = resulSetarticlesWithoutJournal.getString("title");
|
840
|
String inRefTitle = resulSetarticlesWithoutJournal.getString("InRefTitle");
|
841
|
|
842
|
System.out.println("RefID:" + refId + "\n cat: " + cat +
|
843
|
"\n refCache: " + refCache + "\n nomRefCache: " + nomRefCache + "\n title: " + title +
|
844
|
"\n inRefFk: " + inRefFk + "\n inRefCategory: " + inRefCat +
|
845
|
"\n inRefTitle: " + inRefTitle );
|
846
|
result = firstRow = false;
|
847
|
}
|
848
|
|
849
|
return result;
|
850
|
} catch (SQLException e) {
|
851
|
e.printStackTrace();
|
852
|
return false;
|
853
|
}
|
854
|
}
|
855
|
|
856
|
private static boolean checkPartOfJournal(BerlinModelImportConfigurator bmiConfig){
|
857
|
try {
|
858
|
boolean result = true;
|
859
|
Source source = bmiConfig.getSource();
|
860
|
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 " +
|
861
|
" 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 " +
|
862
|
" WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 9) ";
|
863
|
ResultSet rs = source.getResultSet(strQueryPartOfJournal);
|
864
|
boolean firstRow = true;
|
865
|
while (rs.next()){
|
866
|
if (firstRow){
|
867
|
System.out.println("========================================================");
|
868
|
logger.warn("There are part-of-references that have a Journal as in-reference!");
|
869
|
System.out.println("========================================================");
|
870
|
}
|
871
|
int refId = rs.getInt("RefId");
|
872
|
int categoryFk = rs.getInt("RefCategoryFk");
|
873
|
String cat = rs.getString("RefCategoryAbbrev");
|
874
|
int inRefFk = rs.getInt("InRefId");
|
875
|
int inRefCategoryFk = rs.getInt("InRefCatFk");
|
876
|
String inRefCat = rs.getString("InRefCat");
|
877
|
String refCache = rs.getString("RefCache");
|
878
|
String nomRefCache = rs.getString("nomRefCache");
|
879
|
String title = rs.getString("title");
|
880
|
String inRefTitle = rs.getString("InRefTitle");
|
881
|
|
882
|
System.out.println("RefID:" + refId + "\n cat: " + cat +
|
883
|
"\n refCache: " + refCache + "\n nomRefCache: " + nomRefCache + "\n title: " + title +
|
884
|
"\n inRefFk: " + inRefFk + "\n inRefCategory: " + inRefCat +
|
885
|
"\n inRefTitle: " + inRefTitle );
|
886
|
result = firstRow = false;
|
887
|
}
|
888
|
|
889
|
return result;
|
890
|
} catch (SQLException e) {
|
891
|
e.printStackTrace();
|
892
|
return false;
|
893
|
}
|
894
|
}
|
895
|
|
896
|
|
897
|
private static boolean checkPartOfUnresolved(BerlinModelImportConfigurator bmiConfig){
|
898
|
try {
|
899
|
boolean result = true;
|
900
|
Source source = bmiConfig.getSource();
|
901
|
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 " +
|
902
|
" 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 " +
|
903
|
" WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 10) ";
|
904
|
ResultSet rs = source.getResultSet(strQueryPartOfJournal);
|
905
|
boolean firstRow = true;
|
906
|
while (rs.next()){
|
907
|
if (firstRow){
|
908
|
System.out.println("========================================================");
|
909
|
logger.warn("There are part-of-references that have an 'unresolved' in-reference!");
|
910
|
System.out.println("========================================================");
|
911
|
}
|
912
|
int refId = rs.getInt("RefId");
|
913
|
int categoryFk = rs.getInt("RefCategoryFk");
|
914
|
String cat = rs.getString("RefCategoryAbbrev");
|
915
|
int inRefFk = rs.getInt("InRefId");
|
916
|
int inRefCategoryFk = rs.getInt("InRefCatFk");
|
917
|
String inRefCat = rs.getString("InRefCat");
|
918
|
String refCache = rs.getString("RefCache");
|
919
|
String nomRefCache = rs.getString("nomRefCache");
|
920
|
String title = rs.getString("title");
|
921
|
String inRefTitle = rs.getString("InRefTitle");
|
922
|
|
923
|
System.out.println("RefID:" + refId + "\n cat: " + cat +
|
924
|
"\n refCache: " + refCache + "\n nomRefCache: " + nomRefCache + "\n title: " + title +
|
925
|
"\n inRefFk: " + inRefFk + "\n inRefCategory: " + inRefCat +
|
926
|
"\n inRefTitle: " + inRefTitle );
|
927
|
result = firstRow = false;
|
928
|
}
|
929
|
if (result == false){
|
930
|
System.out.println("\nChoose a specific type from the following reference types: \n" +
|
931
|
" 1) Article \n 2) Book \n 3) BookSection \n 4) CdDvd \n 5) ConferenceProceeding \n 6) Database\n" +
|
932
|
" 7) Generic \n 7) InProceedings \n 8) Journal \n 9) Map \n 10) Patent \n 11) PersonalCommunication\n" +
|
933
|
" 12) PrintSeries \n 13) Proceedings \n 14) Report \n 15) Thesis \n 16) WebPage");
|
934
|
}
|
935
|
return result;
|
936
|
} catch (SQLException e) {
|
937
|
e.printStackTrace();
|
938
|
return false;
|
939
|
}
|
940
|
}
|
941
|
|
942
|
private static boolean checkPartOfPartOf(BerlinModelImportConfigurator bmiConfig){
|
943
|
try {
|
944
|
boolean result = true;
|
945
|
Source source = bmiConfig.getSource();
|
946
|
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 " +
|
947
|
" FROM Reference " +
|
948
|
" INNER JOIN Reference AS InRef ON Reference.InRefFk = InRef.RefId " +
|
949
|
" INNER JOIN RefCategory ON Reference.RefCategoryFk = RefCategory.RefCategoryId " +
|
950
|
" INNER JOIN RefCategory AS InRefCategory ON InRef.RefCategoryFk = InRefCategory.RefCategoryId " +
|
951
|
" INNER JOIN Reference AS InInRef ON InRef.InRefFk = InInRef.RefId " +
|
952
|
" WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 2) ";
|
953
|
ResultSet rs = source.getResultSet(strQueryPartOfJournal);
|
954
|
boolean firstRow = true;
|
955
|
while (rs.next()){
|
956
|
if (firstRow){
|
957
|
System.out.println("========================================================");
|
958
|
logger.warn("There are part-of-references that are part of an other 'part-of' reference!\n" +
|
959
|
" This is invalid or ambigous. Please try to determine the reference types more detailed ");
|
960
|
System.out.println("========================================================");
|
961
|
}
|
962
|
int refId = rs.getInt("RefId");
|
963
|
int categoryFk = rs.getInt("RefCategoryFk");
|
964
|
String cat = rs.getString("RefCategoryAbbrev");
|
965
|
int inRefFk = rs.getInt("InRefId");
|
966
|
int inRefCategoryFk = rs.getInt("InRefCatFk");
|
967
|
String inRefCat = rs.getString("InRefCat");
|
968
|
String refCache = rs.getString("RefCache");
|
969
|
String nomRefCache = rs.getString("nomRefCache");
|
970
|
String title = rs.getString("title");
|
971
|
String inRefTitle = rs.getString("InRefTitle");
|
972
|
int inInRefId = rs.getInt("InInRefId");
|
973
|
String inInRefTitle = rs.getString("inInRefTitle");
|
974
|
int inInRefCategory = rs.getInt("inInRefCategory");
|
975
|
|
976
|
System.out.println("RefID:" + refId + "\n cat: " + cat +
|
977
|
"\n refCache: " + refCache + "\n nomRefCache: " + nomRefCache + "\n title: " + title +
|
978
|
"\n inRefFk: " + inRefFk + "\n inRefCategory: " + inRefCat +
|
979
|
"\n inRefTitle: " + inRefTitle + "\n inInRefId: " + inInRefId + "\n inInRefTitle: " + inInRefTitle +
|
980
|
"\n inInRefCategory: " + inInRefCategory );
|
981
|
result = firstRow = false;
|
982
|
}
|
983
|
if (result == false){
|
984
|
System.out.println("\nChoose a specific type from the following reference types: \n" +
|
985
|
" 1) BookSection - Book - PrintSeries \n" +
|
986
|
" 2) InProceedings - pProceedings - PrintSeries");
|
987
|
}
|
988
|
return result;
|
989
|
} catch (SQLException e) {
|
990
|
e.printStackTrace();
|
991
|
return false;
|
992
|
}
|
993
|
}
|
994
|
|
995
|
|
996
|
private static boolean checkPartOfArticle(BerlinModelImportConfigurator bmiConfig){
|
997
|
try {
|
998
|
boolean result = true;
|
999
|
Source source = bmiConfig.getSource();
|
1000
|
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 " +
|
1001
|
" 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 " +
|
1002
|
" WHERE (Reference.RefCategoryFk = 2) AND (InRef.RefCategoryFk = 1) ";
|
1003
|
ResultSet rs = source.getResultSet(strQueryPartOfJournal);
|
1004
|
boolean firstRow = true;
|
1005
|
while (rs.next()){
|
1006
|
if (firstRow){
|
1007
|
System.out.println("========================================================");
|
1008
|
logger.warn("There are part-of-references that have an article as in-reference!");
|
1009
|
System.out.println("========================================================");
|
1010
|
}
|
1011
|
int refId = rs.getInt("RefId");
|
1012
|
int categoryFk = rs.getInt("RefCategoryFk");
|
1013
|
String cat = rs.getString("RefCategoryAbbrev");
|
1014
|
int inRefFk = rs.getInt("InRefId");
|
1015
|
int inRefCategoryFk = rs.getInt("InRefCatFk");
|
1016
|
String inRefCat = rs.getString("InRefCat");
|
1017
|
String refCache = rs.getString("RefCache");
|
1018
|
String nomRefCache = rs.getString("nomRefCache");
|
1019
|
String title = rs.getString("title");
|
1020
|
String nomTitleAbbrev = rs.getString("nomTitleAbbrev");
|
1021
|
String inRefTitle = rs.getString("InRefTitle");
|
1022
|
String inRefnomTitleAbbrev = rs.getString("inRefnomTitleAbbrev");
|
1023
|
String inRefnomRefCache = rs.getString("inRefnomRefCache");
|
1024
|
String inRefCache = rs.getString("inRefCache");
|
1025
|
|
1026
|
System.out.println("RefID:" + refId + "\n cat: " + cat +
|
1027
|
"\n refCache: " + refCache + "\n nomRefCache: " + nomRefCache + "\n title: " + title + "\n titleAbbrev: " + nomTitleAbbrev +
|
1028
|
"\n inRefFk: " + inRefFk + "\n inRefCategory: " + inRefCat +
|
1029
|
"\n inRefTitle: " + inRefTitle + "\n inRefTitleAbbrev: " + inRefnomTitleAbbrev +
|
1030
|
"\n inRefnomRefCache: " + inRefnomRefCache + "\n inRefCache: " + inRefCache
|
1031
|
);
|
1032
|
result = firstRow = false;
|
1033
|
}
|
1034
|
|
1035
|
return result;
|
1036
|
} catch (SQLException e) {
|
1037
|
e.printStackTrace();
|
1038
|
return false;
|
1039
|
}
|
1040
|
}
|
1041
|
|
1042
|
private static boolean checkJournalsWithSeries(BerlinModelImportConfigurator bmiConfig){
|
1043
|
try {
|
1044
|
boolean result = true;
|
1045
|
Source source = bmiConfig.getSource();
|
1046
|
String strQueryArticlesWithoutJournal = "SELECT Reference.RefId, Reference.RefCategoryFk, Reference.RefCache, Reference.NomRefCache, Reference.Title, Reference.NomTitleAbbrev, RefCategory.RefCategoryAbbrev " +
|
1047
|
" FROM Reference INNER JOIN " +
|
1048
|
" RefCategory ON Reference.RefCategoryFk = RefCategory.RefCategoryId " +
|
1049
|
" WHERE (Reference.RefCategoryFk = 9) AND ( Reference.series is not null OR Reference.series <>'') ";
|
1050
|
ResultSet rs = source.getResultSet(strQueryArticlesWithoutJournal);
|
1051
|
boolean firstRow = true;
|
1052
|
while (rs.next()){
|
1053
|
if (firstRow){
|
1054
|
System.out.println("========================================================");
|
1055
|
logger.warn("There are Journals with series!");
|
1056
|
System.out.println("========================================================");
|
1057
|
}
|
1058
|
int refId = rs.getInt("RefId");
|
1059
|
int categoryFk = rs.getInt("RefCategoryFk");
|
1060
|
String cat = rs.getString("RefCategoryAbbrev");
|
1061
|
String nomRefCache = rs.getString("nomRefCache");
|
1062
|
String refCache = rs.getString("refCache");
|
1063
|
String title = rs.getString("title");
|
1064
|
String nomTitleAbbrev = rs.getString("nomTitleAbbrev");
|
1065
|
|
1066
|
System.out.println("RefID:" + refId + "\n cat: " + cat +
|
1067
|
"\n refCache: " + refCache + "\n nomRefCache: " + nomRefCache +
|
1068
|
"\n title: " + title + "\n nomTitleAbbrev: " + nomTitleAbbrev +
|
1069
|
"" );
|
1070
|
result = firstRow = false;
|
1071
|
}
|
1072
|
|
1073
|
return result;
|
1074
|
} catch (SQLException e) {
|
1075
|
e.printStackTrace();
|
1076
|
return false;
|
1077
|
}
|
1078
|
}
|
1079
|
|
1080
|
|
1081
|
//********************************** MAIN ************************************************
|
1082
|
|
1083
|
|
1084
|
/**
|
1085
|
* @param args
|
1086
|
*/
|
1087
|
public static void main(String[] args) {
|
1088
|
TimePeriod timePeriod = ImportHelper.getDatePublished("1756 - 1783");
|
1089
|
System.out.println(timePeriod.getYear());
|
1090
|
}
|
1091
|
|
1092
|
}
|