package org.isatools.isacreator.orcid.xmlhandlers;
import org.isatools.isacreator.orcid.model.OrcidAuthor;
import org.orcid.ns.orcid.*;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
/**
* Created by the ISATeam.
* User: agbeltran
* Date: 23/05/2013
* Time: 21:21
*
* @author <a href="mailto:alejandra.gonzalez.beltran@gmail.com">Alejandra Gonzalez-Beltran</a>
*/
public class OrcidSearchResultHandler {
public OrcidMessageDocument getOrcidMessageDocument(String xmlAsString) {
OrcidMessageDocument resultDocument = null;
try {
InputStream stream = new ByteArrayInputStream(xmlAsString.getBytes("UTF-8"));
resultDocument = OrcidMessageDocument.Factory.parse(stream);
} catch (org.apache.xmlbeans.XmlException e) {
System.err.println("XML Exception encountered");
e.printStackTrace();
} catch (java.io.IOException e) {
System.err.println("IO Exception: " + e.getMessage());
e.printStackTrace();
}
return resultDocument;
}
public OrcidAuthor[] getOrcidAuthors(OrcidMessageDocument messageDocument) {
OrcidMessageDocument.OrcidMessage orcidMessage = messageDocument.getOrcidMessage();
OrcidSearchResultsDocument.OrcidSearchResults searchResults = orcidMessage.getOrcidSearchResults();
if (searchResults == null)
return null;
OrcidSearchResultDocument.OrcidSearchResult[] results = searchResults.getOrcidSearchResultArray();
OrcidAuthor[] authors = new OrcidAuthor[results.length];
int i = 0;
for (OrcidSearchResultDocument.OrcidSearchResult result : results) {
OrcidProfileDocument.OrcidProfile profile = result.getOrcidProfile();
if (profile != null) {
authors[i] = getOrcidAuthor(profile);
i++;
}
}
return authors;
}
public OrcidAuthor getSingleOrcidAuthor(OrcidMessageDocument messageDocument) {
OrcidAuthor orcidAuthor = null;
OrcidMessageDocument.OrcidMessage orcidMessage = messageDocument.getOrcidMessage();
OrcidSearchResultsDocument.OrcidSearchResults searchResults = orcidMessage.getOrcidSearchResults();
if (searchResults == null)
return null;
OrcidSearchResultDocument.OrcidSearchResult[] results = searchResults.getOrcidSearchResultArray();
if (results.length == 1) {
OrcidProfileDocument.OrcidProfile profile = results[0].getOrcidProfile();
orcidAuthor = getOrcidAuthor(profile);
}
System.out.println(orcidAuthor);
return orcidAuthor;
}
private OrcidAuthor getOrcidAuthor(OrcidProfileDocument.OrcidProfile profile) {
OrcidAuthor orcidAuthor = new OrcidAuthor();
orcidAuthor.setOrcid(profile.getOrcidIdentifier().getPath());
OrcidBioDocument.OrcidBio orcidBio = profile.getOrcidBio();
PersonalDetailsDocument.PersonalDetails personalDetails = orcidBio.getPersonalDetails();
orcidAuthor.setGivenNames(personalDetails.getGivenNames());
if (personalDetails.getFamilyName() != null) {
orcidAuthor.setFamilyName(personalDetails.getFamilyName());
}
ContactDetailsDocument.ContactDetails contactDetails = orcidBio.getContactDetails();
if (contactDetails != null) {
Email[] emails = contactDetails.getEmailArray();
if (emails.length > 0)
orcidAuthor.setEmail(emails[0].getStringValue());
}
return orcidAuthor;
}
}