package org.isatools.isacreator.orcid.impl; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; import org.isatools.isacreator.orcid.OrcidClient; import org.isatools.isacreator.orcid.model.OrcidAuthor; import org.isatools.isacreator.orcid.xmlhandlers.OrcidSearchResultHandler; import org.orcid.ns.orcid.OrcidMessageDocument; import java.io.IOException; import java.net.URLEncoder; /** * Created by the ISATeam. * User: agbeltran * Date: 23/05/2013 * Time: 13:37 * * @author <a href="mailto:alejandra.gonzalez.beltran@gmail.com">Alejandra Gonzalez-Beltran</a> */ public class OrcidClientImpl implements OrcidClient { public static final String QUERY_URL = "http://pub.orcid.org/search/orcid-bio/"; public static final String ACCEPT = "Accept-Encoding"; public static final String ORCID_XML = "application/orcid+xml"; public static final String CONTENT_TYPE = "Content-Type"; private HttpClient client = null; private GetMethod getMethod = null; private OrcidSearchResultHandler handler = null; public OrcidClientImpl() { client = new HttpClient(); getMethod = new GetMethod(QUERY_URL); handler = new OrcidSearchResultHandler(); } public OrcidAuthor getAuthorInfo(String orcidID) { try { getMethod.setQueryString("q=" + (orcidID.contains("-") ? "orcid" : "text") + ":" + orcidID); System.out.println("query string=" + getMethod.getQueryString()); System.out.println("URI=" + getMethod.getURI()); getMethod.addRequestHeader(CONTENT_TYPE, ORCID_XML); //getMethod.addRequestHeader(ACCEPT, ORCID_XML); int statusCode = client.executeMethod(getMethod); if (statusCode != -1) { String contents = getMethod.getResponseBodyAsString(); System.out.println("status text=" + getMethod.getStatusText()); System.out.println("contents=" + contents); getMethod.releaseConnection(); return processAuthorInfo(contents); } else { System.out.println("status code is -1"); } } catch (IOException ex) { ex.printStackTrace(); }//catch(HttpException ex){ //} return null; } public OrcidAuthor[] getOrcidProfiles(String searchString) { try { getMethod.setQueryString("q=text:" + URLEncoder.encode(searchString, "UTF-8") + ""); System.out.println("query string=" + getMethod.getQueryString()); System.out.println("URI=" + getMethod.getURI()); getMethod.addRequestHeader(CONTENT_TYPE, ORCID_XML); int statusCode = client.executeMethod(getMethod); if (statusCode != -1) { String contents = getMethod.getResponseBodyAsString(); System.out.println("status text=" + getMethod.getStatusText()); System.out.println("contents=" + contents); getMethod.releaseConnection(); return processOrcidProfles(contents); } else { System.out.println("status code is -1"); } } catch (IOException ex) { ex.printStackTrace(); }//catch(HttpException ex){ //} return null; } private OrcidAuthor[] processOrcidProfles(String contents) { OrcidMessageDocument orcidMessageDocument = handler.getOrcidMessageDocument(contents); return handler.getOrcidAuthors(orcidMessageDocument); } private OrcidAuthor processAuthorInfo(String contents) { System.out.println("contents=" + contents); OrcidMessageDocument orcidMessageDocument = handler.getOrcidMessageDocument(contents); return handler.getSingleOrcidAuthor(orcidMessageDocument); } public static void main(String[] args) { OrcidClientImpl client = new OrcidClientImpl(); //client.getAuthorInfo("0000-0003-3499-8262"); // client.getOrcidProfiles("English"); //client.getOrcidProfiles("gonzalez-beltran"); client.getOrcidProfiles("0000-0003-3499-8262"); } }