Hi,
On Mon, Mar 10, 2008 at 8:54 AM, [EMAIL PROTECTED]
<[EMAIL PROTECTED]> wrote:
> Yes, long descriptions are supported; see the example output I showed in
> the original email. And I see no reason why every option currently
> offered in xml cannot be supported via either an annotation or even
> better automatically by introspecting the classes.
have you also looked at Tobago?
They currently use @nnotations to (at least) generate the required
XML for faces-config / facelets
-Matthias
>
> I did want to build the annotation-handling functionality into the
> existing plugin so that the two sources of info (xml config files and
> doc-annotations) could be merged together. However the existing
> myfaces-faces-plugin code is not well structured for that purpose; it
> makes a lot of very xml-specific assumptions rather than having a
> neutral "metadata" representation. I see no reason why the two couldn't
> co-exist eventually, but intend to build a separate plugin first.
>
> There is no reason why both plugins cannot be run separately, ie the
> pom.xml be configured to run both. But that does lead to a lot of
> inconsistency and redundancy; for example, one component will use the
> annotations on a base class to determine settings for inherited
> properties while another will ignore this annotation info completely and
> get its data from an xml config file that contains (hopefully) the same
> data but in another format. Ecch. I would therefore suggest not having
> some components configured via xml and others via annotations in the
> same project.
>
> What I would like to see is core-1.1 and tomahawk use the approach I'm
> suggesting here. All that is needed is to add annotations to the
> existing code and move the comments that are currently in the tld-files
> into javadoc comments on the appropriate fields. Optionally the property
> methods can be reduced to abstract methods and the save/restore methods
> removed if the generate-component-class approach is wanted.
>
> With this approach it is possible to generate a concrete subclass with
> property implementations and saveState/restoreState methods as has been
> discussed earlier. I'm still not convinced about this, but can live with
> it. Using annotations instead of lots of xml config files is a different
> issue.
>
> Regards,
> Simon
>
>
>
> Martin Marinschek schrieb:
>
>
> > Sounds interesting. Will you support everything the XML-syntax allows
> > to supply now? E.g, long descriptions?
> >
> > will it basically be an option which component-set wants to use which
> > frontend? Then slowly every component set could decide if it wants to
> > move over...
> >
> > How about restoreState/saveState? the getter?
> >
> > regards,
> >
> > Martin
> >
> > On Sun, Mar 9, 2008 at 10:20 PM, simon <[EMAIL PROTECTED]> wrote:
> >
> >> Hi All,
> >>
> >> Currently, trinidad and core-1.2 use the myfaces-faces-plugin to
> >> generate tag classes, config files and component classes.
> >>
> >> There is some work going on to use this for core-1.1 and tomahawk too.
> >>
> >> As I mentioned earlier, I don't like the approach used by the current
> >> myaces-faces-plugin; I think the large number of xml config files that
> >> are needed is not elegant or user-friendly. I proposed using some kind
> >> of "annotation" in the source to drive this process instead.
> >>
> >> I have been working on this recently, and have got the first steps
> >> running. It's still very rough so I won't post the code, but wanted to
> >> let you know what I'm working on. All feedback is welcome.
> >>
> >> Here's an instrumented UIData class from core-1.1:
> >>
> >>
> >> /**
> >> * Represents a component which has multiple "rows" of data.
> >> * <p>
> >> * The children of this component are expected to be
> >> ...
> >> *
> >> * @mfp.component
> >> * type = "javax.faces.Data"
> >> * family = "javax.faces.Data"
> >> * defaultRendererType = "javax.faces.Table"
> >> * desc="tabular data"
> >> */
> >> public class UIData extends UIComponentBase implements NamingContainer
> >> {
> >> ...
> >> /**
> >> * Set the name of the temporary variable that will be exposed to
> >> * child components of the table to tell them what the "rowData"
> >> * object for the current row is. This value must be a literal
> >> * string (EL expression not permitted).
> >> *
> >> * @mfp.property literalOnly=true
> >> */
> >> public void setVar(String var)
> >> {
> >> _var = var;
> >> }
> >> }
> >>
> >> The code I've got so far just scans the source code to build up a
> >> "meta-data structure" holding the relevant data. This would then be used
> >> to drive the file-generation step, hopefully reusing the existing code
> >> from the myfaces-faces-plugin. In other words, I'm proposing replacing
> >> the "front end" of the plugin but not the back-end.
> >>
> >> Dumping the parsed data gives:
> >>
> >> --dumping artifacts--
> >> == Component
> >> class:UIData
> >> type:javax.faces.Data
> >> prop:setVar
> >> class:java.lang.String
> >> isLiteral:true
> >> desc:Set the name of the temporary variable that will be exposed to
> >> child components of the table to tell them what the "rowData"
> >> object for the current row is. This value must be a literal
> >> string (EL expression not permitted).
> >> --dumped artifacts--
> >>
> >>
> >> Note that the javadoc comments from the class are taken into the
> >> metadata. So comments in the component, the generated tag-class and the
> >> taglib file are automatically identical and are maintained in the
> >> *normal* manner for java developers.
> >>
> >> Also, the property type is automatically inferred from the method
> >> declaration, rather than needing to be specified in xml. By the way, the
> >> fact that we need a method to attach the @mfp marker to does not mean
> >> that we need an implementation; an abstract method would be fine if
> >> code-generation is being used to then create a concrete subclass.
> >>
> >> Possibly some of those attributes on the @mfp.component tag could be
> >> made optional by applying standard patterns, eg looking for a public
> >> static field with name "COMPONENT_TYPE" on the class.
> >>
> >>
> >> Notes:
> >>
> >> * The code uses the codehaus QDOX library.
> >> * java15 annotations are not used because
> >> (a) we want to support 1.4
> >> (b) java15 compile-retention annotations are not nice to work with
> >> (c) we explicitly want the javadoc comments
> >>
> >>
> >> Regards,
> >> Simon
> >>
> >>
> >>
> >
> >
> >
> >
>
>
--
Matthias Wessendorf
further stuff:
blog: http://matthiaswessendorf.wordpress.com/
sessions: http://www.slideshare.net/mwessendorf
mail: matzew-at-apache-dot-org