package org.akaza.openclinica.service.crfdata.xform;
import java.io.Serializable;
import org.akaza.openclinica.dao.core.CoreResources;
import org.akaza.openclinica.service.pmanage.Authorization;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.client.RestTemplate;
public class EnketoCredentials implements Serializable {
private String serverUrl = null;
private String apiKey = null;
private String ocInstanceUrl = null;
protected static final Logger logger = LoggerFactory.getLogger(EnketoCredentials.class);
private EnketoCredentials() {
}
public static EnketoCredentials getInstance(String studyOid) {
EnketoCredentials credentials = new EnketoCredentials();
String pManageUrl = CoreResources.getField("portalURL") + "/app/rest/oc/authorizations";
String ocUrl = CoreResources.getField("sysURL.base") + "rest2/openrosa/" + studyOid;
RestTemplate rest = new RestTemplate();
try {
Authorization[] response = rest.getForObject(pManageUrl + "?studyoid=" + studyOid + "&instanceurl=" + ocUrl, Authorization[].class);
if (response.length > 0) {
credentials.setServerUrl(response[0].getPformUrl());
credentials.setApiKey(response[0].getPformApiKey());
credentials.setOcInstanceUrl(ocUrl);
} else {
logger.error("Unexpected response received from Participant Portal while retrieving PForm credentials. Returning empty credentials.");
}
} catch (Exception e) {
logger.error(e.getMessage());
logger.error(ExceptionUtils.getStackTrace(e));
logger.error("Unexpected Exception received from Participant Portal while retrieving PForm credentials: " + e.getMessage()
+ ". Returning empty credentials.");
}
return credentials;
}
public String getServerUrl() {
return serverUrl;
}
public void setServerUrl(String serverUrl) {
this.serverUrl = serverUrl;
}
public String getApiKey() {
return apiKey;
}
public void setApiKey(String apiKey) {
this.apiKey = apiKey;
}
public String getOcInstanceUrl() {
return ocInstanceUrl;
}
public void setOcInstanceUrl(String ocInstanceUrl) {
this.ocInstanceUrl = ocInstanceUrl;
}
}