use of de.undercouch.citeproc.csl.CSLNameBuilder in project ORCID-Source by ORCID.
the class WorkToCiteprocTranslator method translateFromWorkMetadata.
/**
* Use the ORCID work metadata to generate a *limited* citation. You'll most
* likely get a title, doi, url, date and author.
*
* Translates type according to https://docs.google.com/spreadsheets/d/
* 1h4nTF6DKNEpWcGNQVMDwt0ea09qmkBnkWisxkJE-li4/edit#gid=754644608
*
* Informed by mendley tranforms at
* http://support.mendeley.com/customer/portal/articles/364144-csl-type-
* mapping
*
* See also:
* http://docs.citationstyles.org/en/stable/specification.html#appendix-iii-
* types http://members.orcid.org/api/supported-work-types datacite and
* crossref mappings here:
* https://github.com/lagotto/lagotto/blob/master/config/initializers/
* constants.rb
* @param creditName
*
* @param worktype
* @return a CSLItemData, default CSLType.ARTICLE if cannot map type
*/
private CSLItemData translateFromWorkMetadata(Work work, String creditName) {
CSLItemDataBuilder builder = new CSLItemDataBuilder();
builder.title((work.getWorkTitle() != null) ? StringUtils.stripAccents(work.getWorkTitle().getTitle().getContent()) : "No Title");
String doi = extractID(work, WorkExternalIdentifierType.DOI);
String url = extractID(work, WorkExternalIdentifierType.URI);
if (doi != null) {
builder.DOI(doi);
}
if (url != null) {
builder.URL(url);
} else if (doi != null) {
builder.URL("http://doi.org/" + doi);
} else {
url = extractID(work, WorkExternalIdentifierType.HANDLE);
if (url != null) {
builder.URL(url);
}
}
if (work.getJournalTitle() != null) {
builder.containerTitle(StringUtils.stripAccents(work.getJournalTitle().getContent()));
}
List<String> names = new ArrayList<String>();
// TODO: Pass in credit name
names.add(creditName);
if (work.getWorkContributors() != null && work.getWorkContributors().getContributor() != null) {
for (Contributor c : work.getWorkContributors().getContributor()) {
if (c.getCreditName() != null && c.getCreditName().getContent() != null) {
names.add(StringUtils.stripAccents(c.getCreditName().getContent()));
}
}
}
CSLNameBuilder name = new CSLNameBuilder();
name.literal(Joiner.on(" and ").skipNulls().join(names));
builder.author(name.build());
// TODO: make it work with "Spring", "August", whatever...
if (work.getPublicationDate() != null) {
int year = 0;
int month = 0;
int day = 0;
try {
year = Integer.parseInt(work.getPublicationDate().getYear().getValue());
month = Integer.parseInt(work.getPublicationDate().getMonth().getValue());
day = Integer.parseInt(work.getPublicationDate().getDay().getValue());
} catch (Exception e) {
}
if (year > 0 && month > 0 && day > 0) {
builder.issued(year, month, day);
} else if (year > 0 && month > 0) {
builder.issued(year, month);
} else if (year > 0) {
builder.issued(year);
}
}
switch(work.getWorkType()) {
case ARTISTIC_PERFORMANCE:
break;
case BOOK:
builder.type(CSLType.BOOK);
break;
case BOOK_CHAPTER:
builder.type(CSLType.CHAPTER);
break;
case BOOK_REVIEW:
builder.type(CSLType.REVIEW_BOOK);
break;
case CONFERENCE_ABSTRACT:
builder.type(CSLType.PAPER_CONFERENCE);
break;
case CONFERENCE_PAPER:
builder.type(CSLType.PAPER_CONFERENCE);
break;
case CONFERENCE_POSTER:
builder.type(CSLType.PAPER_CONFERENCE);
break;
case DATA_SET:
builder.type(CSLType.DATASET);
break;
case DICTIONARY_ENTRY:
builder.type(CSLType.ENTRY_DICTIONARY);
break;
case DISSERTATION:
builder.type(CSLType.THESIS);
break;
case ENCYCLOPEDIA_ENTRY:
builder.type(CSLType.ENTRY_ENCYCLOPEDIA);
break;
case JOURNAL_ARTICLE:
builder.type(CSLType.ARTICLE_JOURNAL);
break;
case MAGAZINE_ARTICLE:
builder.type(CSLType.ARTICLE_MAGAZINE);
break;
case NEWSLETTER_ARTICLE:
builder.type(CSLType.ARTICLE_NEWSPAPER);
break;
case NEWSPAPER_ARTICLE:
builder.type(CSLType.ARTICLE_NEWSPAPER);
break;
case ONLINE_RESOURCE:
builder.type(CSLType.WEBPAGE);
break;
case REPORT:
builder.type(CSLType.REPORT);
break;
case WEBSITE:
builder.type(CSLType.WEBPAGE);
break;
case WORKING_PAPER:
builder.type(CSLType.ARTICLE);
break;
case DISCLOSURE:
case EDITED_BOOK:
case INVENTION:
case JOURNAL_ISSUE:
case LECTURE_SPEECH:
case LICENSE:
case MANUAL:
case OTHER:
case PATENT:
case REGISTERED_COPYRIGHT:
case RESEARCH_TECHNIQUE:
case RESEARCH_TOOL:
case SPIN_OFF_COMPANY:
case STANDARDS_AND_POLICY:
case SUPERVISED_STUDENT_PUBLICATION:
case TECHNICAL_STANDARD:
case TEST:
case TRADEMARK:
case TRANSLATION:
case UNDEFINED:
default:
// builder.type(CSLType.ARTICLE);
break;
}
return builder.build();
}
use of de.undercouch.citeproc.csl.CSLNameBuilder in project ORCID-Source by ORCID.
the class WorkToCiteprocTranslator method translateFromBibtexCitation.
/**
* Extract the bibtex and turn into CSL Adds in DOI and URL from metadata if
* missing Horrible use of reflection to shorten hyperauthorship. It will
* strip anything above 20 authors down to the primary author and 'et all'.
*
* @param work
* @param abreviate
* @return
*/
private CSLItemData translateFromBibtexCitation(Work work, boolean abreviate) {
try {
BibTeXConverter conv = new BibTeXConverter();
BibTeXDatabase db = conv.loadDatabase(IOUtils.toInputStream(StringUtils.stripAccents(work.getWorkCitation().getCitation())));
Map<String, CSLItemData> cids = conv.toItemData(db);
if (cids.size() == 1) {
CSLItemData item = cids.values().iterator().next();
// multiple authors not a literal.
if (abreviate) {
if (item.getAuthor().length > 20) {
CSLName[] abrev = Arrays.copyOf(item.getAuthor(), 1);
abrev[0] = new CSLNameBuilder().literal(abrev[0].getGiven() + " " + abrev[0].getFamily() + " " + "et all.").build();
ReflectionUtils.makeAccessible(authorField);
ReflectionUtils.setField(authorField, item, abrev);
}
for (int i = 0; i < item.getAuthor().length; i++) {
if (item.getAuthor()[i].getLiteral() != null && item.getAuthor()[i].getLiteral().length() > 200) {
ReflectionUtils.makeAccessible(literalField);
ReflectionUtils.setField(literalField, item.getAuthor()[i], StringUtils.abbreviate(item.getAuthor()[i].getLiteral(), 200));
}
}
}
if (item.getDOI() == null) {
String doi = extractID(work, WorkExternalIdentifierType.DOI);
if (doi != null) {
ReflectionUtils.makeAccessible(doiField);
ReflectionUtils.setField(doiField, item, doi);
}
}
if (item.getURL() == null) {
if (extractID(work, WorkExternalIdentifierType.URI) != null) {
ReflectionUtils.makeAccessible(urlField);
ReflectionUtils.setField(urlField, item, extractID(work, WorkExternalIdentifierType.URI));
} else if (item.getDOI() != null) {
ReflectionUtils.makeAccessible(urlField);
ReflectionUtils.setField(urlField, item, item.getDOI());
} else if (extractID(work, WorkExternalIdentifierType.HANDLE) != null) {
ReflectionUtils.makeAccessible(urlField);
ReflectionUtils.setField(urlField, item, extractID(work, WorkExternalIdentifierType.HANDLE));
}
}
return item;
} else
throw new ParseException("Invalid Citation count");
} catch (IOException | ParseException e) {
return null;
}
}
Aggregations