/*
* Copyright 2007 Glencoe Software, Inc. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
package ome.services;
import java.io.Serializable;
import ome.annotations.RolesAllowed;
import ome.api.StatefulServiceInterface;
import ome.api.local.LocalQuery;
import ome.api.local.LocalUpdate;
import ome.security.SecuritySystem;
import ome.services.util.BeanHelper;
import ome.system.EventContext;
import ome.system.SelfConfigurableService;
import ome.system.SimpleEventContext;
/**
* Base bean implementation for stateful services. Particularly useful is the
* implementation of
*
* @author Josh Moore, josh at glencoesoftware.com
* @since 3.0-Beta2
*/
public abstract class AbstractStatefulBean implements SelfConfigurableService,
StatefulServiceInterface, Serializable {
private transient BeanHelper beanHelper = new BeanHelper(this.getClass());
protected transient LocalQuery iQuery;
protected transient LocalUpdate iUpdate;
protected transient SecuritySystem sec;
/**
* True if any write operation took place on this bean.
* Allows for updating the database representation if needed.
* @see <a href="http://trac.openmicroscopy.org/ome/ticket/1961">ticket:1961</a>
*/
protected transient boolean modified;
/**
* Query service Bean injector.
*
* @param iQuery
* an <code>IQuery</code> service.
*/
public final void setQueryService(LocalQuery iQuery) {
getBeanHelper().throwIfAlreadySet(this.iQuery, iQuery);
this.iQuery = iQuery;
}
public final void setUpdateService(LocalUpdate update) {
getBeanHelper().throwIfAlreadySet(this.iUpdate, update);
this.iUpdate = update;
}
public final void setSecuritySystem(SecuritySystem secSys) {
getBeanHelper().throwIfAlreadySet(this.sec, secSys);
this.sec = secSys;
}
public void selfConfigure() {
getBeanHelper().configure(this);
}
protected BeanHelper getBeanHelper() {
if (beanHelper == null) {
beanHelper = new BeanHelper(this.getClass());
}
return beanHelper;
}
protected boolean isModified() {
return modified;
}
protected void modified() {
modified = true;
}
@RolesAllowed("user")
public final EventContext getCurrentEventContext() {
return new SimpleEventContext(sec.getEventContext());
}
}