/**
* The contents of this file are subject to the OpenMRS Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://license.openmrs.org
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* Copyright (C) OpenMRS, LLC. All Rights Reserved.
*/
package org.openmrs.web.servlet;
import java.io.IOException;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openmrs.Concept;
import org.openmrs.ConceptName;
import org.openmrs.Obs;
import org.openmrs.Patient;
import org.openmrs.api.context.Context;
import org.openmrs.util.OpenmrsConstants;
import org.openmrs.web.WebConstants;
public class SampleFlowsheetServlet extends HttpServlet {
private static final long serialVersionUID = -2794221430160461220L;
private Log log = LogFactory.getLog(this.getClass());
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
log.debug("Getting sample flowsheet");
response.setContentType("text/html");
HttpSession session = request.getSession();
String pid = request.getParameter("pid");
if (pid == null || pid.length() == 0) {
session.setAttribute(WebConstants.OPENMRS_ERROR_ATTR, "error.null");
return;
}
if (Context.isAuthenticated() == false || !Context.hasPrivilege(OpenmrsConstants.PRIV_VIEW_PATIENTS)
|| !Context.hasPrivilege(OpenmrsConstants.PRIV_VIEW_OBS)) {
session.setAttribute(WebConstants.OPENMRS_ERROR_ATTR, "Privileges required: "
+ OpenmrsConstants.PRIV_VIEW_PATIENTS + " and " + OpenmrsConstants.PRIV_VIEW_OBS);
session.setAttribute(WebConstants.OPENMRS_LOGIN_REDIRECT_HTTPSESSION_ATTR, request.getRequestURI() + "?"
+ request.getQueryString());
response.sendRedirect(request.getContextPath() + "/login.htm");
return;
}
ServletOutputStream out = response.getOutputStream();
Integer patientId = Integer.parseInt(pid);
Patient patient = Context.getPatientService().getPatient(patientId);
List<Obs> obsList = Context.getObsService().getObservationsByPerson(patient);
if (obsList == null || obsList.size() < 1) {
out.print("No observations found");
return;
}
out.println("<style>");
out.println(".header { font-family:Arial; font-weight:bold; text-align: center; font-size: 1.5em;}");
out
.println(".label { font-family:Arial; text-align:right; color:#808080; font-style:italic; font-size: 0.6em; vertical-align: top;}");
out.println(".value { font-family:Arial; text-align:left; vertical-align:top; }");
out.println("</style>");
out.println("<table cellspacing=0 cellpadding=3>");
Locale locale = Context.getLocale();
Calendar date = Calendar.getInstance();
date.set(1900, Calendar.JANUARY, 1);
Calendar obsDate = Calendar.getInstance();
for (Obs obs : obsList) {
obsDate.setTime(obs.getObsDatetime());
if (Math.abs(obsDate.getTimeInMillis() - date.getTimeInMillis()) > 86400000) {
date = obsDate;
out.println("<tr><td class=header colspan=2>" + Context.getDateFormat().format(date.getTime())
+ "</td></tr>");
}
StringBuffer s = new StringBuffer("<tr><td class=label>");
s.append(getName(obs, locale));
s.append("</td><td class=value>");
s.append(getValue(obs, locale));
s.append("</td></tr>");
out.println(s.toString());
}
out.println("</table>");
}
private String getName(Obs obs, Locale locale) {
return getName(obs.getConcept(), locale);
}
private String getName(Concept concept, Locale locale) {
String foundName = "";
ConceptName shortName = concept.getBestShortName(locale);
if (shortName != null) {
foundName = shortName.getName();
} else {
ConceptName name = concept.getName(locale);
if (name != null)
foundName = name.getName();
}
return foundName;
}
private String getValue(Obs obs, Locale locale) {
return obs.getValueAsString(locale);
}
}