On 02.Oct.2002 -- 01:23 PM, Piroumian Konstantin wrote:
> > From: Jeff Turner [mailto:[EMAIL PROTECTED]]
> > 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?
>
> No reason to insist, but no much problems with implementation (except for
> the getAttributeNames()).
> Maybe it's not needed for the most simple modules, e.g. system properties
> (I've implemented it already and will commit as soon as I solve my
> Internet/firewall problems), but even for this I can see a usage area for
> XPath substring()-like functions, e.g.:
> {system-property:concat(substring(user.name, 1, 2), substring(user.name, 2)}
BTW is there an easy way to add functions? (too lazy to read jxpath
docs :-)
> > 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.
>
> +1
+1
> > 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">
<!-- how about this: -->
<input type="request-attr" priority="2"/>
<input type="session-attr" priority="1"/>
<input type="xmlconfig" priority="0"/>
> > <values>
> > <skin>default-skin</skin>
> > </values>
> > </component-instance>
>
> I'd better keep all the modules without chaining by default, so the users
> could chaing them as they like.
The idea of meta modules was to provide functions that may apply to
different sources. Like read a string and convert it to a
java.util.Date or access a java.util.Map entry (easily replacable with
the jxpath support in attributes)
This is the same discussion as with the jxpath. Should it be inherited
or composed. Since I belive this should be configurable by the user
(no reason not to have a number of different configurations for a
site!) I would vote for composition.
In addition I believe that it stays simpler to write custom
modules. Which should be a design goal.
> > 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 cookie value, 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)
>
> Yes.
>
> >
> > 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.
> +1 for <input-module/> build-in handling.
-1 for <input-module/> build-in handling.
+1 for doing chaining in the DefaultsMetaModule
> +1 for attribute mapping (maybe rename it to 'map-attribute'?)
+1 for attribute mapping ("map-attribute" confuses because of "map:attribute"?)
Chris.
--
C h r i s t i a n H a u l
[EMAIL PROTECTED]
fingerprint: 99B0 1D9D 7919 644A 4837 7D73 FEF9 6856 335A 9E08
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]