/* OpenClinica is distributed under the GNU Lesser General Public License (GNU
* LGPL).
*
* For details see: http://www.openclinica.org/license copyright 2003-2005 Akaza
* Research
*
*//* OpenClinica is distributed under the GNU Lesser General Public License (GNU
* LGPL).
*
* For details see: http://www.openclinica.org/license copyright 2003-2005 Akaza
* Research
*
*/
package org.akaza.openclinica.bean.extract.odm;
import java.text.SimpleDateFormat;
import java.util.Iterator;
import java.util.LinkedHashMap;
import org.akaza.openclinica.bean.odmbeans.LocationBean;
import org.akaza.openclinica.bean.odmbeans.MetaDataVersionRefBean;
import org.akaza.openclinica.bean.odmbeans.OdmAdminDataBean;
import org.akaza.openclinica.bean.odmbeans.OdmStudyBean;
import org.akaza.openclinica.bean.odmbeans.UserBean;
import org.apache.commons.lang.StringEscapeUtils;
/**
* Create ODM XML AdminData Element for a study.
*
* @author ywang (March, 2010)
*/
public class AdminDataReportBean extends OdmXmlReportBean {
private OdmAdminDataBean adminData;
private LinkedHashMap<String, OdmAdminDataBean> odmAdminDataMap;
public AdminDataReportBean(OdmAdminDataBean adminData) {
super();
this.adminData = adminData;
}
public AdminDataReportBean(LinkedHashMap<String, OdmAdminDataBean> odmAdminDataMap) {
super();
this.odmAdminDataMap = odmAdminDataMap;
}
private static String nls = System.getProperty("line.separator");
/**
* has not been implemented yet
*/
@Override
public void createOdmXml(boolean isDataset) {
}
public void createChunkedOdmXml(boolean isDataset) {
String ODMVersion = this.getODMVersion();
if ("oc1.2".equalsIgnoreCase(ODMVersion) || "oc1.3".equalsIgnoreCase(ODMVersion)) {
Iterator<OdmAdminDataBean> ita = this.odmAdminDataMap.values().iterator();
while (ita.hasNext()) {
OdmAdminDataBean a = ita.next();
addNodeAdminData(a);
}
}
}
public void addNodeAdminData(OdmAdminDataBean a) {
if(a.getUsers().size()>0) {
StringBuffer xml = this.getXmlOutput();
String indent = this.getIndent();
xml.append(indent + "<AdminData StudyOID=\"" + StringEscapeUtils.escapeXml(a.getStudyOID()) + "\">");
xml.append(nls);
for(UserBean u : a.getUsers()) {
addOneUser(u, indent+indent);
}
//for(LocationBean l : this.adminData.getLocations()) {
// addOneLocation(l, indent+indent);
//}
xml.append(indent + "</AdminData>");
xml.append(nls);
}
}
public void addNodeAdminData() {
if(this.adminData.getUsers().size()>0) {
StringBuffer xml = this.getXmlOutput();
String indent = this.getIndent();
xml.append(indent + "<AdminData StudyOID=\"" + StringEscapeUtils.escapeXml(adminData.getStudyOID()) + "\">");
xml.append(nls);
for(UserBean u : this.adminData.getUsers()) {
addOneUser(u, indent+indent);
}
//for(LocationBean l : this.adminData.getLocations()) {
// addOneLocation(l, indent+indent);
//}
xml.append(indent + "</AdminData>");
xml.append(nls);
}
}
public void addOneUser(UserBean user, String currentIndent) {
StringBuffer xml = this.getXmlOutput();
String indent = this.getIndent();
xml.append(currentIndent+"<User OID=\"" + StringEscapeUtils.escapeXml(user.getOid()) + "\">");
xml.append(nls);
String fn = user.getFirstName()!=null?user.getFirstName():"";
String ln = user.getLastName()!=null?user.getLastName():"";
String fullName = fn.length()>0&&ln.length()>0?fn+" "+ln:"";
if(fullName.length()>0) {
xml.append(currentIndent+indent+"<FullName>"+StringEscapeUtils.escapeXml(fullName)+"</FullName>");
xml.append(nls);
}
if(fn.length()>0) {
xml.append(currentIndent+indent+"<FirstName>"+StringEscapeUtils.escapeXml(fn)+"</FirstName>");
xml.append(nls);
}
if(ln.length()>0) {
xml.append(currentIndent+indent+"<LastName>"+StringEscapeUtils.escapeXml(ln)+"</LastName>");
xml.append(nls);
}
String og = user.getOrganization()!=null?user.getOrganization():"";
if(og.length()>0) {
xml.append(currentIndent+indent+"<Organization>"+StringEscapeUtils.escapeXml(og)+"</Organization>");
xml.append(nls);
}
xml.append(currentIndent+"</User>");
xml.append(nls);
}
public void addOneLocation(LocationBean loc, String currentIndent) {
StringBuffer xml = this.getXmlOutput();
String indent = this.getIndent();
xml.append(currentIndent+"<Location OID=\"" + StringEscapeUtils.escapeXml(loc.getOid())
+"\" Name=\"" + StringEscapeUtils.escapeXml(loc.getName()) + "\">");
xml.append(nls);
MetaDataVersionRefBean m = loc.getMetaDataVersionRef();
xml.append(currentIndent+indent+"<MetaDataVersionRef StudyOID=\"" + StringEscapeUtils.escapeXml(m.getStudyOID())
+"\" MetaDataVersionOID=\""+StringEscapeUtils.escapeXml(m.getElementDefOID())
+"\" EffectiveDate=\""+new SimpleDateFormat("yyyy-MM-dd").format(m.getEffectiveDate())+"\"/>");
xml.append(nls);
xml.append(currentIndent+"</Location>");
xml.append(nls);
}
public OdmAdminDataBean getAdminData() {
return adminData;
}
public void setAdminData(OdmAdminDataBean adminData) {
this.adminData = adminData;
}
}