/* * ome.security.basic.UpdateEventListener * * Copyright 2006 University of Dundee. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.security.basic; // Java imports // Third-party imports import ome.model.IObject; import ome.model.internal.Details; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.hibernate.event.PreUpdateEvent; import org.hibernate.event.PreUpdateEventListener; /** * responsible for setting the * {@link Details#setUpdateEvent(ome.model.meta.Event) updat event} on all * events shortly before being saved. * * @author Josh Moore, josh.moore at gmx.de * @version $Revision$, $Date$ * @see BasicSecuritySystem * @since 3.0-M3 */ public class UpdateEventListener implements PreUpdateEventListener { public final static String UPDATE_EVENT = "UpdateEvent"; private static final long serialVersionUID = -7607753637653567889L; private static Logger log = LoggerFactory.getLogger(UpdateEventListener.class); private final CurrentDetails cd; /** * main constructor. controls access to individual db rows.. */ public UpdateEventListener(CurrentDetails cd) { this.cd = cd; } /** * updates the update event field of an {@link IObject} instance. * */ public boolean onPreUpdate(PreUpdateEvent event) { Object entity = event.getEntity(); if (entity instanceof IObject && !cd.isDisabled(UPDATE_EVENT)) { int[] dirty = event.getPersister().findDirty(event.getState(), event.getOldState(), event.getEntity(), event.getSession()); if (dirty == null || dirty.length == 0) { // return true; // veto. } else { // otherwise change update event (last modification) IObject obj = (IObject) entity; obj.getDetails().setUpdateEvent(cd.getEvent()); } } return false; } }