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.
- 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.

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
>>> 
>> 
>> 

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to