Advertisement
Guest User

Untitled

a guest
Apr 14th, 2013
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.64 KB | None | 0 0
  1. package org.openmrs.module.form2program.db.hibernate;
  2.  
  3. import java.sql.ResultSet;
  4. import java.sql.SQLException;
  5. import java.text.DateFormat;
  6. import java.text.SimpleDateFormat;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9.  
  10. import org.apache.commons.logging.Log;
  11. import org.apache.commons.logging.LogFactory;
  12. import org.hibernate.Criteria;
  13. import org.hibernate.HibernateException;
  14. import org.hibernate.SessionFactory;
  15. import org.hibernate.criterion.Expression;
  16. import org.hibernate.criterion.Order;
  17. import org.hibernate.criterion.Projections;
  18. import org.openmrs.EncounterType;
  19. import org.openmrs.Program;
  20. import org.openmrs.ProgramWorkflowState;
  21. import org.openmrs.User;
  22. import org.openmrs.module.form2program.Form2ProgramCondition;
  23. import org.openmrs.module.form2program.Form2ProgramMap;
  24. import org.openmrs.module.form2program.Form2ProgramTransition;
  25. import org.openmrs.module.form2program.db.Form2ProgramDAO;
  26.  
  27. public class HibernateForm2ProgramDAO implements Form2ProgramDAO {
  28.  
  29. protected final Log log = LogFactory.getLog(getClass());
  30. private DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
  31.  
  32. /**
  33. * Hibernate session factory
  34. */
  35. private SessionFactory sessionFactory;
  36.  
  37. /**
  38. * Default public constructor
  39. */
  40. public HibernateForm2ProgramDAO() { }
  41.  
  42. /**
  43. * Set session factory
  44. *
  45. * @param sessionFactory
  46. */
  47. public void setSessionFactory(SessionFactory sessionFactory) {
  48. this.sessionFactory = sessionFactory;
  49. }
  50.  
  51. public void createForm2ProgramMap(Form2ProgramMap form2ProgramMap) {
  52. this.sessionFactory.getCurrentSession().save(form2ProgramMap);
  53. }
  54.  
  55. public void deleteForm2ProgramMap(Form2ProgramMap form2ProgramMap) {
  56. this.sessionFactory.getCurrentSession().delete(form2ProgramMap);
  57. }
  58.  
  59. public void updateForm2ProgramMap(Form2ProgramMap form2ProgramMap) {
  60. this.sessionFactory.getCurrentSession().update(form2ProgramMap);
  61. }
  62.  
  63. public void createForm2ProgramCondition(Form2ProgramCondition form2ProgramCondition) {
  64. this.sessionFactory.getCurrentSession().save(form2ProgramCondition);
  65. }
  66.  
  67. public void deleteForm2ProgramCondition(Form2ProgramCondition form2ProgramCondition) {
  68. this.sessionFactory.getCurrentSession().delete(form2ProgramCondition);
  69. }
  70.  
  71. public void updateForm2ProgramCondition(Form2ProgramCondition form2ProgramCondition) {
  72. this.sessionFactory.getCurrentSession().update(form2ProgramCondition);
  73. }
  74.  
  75. public void createForm2ProgramTransition(Form2ProgramTransition form2ProgramTransition) {
  76. this.sessionFactory.getCurrentSession().save(form2ProgramTransition);
  77. }
  78.  
  79. public void deleteForm2ProgramTransition(Form2ProgramTransition form2ProgramTransition) {
  80. this.sessionFactory.getCurrentSession().delete(form2ProgramTransition);
  81. }
  82.  
  83. public void updateForm2ProgramTransition(Form2ProgramTransition form2ProgramTransition) {
  84. this.sessionFactory.getCurrentSession().update(form2ProgramTransition);
  85. }
  86.  
  87. public List<Form2ProgramMap> getForm2ProgramMaps( ) {
  88. Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Form2ProgramMap.class, "f");
  89. criteria.addOrder(Order.asc("f.program"));
  90. criteria.addOrder(Order.asc("f.encounterType"));
  91. return (List<Form2ProgramMap>)criteria.list();
  92. }
  93.  
  94. public List<Form2ProgramMap> getForm2ProgramMaps(Program program) {
  95. Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Form2ProgramMap.class, "f");
  96. // criteria.createAlias("encounterType", "e");
  97. criteria.add(Expression.eq("f.program", program));
  98. criteria.addOrder(Order.asc("f.encounterType"));
  99. List<Form2ProgramMap> form2programs = new ArrayList<Form2ProgramMap>();
  100. form2programs.addAll(criteria.list());
  101. return form2programs;
  102. }
  103.  
  104. public List<Program> getPrograms( ) {
  105. Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Form2ProgramMap.class);
  106. criteria.setProjection(Projections.distinct(Projections.property("program")));
  107. return (List<Program>)criteria.list();
  108. }
  109.  
  110. public List<EncounterType> getEncounterTypes(Program program) {
  111. Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Form2ProgramMap.class);
  112. criteria.add(Expression.eq("program", program));
  113. criteria.addOrder(Order.asc("encounterType"));
  114. return (List<EncounterType>)criteria.list();
  115. }
  116.  
  117. public List<Form2ProgramMap> getForm2ProgramMaps(EncounterType encounterType) {
  118. Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Form2ProgramMap.class);
  119. criteria.add(Expression.eq("encounterType", encounterType));
  120. criteria.addOrder(Order.asc("program"));
  121. List<Form2ProgramMap> form2programs = new ArrayList<Form2ProgramMap>();
  122. form2programs.addAll(criteria.list());
  123. return form2programs;
  124. }
  125.  
  126. public boolean isApplied(Program program, EncounterType encounterType) {
  127. Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Form2ProgramMap.class);
  128. criteria.add(Expression.eq("program", program));
  129. if (encounterType != null)
  130. criteria.add(Expression.eq("encounterType", encounterType));
  131. criteria.add(Expression.ne("applied", true));
  132. // the following code throws a Hibernate exception
  133. // return !criteria.list().isEmpty();
  134. // so do this instead
  135. List<Form2ProgramMap> ret = criteria.list();
  136. if (ret == null)
  137. return false;
  138. return ret.isEmpty();
  139. }
  140.  
  141. /* (non-Javadoc)
  142. * @see org.openmrs.module.form2program.db.Form2ProgramDAO#getForm2ProgramMap(org.openmrs.Program, org.openmrs.EncounterType)
  143. */
  144. public List<Form2ProgramMap> getForm2ProgramMap(Program program, EncounterType encounterType) {
  145. Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Form2ProgramMap.class);
  146. criteria.add(Expression.eq("program", program));
  147. criteria.add(Expression.eq("encounterType", encounterType));
  148. criteria.addOrder(Order.asc("encounterType"));
  149. return criteria.list();
  150. }
  151.  
  152. /*
  153. * Apply Form2ProgramMap to patients that are already in the database who have not yet been enrolled in the program.
  154. * This applies to all org.openmrs.EncounterType that are mapped to the @param program.
  155. *
  156. * Enrollment date is the encounter datetime of a patient's first encounter with an encounter type mapped to
  157. * the @param program.
  158. *
  159. * @see org.openmrs.module.form2program.db.Form2ProgramDAO#applyForm2ProgramMap(org.openmrs.Program, org.openmrs.User, java.util.Date)
  160. */
  161. public int applyForm2ProgramMap(Program program, User user, java.util.Date day) {
  162. String query = "INSERT INTO patient_program " +
  163. "(patient_id, program_id, date_enrolled, creator, date_created, changed_by, date_changed,uuid) " +
  164. "SELECT DISTINCT encounter.patient_id, " + program.getProgramId() + ", encounter.encounter_datetime, " + user.getUserId() +
  165. ", '" + df.format(day) + "', " + user.getUserId() + ", '" + df.format(day) + "','' FROM encounter WHERE encounter.encounter_type in " +
  166. "(select form2program_map.encounter_type from form2program_map where form2program_map.program = " + program.getProgramId() +
  167. ") AND encounter.patient_id not in (select patient_id from patient_program where patient_program.program_id = " + program.getProgramId() +
  168. " and patient_program.date_completed is null ) " +
  169. "AND encounter.encounter_datetime = (select min(e.encounter_datetime) from encounter e where e.patient_id = encounter.patient_id and e.encounter_type in " +
  170. "( select form2program_map.encounter_type from form2program_map where form2program_map.program = " + program.getProgramId() + " ) ) " +
  171. "GROUP BY encounter.patient_id ORDER BY encounter.encounter_datetime ASC";
  172. log.error("P: query in Program ="+query);
  173. String q1="SELECT DISTINCT encounter.patient_id, " + program.getProgramId() + ", encounter.encounter_datetime, " + user.getUserId() +
  174. ", '" + df.format(day) + "', " + user.getUserId() + ", '" + df.format(day) + "' FROM encounter WHERE encounter.encounter_type in " +
  175. "(select form2program_map.encounter_type from form2program_map where form2program_map.program = " + program.getProgramId() +
  176. ")";
  177. String q2= "select form2program_map.encounter_type from form2program_map where form2program_map.program = " + program.getProgramId() ;
  178. int rows = 0;
  179. try {
  180. log.error("P:exist in encounter "+this.sessionFactory.getCurrentSession().connection().createStatement().executeQuery(q1).next());
  181. log.error("P:exist in form2program_map "+this.sessionFactory.getCurrentSession().connection().createStatement().executeQuery(q2).next());
  182. rows = this.sessionFactory.getCurrentSession().connection().prepareStatement(query).executeUpdate();
  183. log.error("P:rows in try block="+rows);
  184. String applied = "UPDATE form2program_map set applied = true where program = " + program.getProgramId().toString();
  185. this.sessionFactory.getCurrentSession().connection().prepareStatement(applied).executeUpdate();
  186. }
  187. catch (Exception e){
  188. log.error(e.getMessage());
  189. }
  190. log.error("P:rows after try block="+rows);
  191. return rows;
  192. }
  193.  
  194. /*
  195. * Apply Form2ProgramMap to patients that are already in the database who have not yet been enrolled in the program.
  196. * This applies only to the @param org.openmrs.EncounterType that is mapped to the @param Program.
  197. *
  198. * Enrollment date is the encounter datetime of a patient's first encounter with an encounter type
  199. * equal to @param encounterType.
  200. *
  201. * (non-Javadoc)
  202. * @see org.openmrs.module.form2program.db.Form2ProgramDAO#applyForm2ProgramMap(org.openmrs.Program, org.openmrs.EncounterType, org.openmrs.User, java.util.Date)
  203. */
  204. public int applyForm2ProgramMap(Program program, EncounterType encounterType, User user, java.util.Date day) {
  205. String query = "INSERT INTO patient_program " +
  206. "(patient_id, program_id, date_enrolled, creator, date_created, changed_by, date_changed) " +
  207. "SELECT DISTINCT encounter.patient_id, " + program.getProgramId() + ", encounter.encounter_datetime, " + user.getUserId() +
  208. ", '" + df.format(day) + "', " + user.getUserId() + ", '" + df.format(day) + "' FROM encounter WHERE encounter.encounter_type = " + encounterType.getEncounterTypeId() +
  209. " AND encounter.patient_id not in (select patient_id from patient_program where patient_program.program_id = " + program.getProgramId() +
  210. " and patient_program.date_completed is null ) " +
  211. "AND encounter.encounter_datetime = (select min(e.encounter_datetime) from encounter e where e.patient_id = encounter.patient_id and e.encounter_type = " +
  212. encounterType.getEncounterTypeId() + " ) GROUP BY encounter.patient_id ORDER BY encounter.encounter_datetime ASC";
  213.  
  214. log.error("ET: query in Program ="+query);
  215. String q1="SELECT DISTINCT encounter.patient_id, " + program.getProgramId() + ", encounter.encounter_datetime, " + user.getUserId() + ", '" + df.format(day) + "', " + user.getUserId() + ", '" + df.format(day) + "' FROM encounter WHERE encounter.encounter_type = " + encounterType.getEncounterTypeId();
  216. String q2= "select form2program_map.encounter_type from form2program_map where form2program_map.program = " + program.getProgramId() ;
  217. int rows = 0;
  218. try {
  219. log.error("ET:exist in encounter "+this.sessionFactory.getCurrentSession().connection().createStatement().executeQuery(q1).next());
  220. log.error("ET:exist in form2program_map "+this.sessionFactory.getCurrentSession().connection().createStatement().executeQuery(q2).next());
  221. rows = this.sessionFactory.getCurrentSession().connection().prepareStatement(query).executeUpdate();
  222. log.error("ET:rows in try block="+rows);
  223. String applied = "UPDATE form2program_map set applied = true where program = " + program.getProgramId().toString();
  224. this.sessionFactory.getCurrentSession().connection().prepareStatement(applied).executeUpdate();
  225. }
  226. catch (Exception e){
  227. log.error(e.getMessage());
  228. }
  229. log.error("ET:rows after try block="+rows);
  230. return rows;
  231. }
  232.  
  233. /**
  234. * Delete entry in patient_program if all the encounter types are deleted for a particular program
  235. */
  236.  
  237. public void removeForm2ProgramMap(Program program,
  238. EncounterType encounterType) {
  239. String query="delete from patient_program where patient_id in (SELECT DISTINCT encounter.patient_id FROM encounter WHERE encounter.encounter_type = " + encounterType.getEncounterTypeId() +") and program_id="+ program.getProgramId();
  240. int rows=0;
  241. try {
  242. ResultSet rs= this.sessionFactory.getCurrentSession().connection().createStatement().executeQuery("select count(program) from form2program_map where program= "+program.getProgramId());
  243. if(rs.next())
  244. {
  245. int count=Integer.parseInt(rs.getString(1));
  246. if(count==1)
  247. rows=this.sessionFactory.getCurrentSession().connection().prepareStatement(query).executeUpdate();
  248. }
  249. }
  250. catch (HibernateException e) {
  251. // TODO Auto-generated catch block
  252. e.printStackTrace();
  253. } catch (SQLException e) {
  254. // TODO Auto-generated catch block
  255. e.printStackTrace();
  256. }
  257. }
  258.  
  259.  
  260. public List<Form2ProgramCondition> getConditions(Integer conditionId) {
  261. Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Form2ProgramCondition.class);
  262. if (conditionId != null)
  263. criteria.add(Expression.eq("conditionId", conditionId));
  264. return criteria.list();
  265. }
  266.  
  267. public List<Form2ProgramTransition> getTransitions(ProgramWorkflowState currentState, Form2ProgramCondition condition) {
  268. Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Form2ProgramTransition.class);
  269. if (currentState != null)
  270. criteria.add(Expression.eq("currentState", currentState));
  271. if (condition != null)
  272. criteria.add(Expression.eq("condition", condition));
  273. return criteria.list();
  274. }
  275.  
  276.  
  277. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement