Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.openmrs.module.changetracker;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Date;
- import java.util.List;
- import javax.jms.JMSException;
- import javax.jms.MapMessage;
- import javax.jms.Message;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.openmrs.Concept;
- import org.openmrs.OpenmrsObject;
- import org.openmrs.api.context.Context;
- import org.openmrs.event.Event;
- import org.openmrs.event.SubscribableEventListener;
- import org.openmrs.module.changetracker.api.ChangeTrackerService;
- /**
- * This class is registered to the {@link Event} in the moduleApplicationContext spring file. It
- * subscribes to all relevant objects and all relevant actions.
- */
- public class ChangesEventListener implements SubscribableEventListener {
- private static Log log = LogFactory.getLog(ChangesEventListener.class);
- /* (non-Javadoc)
- * @see javax.jms.MessageListener#onMessage(javax.jms.Message)
- */
- public void onMessage(Message msgParam) {
- Context.openSession();
- //log.error("***log.error onMessage***:"+msgParam.toString());
- //String username = Context.getAdministrationService().getGlobalProperty(AtomFeedConstants.GP_MESSAGE_USERNAME, "");
- //String password = Context.getAdministrationService().getGlobalProperty(AtomFeedConstants.GP_MESSAGE_PASSWORD, "");
- //if (!username.isEmpty())
- if (!Context.isAuthenticated())
- Context.authenticate("admin", "Admin123*");
- MapMessage msg = (MapMessage) msgParam;
- String action;
- String uuid;
- String classname;
- try {
- action = msg.getString("action");
- classname = msg.getString("classname");
- uuid = msg.getString("uuid");
- }
- catch (JMSException e) {
- log.error("unable to get strings off of the MapMessage", e);
- // fail hard here
- return;
- }
- log.error("action: " + action + " object : " + classname + " uuid: " + uuid);
- //OpenmrsObject openmrsObject = Context.getService(AtomFeedService.class).getObjectByUuid(classname, uuid);
- ChangeTrackerService trackerService = Context.getService(ChangeTrackerService.class);
- if (trackerService == null) log.fatal("Tracker service is null");
- DataPoint dp = new DataPoint();
- /*
- * intentionally separating the methods here so that AtomFeedUtil
- * doesn't have a dependency on Event.Action
- */
- if (action.equals(Event.Action.CREATED.name())) {
- dp.setAction("CREATED");
- } else if (action.equals(Event.Action.UPDATED.name())) {
- dp.setAction("UPDATED");
- } else if (action.equals(Event.Action.VOIDED.name())) {
- dp.setAction("VOIDED");
- } else if (action.equals(Event.Action.PURGED.name())) {
- dp.setAction("PURGED");
- }
- dp.setId(100);
- dp.setObjectClass(classname);
- dp.setDate(new Date());
- dp.setUuid(uuid);
- trackerService.saveDataPoint(dp);
- Context.closeSession();
- }
- /* (non-Javadoc)
- * @see org.openmrs.event.SubscribableEventListener#subscribeToObjects()
- */
- public List<Class<? extends OpenmrsObject>> subscribeToObjects() {
- // admittedly a very strange way to use a convenience method, but java
- // compilation wouldn't occur without this extra line
- // TODO get this list from a GP
- List<Class<? extends OpenmrsObject>> objectList = new ArrayList<Class<? extends OpenmrsObject>>();
- objectList.add(Concept.class);
- //Object classes = Arrays.asList(Concept.class, Patient.class);
- //return (List<Class<? extends OpenmrsObject>>) classes;
- return objectList;
- }
- /* (non-Javadoc)
- * @see org.openmrs.event.SubscribableEventListener#subscribeToActions()
- */
- public List<String> subscribeToActions() {
- return Arrays.asList(
- Event.Action.CREATED.name(),
- Event.Action.UPDATED.name(),
- Event.Action.VOIDED.name(),
- Event.Action.PURGED.name()
- );
- }
- }
- ======================
- package org.openmrs.module.changetracker.api.db.hibernate;
- import java.util.Date;
- import org.hibernate.Criteria;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.criterion.Restrictions;
- import java.util.List;
- import org.openmrs.module.changetracker.DataPoint;
- import org.openmrs.module.changetracker.api.db.ChangeTrackerDAO;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- public class HibernateChangeTrackerDAO implements ChangeTrackerDAO {
- private SessionFactory sessionFactory;
- private static Log log = LogFactory.getLog(HibernateChangeTrackerDAO.class);
- /**
- * @param sessionFactory the sessionFactory to set
- */
- public void setSessionFactory(SessionFactory sessionFactory) {
- this.sessionFactory = sessionFactory;
- }
- /* (non-Javadoc)
- * @see org.openmrs.module.changetracker.api.db.ChangeTrackerDAO#getDataPoints(java.util.Date)
- */
- @SuppressWarnings("unchecked")
- public List<DataPoint> getDataPoints(Date changesSince) {
- Criteria criteria = sessionFactory.getCurrentSession().createCriteria(DataPoint.class);
- if (changesSince != null) {
- criteria.add(Restrictions.ge("date", changesSince));
- return criteria.list();
- } else
- return criteria.list();
- }
- /* (non-Javadoc)
- * @see org.openmrs.module.changetracker.api.db.ChangeTrackerDAO#save(java.lang.Object)
- */
- public <T> T save(T object) {
- if (sessionFactory == null) log.fatal("^^^ sessionFactory is null");
- log.fatal("^^^ Object="+ object.toString());
- Session session = sessionFactory.getCurrentSession();
- if (session == null) log.fatal("~~~~~~ FATAL ERROR. Session is NULL ~~~~~");
- session.save(object);
- return object;
- }
- /* (non-Javadoc)
- * @see org.openmrs.module.changetracker.api.db.ChangeTrackerDAO#delete(java.lang.Object)
- */
- public void delete(Object object) {
- sessionFactory.getCurrentSession().delete(object);
- }
- /* (non-Javadoc)
- * @see org.openmrs.module.changetracker.api.db.ChangeTrackerDAO#deleteDataPoints(java.util.Date)
- */
- public void deleteDataPoints(Date since) {
- DataPoint dataPoint = (DataPoint)sessionFactory.getCurrentSession().createCriteria(DataPoint.class).add(Restrictions.le("date", since));
- Session session = sessionFactory.getCurrentSession();
- session.delete(dataPoint);
- }
- }
- ===============================
- package org.openmrs.module.changetracker;
- import java.io.Serializable;
- import java.util.Date;
- import org.openmrs.BaseOpenmrsObject;
- import javax.persistence.Entity;
- /**
- * This represents a single entry in the changes database.
- *
- */
- @Entity
- public class DataPoint extends BaseOpenmrsObject implements Serializable {
- private static final long serialVersionUID = 1L;
- private Integer id;
- private String uuid;
- private String action;
- private Date date;
- private String objectClass;
- public DataPoint() {
- // Default constructor
- }
- public DataPoint(Date date, String objectClass, String uuid, String action) {
- this.date = date;
- this.objectClass = objectClass;
- this.uuid = uuid;
- this.action = action;
- }
- public String getUuid() {
- return uuid;
- }
- public void setUuid(String uuid) {
- this.uuid = uuid;
- }
- public void setAction(String action) {
- this.action = action;
- }
- public String getAction() {
- return action;
- }
- public Date getDate() {
- return date;
- }
- public void setDate(Date dateCreated) {
- this.date = dateCreated;
- }
- public String getObjectClass() {
- return objectClass;
- }
- public void setObjectClass(String objectClass) {
- this.objectClass = objectClass;
- }
- /* (non-Javadoc)
- * @see org.openmrs.OpenmrsObject#getId()
- */
- public Integer getId() {
- return id;
- }
- /* (non-Javadoc)
- * @see org.openmrs.OpenmrsObject#setId(java.lang.Integer)
- */
- public void setId(Integer id) {
- this.id = id;
- }
- public String toString() {
- return "Id:" + id +
- ",Date:" + date.toString() +
- ",Object class:" + objectClass +
- ",action:" + action +
- ",uuid:" + uuid;
- }
- }
- =====================
- package org.openmrs.module.changetracker.api.impl;
- import java.util.Date;
- import java.util.List;
- import org.openmrs.api.impl.BaseOpenmrsService;
- import org.openmrs.module.changetracker.DataPoint;
- import org.openmrs.module.changetracker.api.ChangeTrackerService;
- import org.openmrs.module.changetracker.api.db.ChangeTrackerDAO;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- public class ChangeTrackerServiceImpl extends BaseOpenmrsService implements
- ChangeTrackerService {
- private ChangeTrackerDAO dao;
- private static Log log = LogFactory.getLog(ChangeTrackerServiceImpl.class);
- public void setDao(ChangeTrackerDAO dao) {
- this.dao = dao;
- }
- public void setChangeTrackerServiceDAO(ChangeTrackerDAO dao) {
- this.dao = dao;
- }
- /* (non-Javadoc)
- * @see org.openmrs.module.changetracker.api.ChangeTrackerService#save(org.openmrs.module.changetracker.DataPoint)
- */
- public DataPoint saveDataPoint(DataPoint dp) {
- log.fatal("+++ In ChangeTrackerServiceImpl::saveDataPoint(). Value=" + dp.toString());
- if (dao == null) log.fatal("+++ DAO object is null");
- return dao.save(dp);
- }
- /* (non-Javadoc)
- * @see org.openmrs.module.changetracker.api.ChangeTrackerService#getDataPoints(java.util.Date)
- */
- public List<DataPoint> getDataPoints(Date changesSince) {
- return dao.getDataPoints(changesSince);
- }
- /* (non-Javadoc)
- * @see org.openmrs.module.changetracker.api.ChangeTrackerService#deleteDataPoints(java.util.Date)
- */
- public void deleteDataPoints(Date since) {
- dao.deleteDataPoints(since);
- }
- }
- ====================================
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Beans to add to the current Application context definition -->
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:jee="http://www.springframework.org/schema/jee"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:util="http://www.springframework.org/schema/util"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://www.springframework.org/schema/jee
- http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
- http://www.springframework.org/schema/util
- http://www.springframework.org/schema/util/spring-util-3.0.xsd">
- <bean id="changeTrackerDAO" class="${project.parent.groupId}.${project.parent.artifactId}.api.db.hibernate.HibernateChangeTrackerDAO">
- <property name="sessionFactory" ref="sessionFactory" />
- </bean>
- <!-- Services accessible via Context.getService() -->
- <bean parent="serviceContext">
- <property name="moduleService">
- <list>
- <value>${project.parent.groupId}.${project.parent.artifactId}.api.ChangeTrackerService</value>
- <bean
- class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
- <property name="transactionManager">
- <ref bean="transactionManager" />
- </property>
- <property name="target">
- <bean class="${project.parent.groupId}.${project.parent.artifactId}.api.impl.ChangeTrackerServiceImpl">
- <property name="dao">
- <bean class="${project.parent.groupId}.${project.parent.artifactId}.api.db.hibernate.HibernateChangeTrackerDAO">
- <property name="sessionFactory">
- <ref bean="sessionFactory" />
- </property>
- </bean>
- </property>
- </bean>
- </property>
- <property name="preInterceptors">
- <ref bean="serviceInterceptors" />
- </property>
- <property name="transactionAttributeSource">
- <ref bean="transactionAttributeSource" />
- </property>
- </bean>
- </list>
- </property>
- </bean>
- <bean class="org.openmrs.event.Event">
- <property name="subscription">
- <bean class="org.openmrs.module.changetracker.ChangesEventListener"></bean>
- </property>
- </bean>
- </beans>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement