On Tue, Oct 01, 2002 at 08:16:19PM +0200, Christian Haul wrote:
> On 02.Oct.2002 -- 01:32 AM, Jeff Turner wrote:
[snip Jeff raining on Chris's parade]
...
> OK, I'm almost convined.
:)
> > > Granted, the simple
> > > ones like NullInput (always returns "null") won't need it.
> > >
> > > Another point may be that when switching to jxpath, would that impact
> > > the interface? Does getAttributeNames() still return a reasonable
> > > enumeration?
> >
> > Hmm, probably not. It wouldn't make much sense to iterate through all
> > possible XPaths.
>
> OTOH this method is AFAIR only used to create a compabitility feature for
> migration between the two DatabaseActions. With the original ones you
> could say values from "name*" and collapse values of parameters
> "name1", "name2", and "namesomething" to an array.
Okay
> Since InputModules were available only in scratchpad sofar, shall we
> remove this method and agree that all InputModules need to provide an
> XPath interface? I.e. getAttribute() and getAttributeValues() accept an
> XPath expression for the parameter name?
Well there's no reason to insist on XPath, is there?
Currently we have:
public interface InputModule {
Object getAttribute( String name, ... );
Enumeration getAttributeNames( ... );
Object[] getAttributeValues( String name, ... );
}
If getAttributeNames() is serving a purpose, then might as well keep it.
Perhaps just add a Javadoc comment, "this enumeration is not guaranteed
to contain all possible names". A loose contract is probably better than
no contract.
I think with this interface, we can still have input module chaining. It
would just be attributes that get 'chained', not whole objects. So we
could have:
<component-instance class="...RequestModule" name="request-attr"/>
<input-module name="session-attr"/>
</component-instance>
<component-instance class="...SessionModule" name="session-attr">
<input-module name="xmlconfig"/>
</component-instance>
<component-instance class="...XMLModule" name="xmlconfig">
<config>context:///forrestconf.xml</config>
<attribute-map from="*" to="/forrestconf/*"/>
<input-module name="defaults"/>
</component-instance>
<component-instance class="...DefaultsMetaModule" name="defaults">
<values>
<skin>default-skin</skin>
</values>
</component-instance>
So if you request {request-attr:skin}, then you get:
- the request attribute, or if not present:
- the session attribute, or if not present:
- the /forrestconf/skin node from forrestconf.xml, or if unavailable:
- the 'default-skin' value.
(Btw, I reversed the defaulting order in that example, as it seems to
make more sense this way)
To implement this, we could have AbstractInputModule handle the
<input-module> tag and all the chaining, and possibly even mapping from
the requested name to the input module's native name format, which is
what <attribute-map from="*" to="/forrestconf/*"/> does.
--Jeff
> We would need to do that before 2.0.4 since I've moved them out of
> scratchpad recently.
>
> Chris.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]