Yeah, I should re-read mails before I press the submit button ;)

Though, I'm trying to do (minimal part of)
http://code.google.com/p/google-guice/issues/detail?id=62 . I guess
that my only way is to use a method interceptor, catch the execution
of the creationPartControl() method (which I annotate with
@PostConstruct just to keep it general) and then run post-construction
code (wiring presenter to model and view to model thru databinding)
after the method has been executed.

Cheers
Mario

On 14 Dic, 06:20, dg <[email protected]> wrote:
> I confess I don't follow the problem you're trying to solve here, but
> to directly answer "how do I post-process an object constructed by
> Guice", try com.google.inject.spi.InjectionListener
>
> -d
>
> On Dec 13, 8:30 am, Mario Scalas <[email protected]> wrote:
>
> > Hi all,
> >   in my eclipse-based application i've modelled model-view-presenter
> > as different classes leaving the wiring (View to Presenter and
> > Presenter-to-Model, and data-binding between model and view) to guice.
> > Now I've used Peaberry Eclipse extension in order to let guice create
> > and inject the View object and then pass it to the Eclipse framework.
>
> > Though, I also need that after Eclipse class the createPartControl()
> > method on the view, databinding code is run to wire the view to the
> > model (using Eclipse Databinding API). That is, I need post-processing
> > the object when such method is called.
> > I've resorted to write an interceptor to do this:
>
> > // In my module:
> > public class LoginMVPConfig extends AbstractModule {
> >         @Override protected void configure() {
> >                 bindModel( ILoginPresentationModel.class )
> >                         .toView( ILoginView.class )
> >                         .build();
> >         }
>
> >         protected <T> DataBinder<T> bindModel( Class<T> modelType ) {
> >                 return new DataBinder<T>( binder(), modelType );
> >         }
>
> > }
>
> > // Databinding DSL and glue-code
> > public class DataBinder<T> {
> >         private final Class<T> modelType;
> >         private final Binder binder;
> >         private List<Class<?>> viewTypes;
>
> >         public DataBinder( Binder binder, Class<T> modelType ) {
> >                 this.binder = binder;
> >                 this.modelType = modelType;
> >                 this.viewTypes = new ArrayList<Class<?>>();
> >         }
>
> >         public DataBinder<T> toView( Class<?> viewType ) {
> >                 viewTypes.add( viewType );
> >                 return this;
> >         }
>
> >         /**
> >          * For each pair (model, view[i]) a method interceptor is created in
> > order to perform databinding when
> >          * a method annotated with {...@link PostConstruct} annotation is
> > executed.
> >          */
> >         public void build() {
> >                 for (Class<?> viewType : viewTypes) {
> >                         DataBindingPostProcessor dataBinder = new 
> > DataBindingPostProcessor(
> >                                         binder.getProvider( modelType ) );
> >                         binder.bindInterceptor( only( viewType ), 
> > annotatedWith
> > ( PostConstruct.class ), dataBinder );
> >                         binder.requestInjection( dataBinder );
> >                 }
> >         }
>
> > public class DataBindingPostProcessor implements MethodInterceptor {
> >         private final Provider<?> modelProvider;
>
> >         @Inject
> >         private IDataBindingService dataBindingService;
>
> >         public DataBindingPostProcessor( Provider<?> modelProvider ) {
> >                 super();
> >                 this.modelProvider = modelProvider;
> >         }
> >         @Override public Object invoke( MethodInvocation methodInvocation )
> > throws Throwable {
> >                 Object result = methodInvocation.proceed();
> >                 Object theView = methodInvocation.getThis();
> >                 dataBindingService.bind( theView, modelProvider.get() );
> >                 return result;
> >         }
>
> > }
>
> > That is I'm creating an interceptor for each (view,model) pair: which
> > means that I'm going to have a lot of interceptors in my application!
> > Is there any alternative approach for solving my problem?
>
> > Hope I've been clear enough,
> > Mario

--

You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-guice?hl=en.


Reply via email to