Code:
public class LoggerInterceptorImpl implements Interceptor, Serializable {
private static final Log logger = LogFactory
.getLog(LoggerInterceptorImpl.class);
private final Map histories = new HashMap();
private String username;
public LoggerInterceptorImpl(String username) {
super();
this.username = username;
}
public LoggerInterceptorImpl() {
super();
}
/* (non-Javadoc)
* @see net.sf.hibernate.Interceptor#onLoad(java.lang.Object, java.io.Serializable, java.lang.Object[], java.lang.String[], net.sf.hibernate.type.Type[])
*/
public boolean onLoad(Object entity, Serializable id, Object[] state,
String[] propertyNames, Type[] types) throws CallbackException {
// TODO Auto-generated method stub
return false;
}
/* (non-Javadoc)
* @see net.sf.hibernate.Interceptor#onFlushDirty(java.lang.Object, java.io.Serializable, java.lang.Object[], java.lang.Object[], java.lang.String[], net.sf.hibernate.type.Type[])
*/
public boolean onFlushDirty(Object entity, Serializable id,
Object[] currentState, Object[] previousState,
String[] propertyNames, Type[] types) throws CallbackException {
Map changedProps = new HashMap();
for (int i=0; i<propertyNames.length; i++) {
Object newOne = currentState[i];
Object oldOne = previousState[i];
if ((newOne==null)&&(oldOne==null)) {
continue;
}
if (newOne instanceof PersistentCollection) {
// Collections must be compared against the snapshot
PersistentCollection collection = (PersistentCollection) newOne;
if (collection.isDirectlyAccessible() == false) {
continue;
}
// retrieve Snapshot
oldOne = collection.getCollectionSnapshot().getSnapshot();
if (oldOne instanceof Map && newOne instanceof Set) {
// a Set is internally stored as Map
oldOne = ((Map) oldOne).values();
}
}
if ((oldOne!=null)&&(oldOne.equals(newOne))) {
continue;
}
Map changedProp = new HashMap();
changedProp.put("propertyName", propertyNames[i]);
changedProp.put("oldValue", oldOne);
changedProp.put("newValue", newOne);
changedProps.put("change", changedProp);
}
System.out.println("onFlushDirty(Object, Serializable, Object[], Object[], String[], Type[])"
+ changedProps);
return false;
}
/* (non-Javadoc)
* @see net.sf.hibernate.Interceptor#onSave(java.lang.Object, java.io.Serializable, java.lang.Object[], java.lang.String[], net.sf.hibernate.type.Type[])
*/
public boolean onSave(Object entity, Serializable id, Object[] state,
String[] propertyNames, Type[] types) throws CallbackException {
// TODO Auto-generated method stub
System.out.println("onSave(Object, Serializable, Object[], String[], Type[]) - hibernate logger");
return false;
}
/* (non-Javadoc)
* @see net.sf.hibernate.Interceptor#onDelete(java.lang.Object, java.io.Serializable, java.lang.Object[], java.lang.String[], net.sf.hibernate.type.Type[])
*/
public void onDelete(Object entity, Serializable id, Object[] state,
String[] propertyNames, Type[] types) throws CallbackException {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see net.sf.hibernate.Interceptor#preFlush(java.util.Iterator)
*/
public void preFlush(Iterator entities) throws CallbackException {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see net.sf.hibernate.Interceptor#postFlush(java.util.Iterator)
*/
public void postFlush(Iterator entities) throws CallbackException {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see net.sf.hibernate.Interceptor#isUnsaved(java.lang.Object)
*/
public Boolean isUnsaved(Object entity) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see net.sf.hibernate.Interceptor#findDirty(java.lang.Object, java.io.Serializable, java.lang.Object[], java.lang.Object[], java.lang.String[], net.sf.hibernate.type.Type[])
*/
public int[] findDirty(Object entity, Serializable id,
Object[] currentState, Object[] previousState,
String[] propertyNames, Type[] types) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see net.sf.hibernate.Interceptor#instantiate(java.lang.Class, java.io.Serializable)
*/
public Object instantiate(Class clazz, Serializable id)
throws CallbackException {
// TODO Auto-generated method stub
return null;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}