package uk.bl.odin.orcid.ethos; import java.util.ArrayList; import java.util.List; import uk.bl.odin.orcid.client.constants.OrcidContributorRole; import uk.bl.odin.orcid.client.constants.OrcidContributorSequence; import uk.bl.odin.orcid.client.constants.OrcidExternalIdentifierType; import uk.bl.odin.orcid.client.constants.OrcidWorkType; import uk.bl.odin.orcid.domain.BibtexBuilder; import uk.bl.odin.orcid.domain.IsOrcidWork; import uk.bl.odin.orcid.schema.messages.onepointtwo.Citation; import uk.bl.odin.orcid.schema.messages.onepointtwo.CitationType; import uk.bl.odin.orcid.schema.messages.onepointtwo.Contributor; import uk.bl.odin.orcid.schema.messages.onepointtwo.ContributorAttributes; import uk.bl.odin.orcid.schema.messages.onepointtwo.CreditName; import uk.bl.odin.orcid.schema.messages.onepointtwo.OrcidWork; import uk.bl.odin.orcid.schema.messages.onepointtwo.PublicationDate; import uk.bl.odin.orcid.schema.messages.onepointtwo.Url; import uk.bl.odin.orcid.schema.messages.onepointtwo.Visibility; import uk.bl.odin.orcid.schema.messages.onepointtwo.WorkContributors; import uk.bl.odin.orcid.schema.messages.onepointtwo.WorkExternalIdentifier; import uk.bl.odin.orcid.schema.messages.onepointtwo.WorkExternalIdentifiers; import uk.bl.odin.orcid.schema.messages.onepointtwo.WorkTitle; import uk.bl.odin.orcid.schema.messages.onepointtwo.Year; /** * Models the DC metadata we can extract from ETHOS HTML meta tags and * transforms them into OrcidWorks */ public class ThesisMetadata implements IsOrcidWork { private String creator; private String publisher; private String title; private String abstract_; private String year; private String url; // one for ethos and (optionally) one for institution private List<String> identifiers = new ArrayList<String>(); private String thesisType; // private String dcLanguage; /** * Transform into an OrcidWork * * @return a JAXB annotated object hierarchy */ public OrcidWork toOrcidWork() { OrcidWork work = new OrcidWork(); WorkTitle title = new WorkTitle(); title.setTitle(this.getTitle()); work.setWorkTitle(title); work.setShortDescription(this.getAbstract()); Citation citation = new Citation(); citation.setCitation(this.getBibtex()); citation.setWorkCitationType(CitationType.BIBTEX); work.setWorkCitation(citation); work.setWorkType(OrcidWorkType.DISSERTAION.toString()); PublicationDate publicationDate = new PublicationDate(); Year year = new Year(); year.setValue(this.getYear()); publicationDate.setYear(year); work.setPublicationDate(publicationDate); WorkExternalIdentifiers wei = new WorkExternalIdentifiers(); for (String s : this.getIdentifiers()) { WorkExternalIdentifier weEthos = new WorkExternalIdentifier(); weEthos.setWorkExternalIdentifierId(s); if (s.contains("doi") || s.contains("DOI") || s.startsWith("10.")) weEthos.setWorkExternalIdentifierType(OrcidExternalIdentifierType.DOI.toString()); else weEthos.setWorkExternalIdentifierType(OrcidExternalIdentifierType.OTHER_ID.toString()); wei.getWorkExternalIdentifier().add(weEthos); } work.setWorkExternalIdentifiers(wei); Url url = new Url(); url.setValue(this.getUrl()); work.setUrl(url); // note language is en for orcid, eng for ethos! // TODO: work out if we need this. WorkContributors contributors = new WorkContributors(); Contributor contributor = new Contributor(); CreditName name = new CreditName(); name.setValue(this.getCreator()); contributor.setCreditName(name); ContributorAttributes attributes = new ContributorAttributes(); attributes.setContributorRole(OrcidContributorRole.AUTHOR.toString()); attributes.setContributorSequence(OrcidContributorSequence.FIRST.toString()); contributor.setContributorAttributes(attributes); contributors.getContributor().add(contributor); work.setWorkContributors(contributors); work.setVisibility(Visibility.PUBLIC); return work; } public String getCreator() { return creator; } public void setCreator(String creator) { this.creator = creator; } public String getPublisher() { return publisher; } public void setPublisher(String publisher) { this.publisher = publisher; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAbstract() { return abstract_; } public void setAbstract(String abstract_) { this.abstract_ = abstract_; } public String getYear() { return year; } public void setYear(String year) { this.year = year; } public List<String> getIdentifiers() { return identifiers; } public void setIdentifiers(List<String> identifiers) { this.identifiers = identifiers; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } /** * Converts this metadata into a bibtext citation on request */ public String getBibtex() { return BibtexBuilder.getInstance().buildPHDCitation(getCreator(), getTitle(), getPublisher(), getYear()); } public String getThesisType() { return thesisType; } public void setThesisType(String thesisType) { this.thesisType = thesisType; } }