Hi Bruno,

The plugin goals for config-file and code generation requires a
"myfaces-metadata.xml" file as input which contains all the info about
component classes, properties, etc.

For the case where tomahawk extends myfaces-api and myfaces-impl, that
file is just available directly from the jar's META-INF dir. This is the
step that would have to change. I suppose the plugin could try to
reconstruct the necessary metadata just from the info available by
analysing the .tld and faces-config.xml files for the third-party lib,
and possibly using introspection on the classes. I'm not sure if all the
critical info would be recoverable [1]. But if not, then the plugin
could certainly get *most* of the data, and the missing bits could then
be added by hand.

It doesn't sound *too* difficult to code...and once the metadata has
been "recovered", the other goals will run fine.

[1] There is a JCP in progress at the moment regarding metadata for JSF
components, because IDEs are having problems implementing some
gui-design features. That seems to me to imply that there is some
important data that cannot be deduced from just the .tld, faces-config
and classfiles. But I haven't read the JCP docs yet.

Regards,
Simon

Bruno Aranda schrieb:
> Hi, is this possible with the myfaces-builder-plugin to extend
> components that are part of another jar library (e.g. extending a
> tomahawk component from a third-party lib)?.
>
> Cheers!
>
> Bruno
>
> On 19/03/2008, [EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>* <[EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>> wrote:
>
>     Leonardo Uribe schrieb:
>
>     > >On Tue, Mar 18, 2008 at 10:54 AM, [EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>
>
>     > <mailto:[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>> <[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>
>
>     > <mailto:[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>>> wrote:
>     > >[1] I'm not sure what the later property examples on that page
>     are meant
>     > >to be; as Leonardo has written them they are attached to no
>     function
>     > >which is not what I had in mind...
>     >
>     > Thanks Simon for make more clear this on the wiki page. I have also
>     > added comments about how
>     > should work isSetFieldMethod and isGetLocalMethod attributes for
>     > @mfp.property.
>
>
>     And thanks for your additions.
>
>     Is the "setLocalMethod" stuff specifically something that trinidad
>     needs? I have not seen this anywhere in core or tomahawk that I
>     remember. If so, then perhaps the wiki could say (trinidad only) or
>     similar next to those props.
>
>     >
>     > On Tue, Mar 18, 2008 at 12:44 PM, Andrew Robinson
>
>     > <[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>
>     <mailto:[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>>>
>
>     > wrote:
>     >
>     >     On Tue, Mar 18, 2008 at 9:54 AM, [EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>
>
>     >     <mailto:[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>>
>
>     >     <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
>     <mailto:[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>>> wrote:
>     >     > Hi Andrew,
>     >     >
>     >     >  Andrew Robinson schrieb:
>     >     >
>     >     > > One major drawback to the javadoc annotation approach
>     has been
>     >     left
>     >     >  > out and that is attribute reuse. The maven-faces-plugin
>     >     allows you to
>     >     >  > import XML fragments using XPath. So in Trinidad, onclick,
>     >     >  > onmouseover, onmouseout, etc. you can import one XML
>     file and
>     >     not have
>     >     >  > to re-define all these. But with the javadoc approach, you
>     >     have to
>     >     >  > either one, try to hack the code to extend other
>     classes, two
>     >     have
>     >     >  > some weird interface usage to import these. Either way, the
>     >     object
>     >     >  > hierarchy has to be hacked to get it to work.
>     >     >  >
>     >     >
>     >     >  Hmm..interesting. So trinidad has cases where a class X
>     is not
>     >     related
>     >     >  to A by inheritance, but does want to provide the same
>     >     properties as A?
>     >     >
>     >     >  Java currently defines "implements" and "extends"; sounds
>     like
>     >     Trinidad
>     >     >  has invented a new OO concept, "emulates" :-).
>     >
>     >     No, it only imports certain attributes, not all of them.
>     Take some
>     >     time to look at the trinidad-build project and how it works.
>     It is
>     >     better to see than explain.
>     >
>     >
>     > In tomahawk, there are interfaces like
>     > org.apache.myfaces.component.UserRoleAware that define getter and
>     > setter methods for a particular group of related properties.
>     Maybe we
>     > can do something like this:
>     >
>     > /**
>     >  * @mfp.interface //or propertiesinterface or setofproperties or
>     > anything related
>     > **/
>     > public interface UserRoleAware
>     > {
>     >     static final String ENABLED_ON_USER_ROLE_ATTR =
>     "enabledOnUserRole";
>     >     static final String VISIBLE_ON_USER_ROLE_ATTR =
>     "visibleOnUserRole";
>     >
>     >     /**
>     >      * @mfp.property
>     >    **/
>     >     String getEnabledOnUserRole();
>     >
>     >     void setEnabledOnUserRole(String userRole);
>     >
>     >     /**
>     >      * @mfp.property
>     >    **/
>     >     String getVisibleOnUserRole();
>     >
>     >     void setVisibleOnUserRole(String userRole);
>     > }
>     >
>     > Then  the abstract component class can implements this interface and
>     > finally the generated class must implement the methods. In this
>     way we
>     > make clearer the API, and eliminate in a clean way the advantage of
>     > using xml files.
>
>
>     I see. Yes, where is a group of properties to be shared between two
>     classes, the OO way would be to declare a common interface.
>
>     I guess another example is the set of "html passthrough
>     attributes" that
>     is attached to many components.
>
>     The myfaces-builder-plugin code already walks interfaces looking for
>     property definitions. Currently the normal "@mfp.component" annotation
>     is looked for even on interfaces (the plugin already knows that
>     this is
>     an interface) but a different annotation could also be introduced.
>
>     An alternative might be to have
>         @mfp.property group="userRole"
>     and
>        @mfp.component usePropertyGroups="userRole, htmlAttributes"
>     but I prefer the interface approach. Does trinidad pull subsets of
>     properties from the myfaces-api classes? If so, then the
>     usePropertyGroups would be necessary as we cannot factor out
>     interfaces
>     for the javax.faces classes.
>
>
>     The point you made about overriding documentation appears to be the
>     ugliest part of the doc-annotation based approach. In the wiki page I
>     have a "delegating method" just to override the comment, which is
>     really
>     not nice. Any suggestions for a better answer to this would be
>     welcome...
>
>     Regards,
>
>     Simon
>
>

Reply via email to