public static void addUpdate(EntityUpdateType type, Object entity, Object source) { addUpdate(type, entity, source, 0); } public static void addUpdate(EntityUpdateType type, Object entity, Object source, int priority) {
public static void addUpdate(EntityUpdateType type, Object entity) { addUpdate(type, entity, entity, 0); } public static void addUpdate(EntityUpdateType type, Object entity, int priority) {
public static void addUpdate(EntityUpdateType type, Object entity, int priority) { addUpdate(type, entity, entity, priority); } public static void addUpdate(EntityUpdateType type, Object entity, Object source) {
public static boolean handleExclude(Object entity) { if (entity == null || DataContext.get() == null) return true; if (!entity.getClass().isAnnotationPresent(ExcludeFromDataPublish.class)) return false; ExcludeFromDataPublish exclude = entity.getClass().getAnnotation(ExcludeFromDataPublish.class); if (exclude.value() == ExcludeMode.CHANGES) DataContext.addUpdate(EntityUpdateType.REFRESH, entity.getClass(), entity.getClass()); return true; } }
@PostUpdate public void onPostUpdate(Object entity) { if (handleExclude(entity)) return; DataContext.addUpdate(EntityUpdateType.UPDATE, entity, entity); }
@PostPersist public void onPostPersist(Object entity) { if (handleExclude(entity)) return; DataContext.addUpdate(EntityUpdateType.PERSIST, entity, entity); }
@PostRemove public void onPostRemove(Object entity) { if (handleExclude(entity)) return; DataContext.addUpdate(EntityUpdateType.REMOVE, entity, entity); }
public void onPostDelete(PostDeleteEvent event) { DataContext.addUpdate(EntityUpdateType.REMOVE, event.getEntity(), event.getEntity()); }
public void onPostInsert(PostInsertEvent event) { DataContext.addUpdate(EntityUpdateType.PERSIST, event.getEntity(), event.getEntity()); }
public void onPostUpdate(PostUpdateEvent event) throws HibernateException { DataContext.addUpdate(EntityUpdateType.UPDATE, event.getEntity(), event.getEntity()); }
public void onPostInsert(PostInsertEvent event) { if (DataPublishListener.handleExclude(event.getEntity())) return; DataContext.addUpdate(EntityUpdateType.PERSIST, event.getEntity(), event.getEntity()); }
private static Object getChange(EntityPersister persister, Session session, String entityName, Serializable id, Object entity) { Number version = (Number)persister.getVersion(entity); String uid = getUid(persister, entity); if (uid == null) return null; Object change = null; for (EntityUpdate du : DataContext.get().getDataUpdates()) { if (du.entity instanceof Change) { if (du.type == EntityUpdateType.UPDATE && ((Change)du.entity).getClassName().equals(entityName) && ((Change)du.entity).getId().equals(id)) { change = du.entity; break; } } else if (du.entity.getClass().getName().equals(entityName) && id.equals(persister.getIdentifier(entity, (SessionImplementor)session))) { change = du.entity; break; } } if (change == null) { change = new Change(entityName, id, version, uid); DataContext.addUpdate(EntityUpdateType.UPDATE, change, entity, 1); } else if (change instanceof Change) ((Change)change).updateVersion(version); return change; }
public void onPostDelete(PostDeleteEvent event) { if (DataPublishListener.handleExclude(event.getEntity())) return; String uid = getUid(event.getPersister(), event.getEntity()); if (uid != null) { ChangeRef deleteRef = new ChangeRef(event.getPersister().getEntityName(), uid, event.getId()); DataContext.addUpdate(EntityUpdateType.REMOVE, deleteRef, event.getEntity()); } else DataContext.addUpdate(EntityUpdateType.REMOVE, event.getEntity(), event.getEntity()); }
public void onPostUpdate(PostUpdateEvent event) { if (DataPublishListener.handleExclude(event.getEntity())) return; if (event.getDirtyProperties() != null && event.getDirtyProperties().length > 0) { Object change = getChange(event.getPersister(), event.getSession(), event.getPersister().getEntityName(), event.getId(), event.getEntity()); if (change instanceof Change) { for (int i = 0; i < event.getDirtyProperties().length; i++) { int pidx = event.getDirtyProperties()[i]; String pname = event.getPersister().getPropertyNames()[pidx]; if (AnnotationUtils.isAnnotatedWith(event.getEntity(), pname, ExcludeFromDataPublish.class)) continue; ((Change)change).getChanges().put(pname, event.getState()[pidx]); } } else if (change == null) DataContext.addUpdate(EntityUpdateType.UPDATE, event.getEntity(), event.getEntity()); } }