i prefer a simple factory method on pages that construct
pageparameters or even an entire bookmarkable page link...

PageParameters params=Leaderboard.newPageParameters(someType, someDays);
add(new BookmarkablePageLink("id", Leaderboard.class, params));

or just

add(Leaderboard.newBookmarkableLink("id", someType, someDays));

encapsulation without all the overhead of annots, etc

-igor


On Sat, May 3, 2008 at 2:25 PM, Doug Donohoe <[EMAIL PROTECTED]> wrote:
>
>  One thing that is valuable is encapsulation.  For example, take my
>  Leaderboard class which has two main inputs via PageParameters:
>
>
>
>     static final String PARAM_TYPE = "type";
>     static final String PARAM_DAYS = "days";
>
>  Now, using the current metaphor, I when I want to mount using a MixedParam
>  strategy, I have to (a) expose these as public and (b) then add code in my
>  init() method like:
>
>     mount(new MixedParamUrlCodingStrategy("leaderboard", Leaderboard.class,
>               new String { Leaderboard.PARAM_TYPE, Leaderboard.PARAM_DAYS});
>
>  I'm exposing information I don't really want to.  Instead, why I'm doing now
>  is:
>
>     @MountPath(path = "leaderboard")
>     @MountMixedParam(parameterNames = {Leaderboard.PARAM_TYPE,
>  Leaderboard.PARAM_DAYS})
>     public class Leaderboard extends WebPage { ... }
>
>  If I add or change the PARAMS, I only have to change Leaderboard - it
>  controls how it is mounted rather than up at the Application level.
>
>  If somebody else wants to use this page and change the mount point, they can
>  subclass:
>
>     @MountPath(path = "my/leaderboard")
>     public class MyLeaderboard extend Leaderboard
>
>  The @MountMixedParam annotation is inherited wherea the @MountPath is not.
>  I haven't tested this yet (I'll add it to my unit test), but you could also
>  specify a different mount strategy than MixedParam if you wanted to override
>  that.
>
>  If a class is not annotated with @MountPath, it is not mountable (via
>  annotations).
>
>  If you just define @MountPath and no supporting annotation, it defaults to
>  BookmarkablePage...Strategy.
>
>  Regarding multiple mounts, I could add that by making path a string array -
>  I wasn't sure how often that was used because the way
>  WebRequestCodingStrategy.getMountEncoder works is that it picks the first
>  one it finds (when mapping a class to a mount path).
>
>  For the curious, @MountMixedParam is defined as follows:
>
>     @Target({ ElementType.TYPE })
>     @Retention(RetentionPolicy.RUNTIME)
>     @MountDefinition(strategyClass = MixedParamUrlCodingStrategy.class,
>  argOrder = {"pageMapName", "parameterNames"})
>     @Inherited
>     @Documented
>     public @interface MountFixedMixedParam
>     {
>         String pageMapName() default MountDefinition.NULL;
>
>         String[] parameterNames();
>     }
>
>  This basically defines how to construct the mount strategy class and what
>  the params are.  One of these would need to be defined for each of the
>  half-dozen or so UrlCodingStrategies.  We could make them inner interfaces
>  to keep the definition with the class.
>
>  Note that this mechanism allows for easy extension by end-users.
>
>  I'm using this in my site and it is quite nice.
>
>  I'll post more details later - I'm still testing, etc.
>
>  -Doug
>
>
>  Johan Compagner wrote:
>  >
>  > personally i dont see any added value.
>  > It is stil a line of "code", no gain here.
>  > then scattered throughout your code base
>  > also you have to make sure that you can have then multiply of those mounts
>  > for 1 class
>  > i use the same pages under different mounts..
>  >
>  > also what happens if you package your pages and somebody else uses it
>  > or you start to also use them in an other project...
>  > But that doesnt want those mount points... what then? you cant remove them
>  > because then the first app breaks...
>  > I still think mounting and stuff is something the Application is
>  > responsible
>  > for not the web app itself.
>  >
>  > I could see an annotation like: @Unmountable ...
>  > Because it is sort of a security hole in wicket now. If a page has a
>  > default
>  > constructor and i know the name i could just show it... (of no other
>  > security prevents that)
>  > Ofcourse this is very hypothetical and not very likely that it will be
>  > abused because you have to know classnames (but these can spoil out when
>  > not
>  > carefull with shared resouces..)
>  >
>  >
>  > johan
>  >
>  >
>
>  --
>  View this message in context: 
> http://www.nabble.com/how-to-contribute---wicket-1.4-plans-tp17034501p17039998.html
>  Sent from the Wicket - Dev mailing list archive at Nabble.com.
>
>

Reply via email to