details:   /erp/devel/pi/rev/618087ac50e8
changeset: 10092:618087ac50e8
user:      Martin Taal <martin.taal <at> openbravo.com>
date:      Mon Jan 24 14:15:21 2011 +0100
summary:   Added interceptor listener concept to OBInterceptor

details:   /erp/devel/pi/rev/faf7aa8b8d94
changeset: 10093:faf7aa8b8d94
user:      Martin Taal <martin.taal <at> openbravo.com>
date:      Mon Jan 24 14:15:42 2011 +0100
summary:   Refresh objects from the database after updating/adding

diffstat:

 
modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java
 |   5 +
 src/org/openbravo/dal/core/OBInterceptor.java                                  
               |  68 +++++++++-
 2 files changed, 70 insertions(+), 3 deletions(-)

diffs (143 lines):

diff -r 8eaee0bdefcd -r faf7aa8b8d94 
modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java
--- 
a/modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java
     Mon Jan 24 14:13:58 2011 +0100
+++ 
b/modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java
     Mon Jan 24 14:15:42 2011 +0100
@@ -329,6 +329,11 @@
         }
         OBDal.getInstance().flush();
 
+        // refresh the objects from the db as they can have changed
+        for (BaseOBObject bob : bobs) {
+          OBDal.getInstance().getSession().refresh(bob);
+        }
+
         // almost successfull, now create the response
         // needs to be done before the close of the session
         final DataToJsonConverter toJsonConverter = 
OBProvider.getInstance().get(
diff -r 8eaee0bdefcd -r faf7aa8b8d94 
src/org/openbravo/dal/core/OBInterceptor.java
--- a/src/org/openbravo/dal/core/OBInterceptor.java     Mon Jan 24 14:13:58 
2011 +0100
+++ b/src/org/openbravo/dal/core/OBInterceptor.java     Mon Jan 24 14:15:42 
2011 +0100
@@ -11,7 +11,7 @@
  * under the License. 
  * The Original Code is Openbravo ERP. 
  * The Initial Developer of the Original Code is Openbravo SLU 
- * All portions are Copyright (C) 2008 Openbravo SLU 
+ * All portions are Copyright (C) 2008-2011 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -31,6 +31,8 @@
 
 import org.apache.log4j.Logger;
 import org.hibernate.EmptyInterceptor;
+import org.hibernate.Interceptor;
+import org.hibernate.Transaction;
 import org.hibernate.proxy.HibernateProxy;
 import org.hibernate.type.Type;
 import org.openbravo.base.exception.OBException;
@@ -82,6 +84,8 @@
     disableCheckReferencedOrganizations.set(value);
   }
 
+  private Interceptor interceptorListener;
+
   /**
    * Determines if the object is transient (==new and not yet persisted in 
Hibernate).
    * 
@@ -127,6 +131,9 @@
   public void onDelete(Object entity, Serializable id, Object[] state, 
String[] propertyNames,
       Type[] types) {
     SecurityChecker.getInstance().checkDeleteAllowed(entity);
+    if (getInterceptorListener() != null) {
+      getInterceptorListener().onDelete(entity, id, state, propertyNames, 
types);
+    }
   }
 
   /**
@@ -175,11 +182,18 @@
         || !disableCheckReferencedOrganizations.get()) {
       checkReferencedOrganizations(entity, currentState, previousState, 
propertyNames);
     }
+
+    boolean updated = false;
+    if (getInterceptorListener() != null) {
+      updated = getInterceptorListener().onFlushDirty(entity, id, 
currentState, previousState,
+          propertyNames, types);
+    }
+
     if (entity instanceof Traceable || entity instanceof ClientEnabled
         || entity instanceof OrganizationEnabled) {
       return true;
     }
-    return false;
+    return updated;
   }
 
   /**
@@ -210,12 +224,18 @@
 
     doEvent(entity, currentState, propertyNames);
 
+    boolean listenerResult = false;
+    if (getInterceptorListener() != null) {
+      listenerResult = getInterceptorListener().onSave(entity, id, 
currentState, propertyNames,
+          types);
+    }
+
     // audit info fields
     if (entity instanceof Traceable || entity instanceof ClientEnabled
         || entity instanceof OrganizationEnabled) {
       return true;
     }
-    return false;
+    return listenerResult || false;
   }
 
   private void checkReferencedOrganizations(Object entity, Object[] 
currentState,
@@ -385,4 +405,46 @@
     return SessionHandler.getInstance()
         .find(User.class, OBContext.getOBContext().getUser().getId());
   }
+
+  public Interceptor getInterceptorListener() {
+    return interceptorListener;
+  }
+
+  public void setInterceptorListener(Interceptor interceptorListener) {
+    this.interceptorListener = interceptorListener;
+  }
+
+  @Override
+  public void afterTransactionBegin(Transaction tx) {
+    if (getInterceptorListener() != null) {
+      getInterceptorListener().afterTransactionBegin(tx);
+    }
+    super.afterTransactionBegin(tx);
+  }
+
+  @Override
+  public void afterTransactionCompletion(Transaction tx) {
+    if (getInterceptorListener() != null) {
+      getInterceptorListener().afterTransactionCompletion(tx);
+    }
+    super.afterTransactionCompletion(tx);
+  }
+
+  @Override
+  public void beforeTransactionCompletion(Transaction tx) {
+    if (getInterceptorListener() != null) {
+      getInterceptorListener().beforeTransactionCompletion(tx);
+    }
+    super.beforeTransactionCompletion(tx);
+  }
+
+  @SuppressWarnings("unchecked")
+  @Override
+  public void preFlush(Iterator entities) {
+    if (getInterceptorListener() != null) {
+      getInterceptorListener().preFlush(entities);
+    }
+    super.preFlush(entities);
+  }
+
 }
\ No newline at end of file

------------------------------------------------------------------------------
Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
Finally, a world-class log management solution at an even better price-free!
Download using promo code Free_Logger_4_Dev2Dev. Offer expires 
February 28th, so secure your free ArcSight Logger TODAY! 
http://p.sf.net/sfu/arcsight-sfd2d
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to