Hi Scott,

2010/5/3 Scott Gray <[email protected]>

> Hi Bruno,
>
> Thanks for taking a look, here's a couple of points about your suggestions:
> - You can't mix and match attributes like that on a single element, you'd
> need to have a separate element for each attribute set.
>

OK, I see what you mean.


> - I really wanted to avoid putting too much definition in the component
> file itself, I'd rather it simply declared them rather than try to define
> them.  If you have a lot of extensions it would be much easier to break the
> definitions up into separate files.
>

What I think we should try to do is to have a standard menu definition in a
menus file and have a the injection tag to specify where to inject the menu.

This would keep the menu definition exactly the same as it is now.
A menu could be used alone as we use it right now and be injected somewhere
at the same time.

-Bruno


>
> Thanks
> Scott
>
> On 3/05/2010, at 11:41 PM, Bruno Busco wrote:
>
> > Hi Scott,
> >
> > could we consider to use the ofbiz-component.xml file to contain all the
> > injections like follows?
> >
> > <ofbiz-component name="ExtendingAccounting"
> >        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> >        xsi:noNamespaceSchemaLocation="
> > http://ofbiz.apache.org/dtds/ofbiz-component.xsd";>
> >
> > <extension-resource type="controller" base-location="component://
> > path/to/base/controller.xml"
> > location="component://path/to/additional/controller.xml"/>
> >
> > <extension-resource type="menu" base-menu="AccountingAppBar"
> > base-menu-location="component://accounting/widget/AccountingMenus.xml"
> > base-menu-before-item="invoices" menu="NewMenuBefore"
> > location="component://accounting/widget/NewMenus.xml"/>
> >
> > <extension-resource type="menu" base-menu="AccountingAppBar"
> > base-menu-location="component://accounting/widget/AccountingMenus.xml"
> > base-menu-after-item="invoices" menu="NewMenuAfter"
> > location="component://accounting/widget/NewMenus.xml"/>
> > </ofbiz-component>
> >
> > We would need only one new tag <extension-resource> with
> type=(controller,
> > menu, etc.)
> > For menu injections the NewMenus.xml would be a standard nemus file.
> > All items in NewMenuBefore menu will be added before the "invoice" items.
> > All items in NewMenuAfter menu will be added after the "invoice" items.
> >
> > My 2 cents,
> > Bruno
> >
> > 2010/5/3 Scott Gray <[email protected]>
> >
> >> Okay for the naming, how about we add a wrapping element that would
> contain
> >> all of our "plug-in" information:
> >> (we could replace inject with plug-ins or something)
> >> <inject>
> >>   <controller base-location="component://path/to/base/controller.xml"
> >> include-location="component://path/to/additional/controller.xml"/>
> >>   <menu-widget
> location="component://path/to/additional/PlugInMenus.xml"/>
> >>   <!-- screen-widget? (add/replace sections, extend or override
> >> actions)-->
> >>   <!-- forms-widget? (add/replace fields, extend/override actions) -->
> >>   <!-- uiLabels? (in services and maybe elsewhere I don't think you can
> >> replace some labels unless you edit or completely replace a UiLabel file
> -->
> >> </inject>
> >>
> >> That would nicely group all plug-in information in one spot.  Another
> >> option for the *-widget and uiLabels would be to use existing *-resource
> >> element pattern because they are only pointing to individual
> >> locations/files, but it wouldn't work for the controller because it
> needs
> >> two location attributes.
> >>
> >> And then for menus we have something like this:
> >> (menu-plugins?)
> >> <menu-injections>
> >>   <menu-injection
> >> location="component://accounting/widget/AccountingMenus.xml"
> >> name="AccountingAppBar">
> >>       <actions type="override | extend"><!-- Either replace existing
> >> actions or execute these after them --></actions>
> >>
> >>       <add type="before" name="invoices">
> >>           <menu-item name="reconciliations"
> title="Reconciliations"><link
> >> target="reconciliations"/></menu-item>
> >>       </add>
> >>       <add type="after" name="invoices">
> >>           <menu-item name="somethingelse" title="Something Else!"><link
> >> target="somethingelse"/></menu-item>
> >>       </add>
> >>
> >>       <!-- maybe this replace tag isn't necessary and we can just
> replace
> >> existing menu items when there is a name match or otherwise add to the
> end
> >> -->
> >>       <replace>
> >>           <menu-item name="invoices" title="Super Invoices!"><link
> >> target="superInvoices"/></menu-item>
> >>       </replace>
> >>   </menu-injection>
> >> </menu-injections>
> >>
> >> Thoughts?
> >>
> >> Thanks
> >> Scott
> >>
> >> HotWax Media
> >> http://www.hotwaxmedia.com
> >>
> >> On 2/05/2010, at 11:53 PM, Scott Gray wrote:
> >>
> >>> To me extend seems clear but I agree it does conflict with the way that
> >> term is used elsewhere in the framework.  I don't really like merge
> though,
> >> it doesn't feel like an accurate description of what is happening.  Any
> >> other ideas anyone?
> >>>
> >>> Either way, I'd document the xsd so no one will be confused for very
> >> long.
> >>>
> >>> For menus, I think it would need to be similar to this controller
> >> approach, the framework will need to know about the extensions
> beforehand.
> >> I haven't really thought much about extending menus at this stage, I'll
> >> give it some thought and send any ideas here when they come to me.
> >>>
> >>> Regards
> >>> Scott
> >>>
> >>> On 2/05/2010, at 6:04 PM, Bruno Busco wrote:
> >>>
> >>>> Thank you Scott for working on this feature.
> >>>> "plug-in" type extensions will help a lot.
> >>>>
> >>>> I agree with you, I prefer the latter solution also.
> >>>> It simply overrides the entries in a single file with the ones
> >> contentained
> >>>> in a new one. Crystal clear.
> >>>>
> >>>> Wouldn't it be better to use the "merge" term instead of the "extend"
> to
> >>>> differentiate from the "extension" mechanism that is already in place?
> >>>>
> >>>> About the menu widget, I remember we talk about some time ago.
> >>>> At that time I proposed something like a "merge" feature more than an
> >>>> extension.
> >>>> This was because base menu items should be added/modified/deleted in
> the
> >>>> plugin file.
> >>>> There should be also some way to specify in which place the new menu
> >> entries
> >>>> are shown in the existent menu.
> >>>>
> >>>> Thank you,
> >>>> Bruno
> >>>>
> >>>> 2010/5/2 Scott Gray <[email protected]>
> >>>>
> >>>>> On 1/05/2010, at 12:35 AM, Scott Gray wrote:
> >>>>>
> >>>>>> On 30/04/2010, at 1:49 PM, Scott Gray wrote:
> >>>>>>
> >>>>>>> What about adding something like the following to
> ofbiz-component.xml
> >>>>> schema
> >>>>>>> <extend-web-app name="order"
> >>>>>>> include-controller="path/to/controller.xml"
> >>>>>>> />
> >>>>>>
> >>>>>> Finding the webapp to extend doesn't look so easy, it looks like it
> >> would
> >>>>> need to be something like:
> >>>>>> <extend-webapp server-name="default-server" mount-point="/ordermgr">
> >>>>>> That would be the only way to be sure that you're extending the
> >> correct
> >>>>> webapp.  The name attribute is really only informational and does
> >> nothing, I
> >>>>> could for example name every webapp in OFBiz "order" and it would
> have
> >> no
> >>>>> effect whatsoever.
> >>>>>
> >>>>> So I ended up doing two implementations:
> >>>>> <!-- extends the catalog webapp with the ordermgr's controller from a
> >>>>> hot-deploy component -->
> >>>>>
> >>>>> <extend-webapp server="default-server" mount-point="/catalog">
> >>>>>     <controller-extension
> >>>>>
> >>
> location="../../applications/order/webapp/ordermgr/WEB-INF/controller.xml"/>
> >>>>> </extend-webapp>
> >>>>>
> >>>>> and:
> >>>>> <!-- extends the catalog's controller with the ordermgr's controller
> >>>>> from a hot-deploy component -->
> >>>>>
> >>>>> <extend-controller
> >>>>>
> >>
> base-location="component://product/webapp/catalog/WEB-INF/controller.xml"
> >>>>>
> >>>>>
> >>
> extend-location="component:///order/webapp/ordermgr/WEB-INF/controller.xml"/>
> >>>>>
> >>>>> And I prefer the latter for a number of reasons:
> >>>>> - The former requires that you supply a ServletContext (or server
> name
> >> and
> >>>>> mount point) when retrieving a ControllerConfig and a number of
> calling
> >>>>> methods do not have that information available
> >>>>> - The latter doesn't depend on the mount point or server name meaning
> >> that
> >>>>> you can change them at will without breaking the extensions
> >>>>> - The latter allows you to extend controllers that don't have a
> webapp,
> >> for
> >>>>> example you can extend common-controller.xml and then your extensions
> >> will
> >>>>> be available to everything that includes it.
> >>>>> - The implementation on the latter feels a lot cleaner
> >>>>>
> >>>>> Any thoughts?
> >>>>>
> >>>>> Both work and I really like this feature, having the ability to plug
> >>>>> additional functionality into the base apps so easily seems pretty
> >> cool.
> >>>>> It's a pity I didn't decide to work on this earlier for 10.04.
> >>>>>
> >>>>> I think the next step would be to add a similar type of feature for
> >>>>> extending the menu widget so that you don't have to override
> >>>>> view-maps/screens to add access to extensions.
> >>>>>
> >>>>> Regards
> >>>>> Scott
> >>>
> >>
> >>
>
>

Reply via email to