Advertisement
Guest User

Untitled

a guest
Jan 6th, 2013
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.97 KB | None | 0 0
  1. package org.openmrs.module.changetracker;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.Date;
  6. import java.util.List;
  7.  
  8. import javax.jms.JMSException;
  9. import javax.jms.MapMessage;
  10. import javax.jms.Message;
  11.  
  12. import org.apache.commons.logging.Log;
  13. import org.apache.commons.logging.LogFactory;
  14. import org.openmrs.Concept;
  15. import org.openmrs.OpenmrsObject;
  16. import org.openmrs.api.context.Context;
  17. import org.openmrs.event.Event;
  18. import org.openmrs.event.SubscribableEventListener;
  19. import org.openmrs.module.changetracker.api.ChangeTrackerService;
  20.  
  21. /**
  22. * This class is registered to the {@link Event} in the moduleApplicationContext spring file. It
  23. * subscribes to all relevant objects and all relevant actions.
  24. */
  25. public class ChangesEventListener implements SubscribableEventListener {
  26.  
  27. private static Log log = LogFactory.getLog(ChangesEventListener.class);
  28.  
  29. /* (non-Javadoc)
  30. * @see javax.jms.MessageListener#onMessage(javax.jms.Message)
  31. */
  32. public void onMessage(Message msgParam) {
  33. Context.openSession();
  34. //log.error("***log.error onMessage***:"+msgParam.toString());
  35. //String username = Context.getAdministrationService().getGlobalProperty(AtomFeedConstants.GP_MESSAGE_USERNAME, "");
  36. //String password = Context.getAdministrationService().getGlobalProperty(AtomFeedConstants.GP_MESSAGE_PASSWORD, "");
  37. //if (!username.isEmpty())
  38. if (!Context.isAuthenticated())
  39. Context.authenticate("admin", "Admin123*");
  40.  
  41. MapMessage msg = (MapMessage) msgParam;
  42. String action;
  43. String uuid;
  44. String classname;
  45. try {
  46. action = msg.getString("action");
  47. classname = msg.getString("classname");
  48. uuid = msg.getString("uuid");
  49. }
  50. catch (JMSException e) {
  51. log.error("unable to get strings off of the MapMessage", e);
  52.  
  53. // fail hard here
  54. return;
  55. }
  56.  
  57. log.error("action: " + action + " object : " + classname + " uuid: " + uuid);
  58.  
  59. //OpenmrsObject openmrsObject = Context.getService(AtomFeedService.class).getObjectByUuid(classname, uuid);
  60. ChangeTrackerService trackerService = Context.getService(ChangeTrackerService.class);
  61. if (trackerService == null) log.fatal("Tracker service is null");
  62.  
  63. DataPoint dp = new DataPoint();
  64. /*
  65. * intentionally separating the methods here so that AtomFeedUtil
  66. * doesn't have a dependency on Event.Action
  67. */
  68. if (action.equals(Event.Action.CREATED.name())) {
  69. dp.setAction("CREATED");
  70. } else if (action.equals(Event.Action.UPDATED.name())) {
  71. dp.setAction("UPDATED");
  72. } else if (action.equals(Event.Action.VOIDED.name())) {
  73. dp.setAction("VOIDED");
  74. } else if (action.equals(Event.Action.PURGED.name())) {
  75. dp.setAction("PURGED");
  76. }
  77.  
  78. dp.setId(100);
  79. dp.setObjectClass(classname);
  80. dp.setDate(new Date());
  81. dp.setUuid(uuid);
  82.  
  83. trackerService.saveDataPoint(dp);
  84. Context.closeSession();
  85. }
  86.  
  87. /* (non-Javadoc)
  88. * @see org.openmrs.event.SubscribableEventListener#subscribeToObjects()
  89. */
  90. public List<Class<? extends OpenmrsObject>> subscribeToObjects() {
  91. // admittedly a very strange way to use a convenience method, but java
  92. // compilation wouldn't occur without this extra line
  93. // TODO get this list from a GP
  94. List<Class<? extends OpenmrsObject>> objectList = new ArrayList<Class<? extends OpenmrsObject>>();
  95. objectList.add(Concept.class);
  96. //Object classes = Arrays.asList(Concept.class, Patient.class);
  97. //return (List<Class<? extends OpenmrsObject>>) classes;
  98. return objectList;
  99. }
  100.  
  101. /* (non-Javadoc)
  102. * @see org.openmrs.event.SubscribableEventListener#subscribeToActions()
  103. */
  104. public List<String> subscribeToActions() {
  105. return Arrays.asList(
  106. Event.Action.CREATED.name(),
  107. Event.Action.UPDATED.name(),
  108. Event.Action.VOIDED.name(),
  109. Event.Action.PURGED.name()
  110. );
  111. }
  112. }
  113.  
  114. ======================
  115.  
  116. package org.openmrs.module.changetracker.api.db.hibernate;
  117.  
  118. import java.util.Date;
  119.  
  120. import org.hibernate.Criteria;
  121. import org.hibernate.Session;
  122. import org.hibernate.SessionFactory;
  123. import org.hibernate.criterion.Restrictions;
  124.  
  125. import java.util.List;
  126.  
  127. import org.openmrs.module.changetracker.DataPoint;
  128. import org.openmrs.module.changetracker.api.db.ChangeTrackerDAO;
  129.  
  130. import org.apache.commons.logging.Log;
  131. import org.apache.commons.logging.LogFactory;
  132.  
  133. public class HibernateChangeTrackerDAO implements ChangeTrackerDAO {
  134.  
  135. private SessionFactory sessionFactory;
  136.  
  137. private static Log log = LogFactory.getLog(HibernateChangeTrackerDAO.class);
  138.  
  139. /**
  140. * @param sessionFactory the sessionFactory to set
  141. */
  142. public void setSessionFactory(SessionFactory sessionFactory) {
  143. this.sessionFactory = sessionFactory;
  144. }
  145.  
  146. /* (non-Javadoc)
  147. * @see org.openmrs.module.changetracker.api.db.ChangeTrackerDAO#getDataPoints(java.util.Date)
  148. */
  149. @SuppressWarnings("unchecked")
  150. public List<DataPoint> getDataPoints(Date changesSince) {
  151. Criteria criteria = sessionFactory.getCurrentSession().createCriteria(DataPoint.class);
  152. if (changesSince != null) {
  153. criteria.add(Restrictions.ge("date", changesSince));
  154. return criteria.list();
  155. } else
  156. return criteria.list();
  157. }
  158.  
  159. /* (non-Javadoc)
  160. * @see org.openmrs.module.changetracker.api.db.ChangeTrackerDAO#save(java.lang.Object)
  161. */
  162. public <T> T save(T object) {
  163. if (sessionFactory == null) log.fatal("^^^ sessionFactory is null");
  164. log.fatal("^^^ Object="+ object.toString());
  165. Session session = sessionFactory.getCurrentSession();
  166.  
  167. if (session == null) log.fatal("~~~~~~ FATAL ERROR. Session is NULL ~~~~~");
  168. session.save(object);
  169. return object;
  170. }
  171.  
  172. /* (non-Javadoc)
  173. * @see org.openmrs.module.changetracker.api.db.ChangeTrackerDAO#delete(java.lang.Object)
  174. */
  175. public void delete(Object object) {
  176. sessionFactory.getCurrentSession().delete(object);
  177. }
  178.  
  179. /* (non-Javadoc)
  180. * @see org.openmrs.module.changetracker.api.db.ChangeTrackerDAO#deleteDataPoints(java.util.Date)
  181. */
  182. public void deleteDataPoints(Date since) {
  183. DataPoint dataPoint = (DataPoint)sessionFactory.getCurrentSession().createCriteria(DataPoint.class).add(Restrictions.le("date", since));
  184. Session session = sessionFactory.getCurrentSession();
  185. session.delete(dataPoint);
  186. }
  187.  
  188. }
  189.  
  190. ===============================
  191.  
  192. package org.openmrs.module.changetracker;
  193.  
  194. import java.io.Serializable;
  195. import java.util.Date;
  196.  
  197. import org.openmrs.BaseOpenmrsObject;
  198.  
  199. import javax.persistence.Entity;
  200.  
  201. /**
  202. * This represents a single entry in the changes database.
  203. *
  204. */
  205. @Entity
  206. public class DataPoint extends BaseOpenmrsObject implements Serializable {
  207.  
  208. private static final long serialVersionUID = 1L;
  209.  
  210. private Integer id;
  211. private String uuid;
  212. private String action;
  213. private Date date;
  214. private String objectClass;
  215.  
  216. public DataPoint() {
  217. // Default constructor
  218. }
  219.  
  220. public DataPoint(Date date, String objectClass, String uuid, String action) {
  221. this.date = date;
  222. this.objectClass = objectClass;
  223. this.uuid = uuid;
  224. this.action = action;
  225. }
  226.  
  227. public String getUuid() {
  228. return uuid;
  229. }
  230.  
  231. public void setUuid(String uuid) {
  232. this.uuid = uuid;
  233. }
  234.  
  235. public void setAction(String action) {
  236. this.action = action;
  237. }
  238.  
  239. public String getAction() {
  240. return action;
  241. }
  242.  
  243. public Date getDate() {
  244. return date;
  245. }
  246.  
  247. public void setDate(Date dateCreated) {
  248. this.date = dateCreated;
  249. }
  250.  
  251. public String getObjectClass() {
  252. return objectClass;
  253. }
  254.  
  255. public void setObjectClass(String objectClass) {
  256. this.objectClass = objectClass;
  257. }
  258.  
  259. /* (non-Javadoc)
  260. * @see org.openmrs.OpenmrsObject#getId()
  261. */
  262. public Integer getId() {
  263. return id;
  264. }
  265.  
  266. /* (non-Javadoc)
  267. * @see org.openmrs.OpenmrsObject#setId(java.lang.Integer)
  268. */
  269. public void setId(Integer id) {
  270. this.id = id;
  271. }
  272.  
  273. public String toString() {
  274. return "Id:" + id +
  275. ",Date:" + date.toString() +
  276. ",Object class:" + objectClass +
  277. ",action:" + action +
  278. ",uuid:" + uuid;
  279. }
  280. }
  281.  
  282. =====================
  283.  
  284. package org.openmrs.module.changetracker.api.impl;
  285.  
  286. import java.util.Date;
  287. import java.util.List;
  288.  
  289. import org.openmrs.api.impl.BaseOpenmrsService;
  290. import org.openmrs.module.changetracker.DataPoint;
  291. import org.openmrs.module.changetracker.api.ChangeTrackerService;
  292. import org.openmrs.module.changetracker.api.db.ChangeTrackerDAO;
  293.  
  294. import org.apache.commons.logging.Log;
  295. import org.apache.commons.logging.LogFactory;
  296.  
  297. public class ChangeTrackerServiceImpl extends BaseOpenmrsService implements
  298. ChangeTrackerService {
  299.  
  300. private ChangeTrackerDAO dao;
  301.  
  302. private static Log log = LogFactory.getLog(ChangeTrackerServiceImpl.class);
  303.  
  304. public void setDao(ChangeTrackerDAO dao) {
  305. this.dao = dao;
  306. }
  307.  
  308. public void setChangeTrackerServiceDAO(ChangeTrackerDAO dao) {
  309. this.dao = dao;
  310. }
  311.  
  312. /* (non-Javadoc)
  313. * @see org.openmrs.module.changetracker.api.ChangeTrackerService#save(org.openmrs.module.changetracker.DataPoint)
  314. */
  315. public DataPoint saveDataPoint(DataPoint dp) {
  316. log.fatal("+++ In ChangeTrackerServiceImpl::saveDataPoint(). Value=" + dp.toString());
  317. if (dao == null) log.fatal("+++ DAO object is null");
  318. return dao.save(dp);
  319. }
  320.  
  321. /* (non-Javadoc)
  322. * @see org.openmrs.module.changetracker.api.ChangeTrackerService#getDataPoints(java.util.Date)
  323. */
  324. public List<DataPoint> getDataPoints(Date changesSince) {
  325. return dao.getDataPoints(changesSince);
  326. }
  327.  
  328. /* (non-Javadoc)
  329. * @see org.openmrs.module.changetracker.api.ChangeTrackerService#deleteDataPoints(java.util.Date)
  330. */
  331. public void deleteDataPoints(Date since) {
  332. dao.deleteDataPoints(since);
  333. }
  334.  
  335. }
  336.  
  337. ====================================
  338.  
  339. <?xml version="1.0" encoding="UTF-8"?>
  340.  
  341. <!-- Beans to add to the current Application context definition -->
  342.  
  343. <beans xmlns="http://www.springframework.org/schema/beans"
  344. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  345. xmlns:p="http://www.springframework.org/schema/p"
  346. xmlns:context="http://www.springframework.org/schema/context"
  347. xmlns:jee="http://www.springframework.org/schema/jee"
  348. xmlns:tx="http://www.springframework.org/schema/tx"
  349. xmlns:aop="http://www.springframework.org/schema/aop"
  350. xmlns:util="http://www.springframework.org/schema/util"
  351. xsi:schemaLocation="http://www.springframework.org/schema/beans
  352. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  353. http://www.springframework.org/schema/context
  354. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  355. http://www.springframework.org/schema/jee
  356. http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
  357. http://www.springframework.org/schema/tx
  358. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  359. http://www.springframework.org/schema/aop
  360. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  361. http://www.springframework.org/schema/util
  362. http://www.springframework.org/schema/util/spring-util-3.0.xsd">
  363.  
  364. <bean id="changeTrackerDAO" class="${project.parent.groupId}.${project.parent.artifactId}.api.db.hibernate.HibernateChangeTrackerDAO">
  365. <property name="sessionFactory" ref="sessionFactory" />
  366. </bean>
  367.  
  368. <!-- Services accessible via Context.getService() -->
  369. <bean parent="serviceContext">
  370. <property name="moduleService">
  371. <list>
  372. <value>${project.parent.groupId}.${project.parent.artifactId}.api.ChangeTrackerService</value>
  373. <bean
  374. class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  375. <property name="transactionManager">
  376. <ref bean="transactionManager" />
  377. </property>
  378. <property name="target">
  379. <bean class="${project.parent.groupId}.${project.parent.artifactId}.api.impl.ChangeTrackerServiceImpl">
  380. <property name="dao">
  381. <bean class="${project.parent.groupId}.${project.parent.artifactId}.api.db.hibernate.HibernateChangeTrackerDAO">
  382. <property name="sessionFactory">
  383. <ref bean="sessionFactory" />
  384. </property>
  385. </bean>
  386. </property>
  387. </bean>
  388. </property>
  389. <property name="preInterceptors">
  390. <ref bean="serviceInterceptors" />
  391. </property>
  392. <property name="transactionAttributeSource">
  393. <ref bean="transactionAttributeSource" />
  394. </property>
  395. </bean>
  396. </list>
  397. </property>
  398. </bean>
  399.  
  400. <bean class="org.openmrs.event.Event">
  401. <property name="subscription">
  402. <bean class="org.openmrs.module.changetracker.ChangesEventListener"></bean>
  403. </property>
  404. </bean>
  405. </beans>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement