Actually you can do simpler:
SomethingAdaptor.java:
public class SomethingAdaptor implements ISqueezeAdaptor
{
private DataSqueezer dataSqueezer;
private static final String PREFIX = "I";
public void setDataSqueezer(DataSqueezer dataSqueezer) {
this.dataSqueezer = dataSqueezer;
}
public void register() {
register(dataSqueezer);
}
public void register(DataSqueezer squeezer) {
squeezer.register(PREFIX, Something.class, this);
}
public String squeeze(DataSqueezer squeezer, Object data)
throws IOException
{
// ...
}
public Object unsqueeze(DataSqueezer squeezer, String string)
throws IOException
{
// ...
}
}
hivemodule.xml:
<service-point id="SomethingAdaptor"
interface="com.acme.SomethingAdaptor">
<invoke-factory>
<construct class="com.acme.SomethingAdaptor"
initialize-method="register">
<set-service property="dataSqueezer"
service-id="tapestry.data.DataSqueezer"/>
</construct>
</invoke-factory>
</service-point>
<contribution configuration-id="hivemind.EagerLoad">
<load service-id="SomethingAdaptor"/>
</contribution>
> -----Original Message-----
> From: Paul Cantrell [mailto:[EMAIL PROTECTED]
> Sent: Monday, August 08, 2005 6:25 PM
> To: Tapestry users
> Subject: Re: Registering a custom ISqueezeAdaptor (was: What is a
> "strategy," and how do I write one?)
>
> That works, thanks!
>
> It would be nice if I could do it just with hivemodule.xml alone,
> without the need for MyDataSqueezerImpl, but I admit this is pretty
> painless.
>
> Maybe this example code should be in the docs? (Or is it and I missed
> it?)
>
> Cheers,
>
> Paul
>
>
> On Aug 8, 2005, at 2:43 AM, Raphaël Jean wrote:
>
> > Paul,
> >
> > You can replace the original DataSqueezer service by your own
> > implementation, which will register your custom squeeze adaptor.
> >
> > public class MyDataSqueezerImpl extends
> > org.apache.tapestry.util.io.DataSqueezerImpl {
> >
> > public MyDataSqueezerImpl(ClassResolver resolver) {
> > super(resolver);
> > new CustomSqueezeAdaptor().register(this);
> > }
> >
> > }
> >
> > Then in your hivemodule.xml:
> >
> > <module>
> > <!-- Replacement for the DataSqueezer service -->
> > <implementation service-id="tapestry.data.DataSqueezer">
> > <invoke-factory>
> > <construct class="com.acme.MyDataSqueezerImpl">
> > <class-resolver/>
> > </construct>
> > </invoke-factory>
> > </implementation>
> > </module>
> >
> > No need to register your custom squeeze adaptor in your pages anymore.
> >
> > Hope this helps,
> > Raphael
> >
> >
> >> -----Original Message-----
> >> From: Paul Cantrell [mailto:[EMAIL PROTECTED]
> >> Sent: Monday, August 08, 2005 5:53 AM
> >> To: Tapestry users
> >> Subject: Registering a custom ISqueezeAdaptor (was: What is a
> >> "strategy,"
> >> and how do I write one?)
> >>
> >> OK, I've managed to register my own CustomSqueezeAdaptor by
> >> implementing PageAttachListener and using the following code:
> >>
> >> private static boolean squeezerRegistered;
> >>
> >> @InjectObject("service:tapestry.data.DataSqueezer")
> >> public abstract DataSqueezer getDataSqueezer();
> >>
> >> public void pageAttached(PageEvent event)
> >> {
> >> synchronized(InnigBasePage.class)
> >> {
> >> if(!squeezerRegistered)
> >> {
> >> new CustomSqueezeAdaptor().register
> >> (getDataSqueezer());
> >> squeezerRegistered = true;
> >> }
> >> }
> >> }
> >>
> >> It works, but it's pretty crummy. Surely there is -- or should be --
> >> a way to do this entirely from my hivemodule.xml?
> >>
> >> Cheers,
> >>
> >> Paul
> >>
> >>
> >> On Aug 7, 2005, at 1:16 PM, Norbert Sándor wrote:
> >>
> >>
> >>> Probably it talks about a data squeezer adaptor.
> >>> You should create a custom squeezer adaptor or eg. make CustomClass
> >>> implement Serializable.
> >>>
> >>> BR,
> >>> Norbi
> >>>
> >>> ----- Original Message ----- From: "Paul Cantrell"
> >>> <[EMAIL PROTECTED]>
> >>> To: "Tapestry users" <[email protected]>
> >>> Sent: Sunday, August 07, 2005 8:09 PM
> >>> Subject: What is a "strategy," and how do I write one?
> >>>
> >>>
> >>>
> >>>
> >>>> I notice that if I do this...
> >>>>
> >>>> <a href="#" jwcid="@DirectLink" listener="listener:doStuff"
> >>>> parameters="ognl:value">
> >>>>
> >>>> ...with this backing code:
> >>>>
> >>>> public abstract CustomClass getValue();
> >>>> public void doStuff(CustomClass value) { ... }
> >>>>
> >>>> ...it doesn't work (which I would expect), but I get this error
> >>>> message:
> >>>>
> >>>> Could not find a strategy instance for class CustomClass
> >>>>
> >>>> ...which suggests that this *could* work if only I registered a
> >>>> "strategy" with Tapestry, whatever that means. I looked through
> >>>> the docs and a did a quick web search on this, without luck --
> >>>> though I'm sure good information is out there somewhere.
> >>>>
> >>>> Anybody on this list know how it's done? I'm using 4.0 beta 3.
> >>>>
> >>>> Cheers,
> >>>>
> >>>> Paul
> >>>>
>
> _________________________________________________________________
>
> "Prediction is hard, especially of the future." -- Niels Bohr
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]