package fr.openwide.core.jpa.hibernate.interceptor; import java.io.Serializable; import org.hibernate.type.Type; public abstract class AbstractSimplePropertyUpdateInterceptor<T> extends AbstractChainableInterceptor { @SuppressWarnings("unchecked") @Override public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) { for (int i = 0; i < propertyNames.length; ++i) { if (propertyNames[i].equals(getObservedFieldName())) { boolean dirty = false; if (currentState[i] == null) { if (previousState[i] != null) { dirty = true; } } else if (!currentState[i].equals(previousState[i])) { dirty = true; } if (dirty) { return onChange((T) entity, currentState, previousState, propertyNames, types); } return false; } } return false; } @Override public boolean applyTo(Object entity) { return isOfClass(entity, getObservedClass()); } protected abstract Class<T> getObservedClass(); protected abstract String getObservedFieldName(); protected abstract boolean onChange(T entity, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types); }