> 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]

Reply via email to