/*
* $Id$
*
* Copyright 2007 University of Dundee. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
package ome.services.util;
import ome.conditions.InternalException;
import ome.system.OmeroContext;
import ome.system.SelfConfigurableService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContextAware;
/**
* Helper for all bean implementations. This allows us to (largely) not subclass
* a single abstract bean.
*
* @author Josh Moore, josh.moore at gmx.de
* @since 3.0-Beta2
*/
public class BeanHelper {
private transient Class beanClass;
private transient Logger logger;
private transient OmeroContext applicationContext;
public BeanHelper(Class implementationClass) {
beanClass = implementationClass;
logger = LoggerFactory.getLogger(beanClass);
}
// ~ Self-configuration
// =========================================================================
/**
* Lazy loads the application context, which means that if we're not in
* the application server, then the {@link OmeroContext#MANAGED_CONTEXT}
* should never get loaded.
*/
public final void acquireContext() {
if (this.applicationContext == null) {
this.applicationContext = OmeroContext.getManagedServerContext();
}
}
public final void configure(SelfConfigurableService bean) {
this.acquireContext();
// This will, in turn, call throwIfAlreadySet
this.applicationContext.applyBeanPropertyValues(bean,
bean.getServiceInterface());
// FIXME setApplicationContext should be called properly (I think?)
// However, we're going to do it here anyway.
if (bean instanceof ApplicationContextAware) {
ApplicationContextAware aca = (ApplicationContextAware) bean;
aca.setApplicationContext(applicationContext);
}
}
// ~ Helpers
// =========================================================================
public void throwIfAlreadySet(Object current, Object injected) {
if (current != null) {
throw new InternalException(String.format("%s already configured "
+ "with %s cannot set inject %s.", this.getClass()
.getName(), current, injected));
}
}
public void passivationNotAllowed() {
throw new InternalException(
String
.format(
"Passivation should have been disabled for this Stateful Session Beans (%s).\n"
+ "Please contact the Omero development team for how to ensure that passivation\n"
+ "is disabled on your application server.",
this.getClass().getName()));
}
public Exception translateException(Throwable t) {
if (Exception.class.isAssignableFrom(t.getClass())) {
return (Exception) t;
} else {
InternalException ie = new InternalException(t.getMessage());
ie.setStackTrace(t.getStackTrace());
return ie;
}
}
public Logger getLogger() {
return this.logger;
}
public String getLogString(SelfConfigurableService bean) {
StringBuilder sb = new StringBuilder();
sb.append("Bean ");
sb.append(bean);
sb.append("\n with Context ");
sb.append(applicationContext);
return sb.toString();
}
}