You are correct about the processing. The thing that threw me off track is
that the quickstart application mixes where it overrides the symbol.

AppModule has a contributeFactoryDefaults where it sets the application
version and it says that it is possible to override this further in in the
DevelopmentModule wihtout saying that this has to be done in
contributeApplicationDefaults. (I added a jira with a suggestion for an
amendment to the current text in the quickstart. TAP5-1830)




As for the override, I have not been able to create a test case yet (I
think grade dislikes me), but reproducing is quite simple.

In contributeApplicationDefaults (DevelopmentModule.java) I added the
following line:
  configuration.override(SymbolConstants.APPLICATION_VERSION,
"1.0-SNAPSHOT-DEV-override");

This runs as expected, but if I want to remove the key using this line
afterwards, I get an exception stating that the key exists:
  configuration.override(SymbolConstants.APPLICATION_VERSION, null);

According to the documentation(2), a null value should remove the key, not
throw an exception.(@param value - new value, or null to remove the key
entirely)

Do you remember if this is a feature that is supposed to be removed and the
documentation needs to be updated, or should I try to create a patch+test
for this?

Regards
Sigbjørn Tvedt

2:
http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/ioc/MappedConfiguration.html#override(K,
V)





On 25 January 2012 17:23, Howard Lewis Ship <hls...@gmail.com> wrote:

> You can only override a key that has been added, and only provide a
> single override for any key.  Processing goes in two steps:  first the
> adds are applied, then the overrides.  In any case, I'm very confident
> about the code and tests for this logic, so if you open a JIRA, be
> sure to include a test case demonstrating the failure.
>
> Tapestry has evolved over time; the override logic came later: in
> earlier code, similar effects were accomplished by having multiple
> services; this is how SymbolSource works to this day: there's the
> "ApplicationDefaults" SymbolProvider, and the "FactoryDefaults"
> SymbolProvider; most likely (without looking at your code) the issue
> is that you are mixing and matching between these two services, just
> causing your confusion.  For an example, an override inside
> FactoryDefaults will be ignored in favor of an add to
> ApplicationDefaults.
>
> On Wed, Jan 25, 2012 at 1:15 AM, Sigbjørn Tvedt <sigbjo...@gmail.com>
> wrote:
> > Hi.
> >
> > I am trying to integrate tapestry5-ckeditor(1) in the quickstart
> examples,
> > but I have a problem figuring out how tapestry is adding/updating the
> > application_version key.
> >
> > In the AppModule, application_version is added by using override(x,y).
> > In the DevelopmentModule, application_version is added bye using
> add(x,y).
> >
> >
> > I am writing the values to the console before they are assigned, and this
> > is what I get:
> > -----
> > DevelopmentModule: SymbolConstants.APPLICATION_VERSION=1.0-SNAPSHOT-DEV
> > AppModule:SymbolConstants.APPLICATION_VERSION=1.0-SNAPSHOT
> > -----
> >
> >
> > According to the printline, DevelopmentModule is added before AppModule
> > overrides the application_version.
> > The part where I have a problem understanding is that the application is
> > using the value from  developmentModule where I am adding the value
> instead
> > of using the value that was overridden in AppModule. I have also noticed
> > that if I try to move the line that adds the  from DevelopmentModule into
> > AppModule, I will get and exception saying that the value already exists,
> > and no key if I try the opposite.
> >
> >
> >
> > Also, I think I found a bug in the override code (
> > org.apache.tapestry5.ioc.MappedConfiguration). The comment on the method
> is:
> >
> > /**
> > * Overrides an existing contribution by its key.
> > *
> > * @param key
> > * unique id of value to override
> > * @param value
> > * new value, or null to remove the key entirely
> > * @since 5.1.0.0
> > */
> > void override(K key, V value);
> >
> > This looks good, but in the ValidatingMappedConfigurationWrapper, an
> > exception is thrown if the key exists (even if you try to insert a
> "null")
> >
> >
> > To sum up:
> > Why is the value inserted by a call to add used instead of the value
> > inserted by using override
> > Why should you use override in AppModule and add in other modules
> > How is it possible to replace a key?
> > Is the comment wrong at the override code or should I file a jira?
> >
> >
> >
> > Regards.
> > Sigbjørn Tvedt
> >
> >
> > 1: https://github.com/plannowtech/tapestry5-ckeditor
>
>
>
> --
> Howard M. Lewis Ship
>
> Creator of Apache Tapestry
>
> The source for Tapestry training, mentoring and support. Contact me to
> learn how I can get you up and productive in Tapestry fast!
>
> (971) 678-5210
> http://howardlewisship.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>

Reply via email to