package uk.bl.odin.orcid.htmlmeta.highwire;
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.domain.IsOrcidWork;
import uk.bl.odin.orcid.htmlmeta.AbstractMeta;
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.JournalTitle;
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.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;
import com.google.appengine.repackaged.com.google.common.base.Splitter;
/*
*see http://blog.reallywow.com/archives/123
*see http://www.monperrus.net/martin/accurate+bibliographic+metadata+and+google+scholar
*/
public class HighwireMeta extends AbstractMeta<HW_KEYS> implements IsOrcidWork {
@Override
public OrcidWork toOrcidWork() {
OrcidWork work = new OrcidWork();
if (get(HW_KEYS.TITLE)!=null){
WorkTitle title = new WorkTitle();
title.setTitle(getFirst(HW_KEYS.TITLE));
work.setWorkTitle(title);
}
/*
if (get(DC_KEYS.DESCRIPTION)!=null){
work.setShortDescription(getFirst(DC_KEYS.DESCRIPTION));
}*/
/*
if (get(HW_KEYS.TYPE)!=null){
//TODO match vocab with orcid
work.setWorkType(getFirst(DC_KEYS.TYPE));
}*/
if (get(HW_KEYS.PUBLICATION_DATE)!=null){
//TODO: check it's just a year
PublicationDate publicationDate = new PublicationDate();
Year year = new Year();
year.setValue(getFirst(HW_KEYS.PUBLICATION_DATE));
publicationDate.setYear(year);
work.setPublicationDate(publicationDate);
}
if (get(HW_KEYS.DOI)!=null){
WorkExternalIdentifiers wei = new WorkExternalIdentifiers();
for (String s : get(HW_KEYS.DOI)) {
WorkExternalIdentifier id = new WorkExternalIdentifier();
id.setWorkExternalIdentifierType(OrcidExternalIdentifierType.DOI.toString());
}
work.setWorkExternalIdentifiers(wei);
}
//TODO: refactor to get URL
/*
Url url = new Url();
url.setValue(this.getUrl());
work.setUrl(url);
*/
if (get(HW_KEYS.AUTHOR)!=null || get(HW_KEYS.AUTHORS)!=null){
Iterable<String> a;
if (get(HW_KEYS.AUTHOR)!=null)
a= get(HW_KEYS.AUTHOR);
else
a = Splitter.on(';').split(getFirst(HW_KEYS.AUTHORS));
WorkContributors contributors = new WorkContributors();
boolean first = true;
for (String nameString : a){
Contributor contributor = new Contributor();
CreditName name = new CreditName();
name.setValue(nameString);
contributor.setCreditName(name);
ContributorAttributes attributes = new ContributorAttributes();
attributes.setContributorRole(OrcidContributorRole.AUTHOR.toString());
if (first){
attributes.setContributorSequence(OrcidContributorSequence.FIRST.toString());
first = false;
}else{
attributes.setContributorSequence(OrcidContributorSequence.ADDITIONAL.toString());
}
contributor.setContributorAttributes(attributes);
contributors.getContributor().add(contributor);
}
work.setWorkContributors(contributors);
}
if (getFirst(HW_KEYS.JOURNAL_TITLE) != null){
JournalTitle title = new JournalTitle();
title.setContent(getFirst(HW_KEYS.JOURNAL_TITLE));
work.setJournalTitle(title);
}
work.setVisibility(Visibility.PUBLIC);
return work;
}
}