> Can you define an interface that is common across all the actions/model
> objects. Then you can have the relevant Actions implement the interface
> and
> write an interceptor to check the value of the specified fields and set
> them
> to null if required after checking that the object is of the correct type
> (i.e. it implements your interface)
Nice Idea Andy! You don't even need common methods in the interface, it can
just bee a signal
interface DomainModelObject{}
than you can have an interceptor
public class CleanerInterceptor extends AbstractInterceptor {
public String intercept(ActionInvocation invocation) throws Exception {
Object action = invocation.getAction();
if( action instanceof ModelDriven ) {
Object model = ((ModelDriven)action).getModel();
//if the model is instance of DomainModelObject clean all of its
properties
if( model instanceof DomainModelObject ) {
DomainModelObject modelObject = (DomainModelObject)model;
Collection<DomainObjectModel> properties = getProperties( modelObject );
for( DomainObjectModel property:properties ) {
cleanProperty( modelObject ,property );
}
}
}
invocation.invoke();
}
private void cleanProperty( DomainObjectModel parent, DomainObjectModel model
)
{
if( model==null ) return;
Collection<DomainObjectModel> properties = getProperties( model );
if( allPropertiesNull( properties ) ) {
setPropertyNullOnParent( parent,model );
}else{
for( DomainObjectModel property:properties ) {
cleanProperty( model,property );
}
}
private Collection<DomainObjectModel> getProperties( DomainObjectModel model )
{...
}
private void setPropertyNullOnParent( DomainObjectModel parent,
DomainObjectModel model )
{...
}
private boolean allPropertiesNull( Collection<DomainObjectModel> properties )
{
for( DomainObjectModel property:properties ) {
if( property!=null ) return false;
}
return true;
}
}
getProperties(...) and setPropertyNullOnParent(...) can both be programmed
using Java Reflection and if you don't like DomainObjectModel being an
Interface you can make it an annotation.
Then cleaner-Interceptor shoulb probably called last on you interceptorstack.
/Stephan
--
GMX Kostenlose Spiele: Einfach online spielen und Spaß haben mit Pastry Passion!
http://games.entertainment.gmx.net/de/entertainment/games/free/puzzle/6169196
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]