/*
* JBoss, the OpenSource J2EE webOS
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.aop.patterns.observable;
import org.jboss.aop.advice.Interceptor;
import org.jboss.aop.joinpoint.FieldInvocation;
import org.jboss.aop.joinpoint.Invocation;
/**
* A Subject Interceptor. Traps changes to the object
* and fires change notifications.
*
* @author <a href="adrian@jboss.com">Adrian Brock</a>
* @version $Revision: 22230 $
*/
public class SubjectInterceptor implements Interceptor
{
public String getName()
{
return "Observerable";
}
public Object invoke(Invocation invocation) throws Throwable
{
FieldInvocation fi = (FieldInvocation) invocation;
Object before = fi.field.get(fi.targetObject);
Object result = invocation.invokeNext();
Object after = fi.field.get(fi.targetObject);
// If it changed fire notifications
if (before == null && after != null || before.equals(after) == false)
{
Subject observable = (Subject) fi.targetObject;
observable.notifyObservers();
}
return result;
}
}