Revision 9740c8f1
Added by Andreas Müller over 2 years ago
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/reference/ris/in/RisReferenceImport.java | ||
---|---|---|
10 | 10 |
|
11 | 11 |
import java.io.ByteArrayInputStream; |
12 | 12 |
import java.io.InputStreamReader; |
13 |
import eu.etaxonomy.cdm.common.URI; |
|
14 | 13 |
import java.util.ArrayList; |
15 | 14 |
import java.util.Arrays; |
16 | 15 |
import java.util.HashSet; |
... | ... | |
23 | 22 |
|
24 | 23 |
import eu.etaxonomy.cdm.common.CdmUtils; |
25 | 24 |
import eu.etaxonomy.cdm.common.DOI; |
25 |
import eu.etaxonomy.cdm.common.URI; |
|
26 | 26 |
import eu.etaxonomy.cdm.io.common.CdmImportBase; |
27 | 27 |
import eu.etaxonomy.cdm.io.reference.ris.in.RisRecordReader.RisValue; |
28 | 28 |
import eu.etaxonomy.cdm.model.agent.Person; |
... | ... | |
40 | 40 |
/** |
41 | 41 |
* @author a.mueller |
42 | 42 |
* @since 11.05.2017 |
43 |
* |
|
44 | 43 |
*/ |
45 | 44 |
@Component |
46 | 45 |
public class RisReferenceImport |
... | ... | |
50 | 49 |
@SuppressWarnings("unused") |
51 | 50 |
private static final Logger logger = Logger.getLogger(RisReferenceImport.class); |
52 | 51 |
|
53 |
/** |
|
54 |
* {@inheritDoc} |
|
55 |
*/ |
|
56 | 52 |
@Override |
57 | 53 |
protected void doInvoke(RisReferenceImportState state) { |
58 | 54 |
RisReferenceImportConfigurator config = state.getConfig(); |
... | ... | |
66 | 62 |
|
67 | 63 |
Set<Reference> referencesToSave = new HashSet<>(); |
68 | 64 |
|
69 |
|
|
70 | 65 |
Map<RisReferenceTag, List<RisValue>> next = risReader.readRecord(); |
71 | 66 |
while (next != RisRecordReader.EOF){ |
72 | 67 |
Reference ref; |
... | ... | |
103 | 98 |
} |
104 | 99 |
} |
105 | 100 |
|
106 |
/** |
|
107 |
* @param state |
|
108 |
* @param next |
|
109 |
* @return |
|
110 |
*/ |
|
111 | 101 |
private Reference makeReference(RisReferenceImportState state, |
112 | 102 |
Map<RisReferenceTag, List<RisValue>> record) { |
113 | 103 |
|
... | ... | |
125 | 115 |
} |
126 | 116 |
Reference higherRef = inRef == null ? ref : inRef; |
127 | 117 |
|
128 |
|
|
129 | 118 |
//Title |
130 | 119 |
RisValue t1 = getSingleValue(state, record, RisReferenceTag.T1); |
131 | 120 |
RisValue ti = getSingleValue(state, record, RisReferenceTag.TI); |
... | ... | |
271 | 260 |
return ref; |
272 | 261 |
} |
273 | 262 |
|
274 |
/** |
|
275 |
* @param ref |
|
276 |
* @return |
|
277 |
*/ |
|
278 | 263 |
private boolean hasInRef(Reference ref) { |
279 | 264 |
return ref.getType() == ReferenceType.BookSection || ref.getType() == ReferenceType.Article ; |
280 | 265 |
} |
281 | 266 |
|
282 |
|
|
283 |
/** |
|
284 |
* @param state |
|
285 |
* @param record |
|
286 |
* @return |
|
287 |
*/ |
|
288 | 267 |
private String recordLocation(RisReferenceImportState state, |
289 | 268 |
Map<RisReferenceTag, List<RisValue>> record) { |
290 | 269 |
RisValue typeTag = this.getSingleValue(state, record, RisReferenceTag.TY, false); |
... | ... | |
298 | 277 |
return result; |
299 | 278 |
} |
300 | 279 |
|
301 |
/** |
|
302 |
* @param state |
|
303 |
* @param year |
|
304 |
* @param date |
|
305 |
*/ |
|
306 | 280 |
private void assertDateYear(RisReferenceImportState state, Integer year, TimePeriod date, RisValue py) { |
307 | 281 |
if (year != null && date != null && !year.equals(date.getStartYear())){ |
308 | 282 |
String message = "Year 'PY' and date 'DA' are not consistent. PY is neglected."; |
... | ... | |
320 | 294 |
return val1 != null ? val1 : val2; |
321 | 295 |
} |
322 | 296 |
|
323 |
/** |
|
324 |
* @param state |
|
325 |
* @param da |
|
326 |
* @return |
|
327 |
*/ |
|
328 | 297 |
private VerbatimTimePeriod makeDate(RisReferenceImportState state, RisValue da) { |
329 | 298 |
if (da == null){ |
330 | 299 |
return null; |
... | ... | |
354 | 323 |
return tp; |
355 | 324 |
} |
356 | 325 |
|
357 |
/** |
|
358 |
* @param state |
|
359 |
* @param py |
|
360 |
* @return |
|
361 |
*/ |
|
362 | 326 |
private Integer makeYear(RisReferenceImportState state, RisValue py) { |
363 | 327 |
if (py == null){ |
364 | 328 |
return null; |
... | ... | |
373 | 337 |
} |
374 | 338 |
} |
375 | 339 |
|
376 |
/** |
|
377 |
* @param state |
|
378 |
* @param list |
|
379 |
* @return |
|
380 |
*/ |
|
381 | 340 |
private TeamOrPersonBase<?> makeAuthor(RisReferenceImportState state, List<RisValue> list) { |
382 | 341 |
if (list.size() == 1){ |
383 | 342 |
return makePerson(state, list.get(0)); |
... | ... | |
390 | 349 |
} |
391 | 350 |
} |
392 | 351 |
|
393 |
/** |
|
394 |
* @param state |
|
395 |
* @param risValue |
|
396 |
* @return |
|
397 |
*/ |
|
398 | 352 |
private Person makePerson(RisReferenceImportState state, RisValue risValue) { |
399 | 353 |
Person person = Person.NewInstance(); |
400 | 354 |
String[] split = risValue.value.split(","); |
... | ... | |
453 | 407 |
return list; |
454 | 408 |
} |
455 | 409 |
|
456 |
/** |
|
457 |
* @param state |
|
458 |
* @param list |
|
459 |
* @param tag |
|
460 |
*/ |
|
461 | 410 |
private void assertSingle(RisReferenceImportState state, List<RisValue> list, RisReferenceTag tag) { |
462 | 411 |
if (list.size() > 1){ |
463 | 412 |
String message = "There is more than 1 tag '%s' but only 1 tag is supported by RIS format or" |
... | ... | |
469 | 418 |
} |
470 | 419 |
} |
471 | 420 |
|
472 |
/** |
|
473 |
* @param state |
|
474 |
* @param next |
|
475 |
* @return |
|
476 |
*/ |
|
477 | 421 |
private ReferenceType makeReferenceType(RisReferenceImportState state, |
478 | 422 |
Map<RisReferenceTag, List<RisValue>> record) { |
479 | 423 |
RisReferenceTag tyTag = RisReferenceTag.TY; |
... | ... | |
484 | 428 |
return cdmType; |
485 | 429 |
} |
486 | 430 |
|
487 |
/** |
|
488 |
* {@inheritDoc} |
|
489 |
*/ |
|
490 | 431 |
@Override |
491 | 432 |
protected boolean doCheck(RisReferenceImportState state) { |
492 | 433 |
return true; |
493 | 434 |
} |
494 | 435 |
|
495 |
/** |
|
496 |
* {@inheritDoc} |
|
497 |
*/ |
|
498 | 436 |
@Override |
499 | 437 |
protected boolean isIgnore(RisReferenceImportState state) { |
500 | 438 |
return false; |
Also available in: Unified diff
Cleanup RIS and Endnote tests