I was trying to make a change the other day to consolidate the
"datapath" and "$datapath" init attributes. I think the right thing would
be to have the compiler pass a single "datapath" attribute which would
always be a "initobj" hash table to specify a <datapath> element.

(see the email thread "proposed fix
for LPP-4386, making <datapath> element and datapath attribute more
equivalent" message...)

I ran into trouble just trying to pass a list value in the "datapath"
attribute, as Andre pointed out, because setDatapath is used in a
number of places, and overriden, and generally doesn't want to be
passed anything but a string.

Maybe the solution would be to use a different name for the datapath
initializer attribute from the compiler, like "_lzinitialdatapath" or
something, which the compiler uses to pass in the datapath
initializer.  I  still have the change to NodeModel.java that consolidates
the "datapath" and "$datapath" values, so we should try and
solve this issue while we're in here.


On Fri, Feb 8, 2008 at 9:59 AM, P T Withington <[EMAIL PROTECTED]> wrote:
> What I'm working on right now is unifying attribute initialization.
>  Rather than having separate lists of initial values, initial
>  expressions/constraints, and style constraints, I am creating a single
>  list and using classes to distinguish what type of initialization (or
>  constraining) happens to each attribute.  This should solve the
>  problems we have with literal overriding a constraint, etc., which all
>  stem from the runtime not being able to compute how the separate lists
>  interact up the inheritance chain.  This is part of the groundwork to
>  have LZX classes output as JS2 class declarations at compile time,
>  rather than the current 'template' that the instantiator reads to
>  create classes at run time.
>
>  As part of this work, and part of the JS2 work, I am changing the tag
>  compiler to, instead of outputting constraints as free-floating
>  functions that get call/apply-ed to specific instances, to output them
>  as methods on the correct class.  This is mostly an efficiency thing.
>  We still could move these constraint methods around if we had to, I'd
>  just like not to have to, because method calls should be more
>  efficient than applying a random function to an instance.
>
>  Finally, I think I have a fix to make `releaseConstraint` actually
>  work, that falls out of the above changes.  That code had totally
>  rotted, as you will see in the comment, yet there are a number of
>  places that either expect it to work or should be using it.  (For
>  example, if you try to change the `align` or `valign` of a view, you
>  probably get really unexpected results -- the current code applies a
>  constraint for the new value, but the old constraint is not released.
>  If it works at all, it is through serendipity of the order in which
>  the constraints are fired.)
>
>  So, states:  I think for a state, if there are constraints in the
>  state, the constraint method will be defined on the parent class/
>  instance, and the constraint apply/released as the state is applied or
>  not.
>
>  And for implicit replication, yes, I agree, it is probably a matter of
>  moving the constraint method to the instance/class it will be applied
>  to (at compile time), and at run time, you may or may not actually
>  instantiate the replication manager.
>
>
>
>  On 2008-02-08, at 08:41 EST, André Bargull wrote:
>
>  > What do you actually plan to do for states, because through states
>  > you'll get dynamic constraints, so dynamic method attachment/
>  > detachment, too.
>  > You've wrote once about a LzConstraint-class, but I can't quite
>  > remember in which context. If you had this LzConstraint-class,
>  > couldn't you add/remove constraints more easily at runtime?
>  > So specifically for implicit replication, you'd only remove the
>  > datapath-/xpath-constraint from the source-node's datapath and
>  > attach it to the replication-manager and that's it.
>  >
>  > Also keep in mind, that currently constraint datapaths aren't fully
>  > "bug-free", i.e. LPP-4209 or LPP-5353.
>  >
>  > On 2/8/2008 1:46 PM, P T Withington wrote:
>  >> True.  And this I think is one of the complaints about implicit
>  >> replication, that it is unpredictable.
>  >>
>  >> The alternative is that implicit replication will just have to be
>  >> slower than explicit (because it needs to do this dynamic method
>  >> detachment and attachment at runtime, rather than being able to be
>  >> analyzed at compile time).  That would certainly be another way to
>  >> deprecate implicit replication!  :)
>  >>
>  >> On 2008-02-07, at 17:24 EST, André Bargull wrote:
>  >>
>  >>> But you need to consider, that the constraint does not apply to a
>  >>> replication-manager in every case! If the xpath-expression points
>  >>> to a single node, replication isn't triggered and therefore no
>  >>> replication-manager will be created. If you just replace all
>  >>> constraint datapaths with explicit replication, many programs will
>  >>> break, because people don't expect to get a replicator-node in
>  >>> this cases.
>  >>>
>  >>>> Delving into making constraints class methods, we have some tag-
>  >>>> compiler work to do.
>  >>>>
>  >>>> Apparently you can say:
>  >>>>
>  >>>>  <view datapath="${...}" />
>  >>>>
>  >>>> or:
>  >>>>
>  >>>>  <view>
>  >>>>    <datapath xpath="${...}" />
>  >>>>
>  >>>> In both cases, the constraint really applies to the (invisible)
>  >>>> replication manager, not to the view or the datapath.  Right now
>  >>>> this  constraint is picked up at run time, ripped off the clone
>  >>>> template and  smashed onto the replication manager.  That is not
>  >>>> going to work in  modern (JS2) runtimes.
>  >>>>
>  >>>> I think the right approach here is to have the tag compiler re-
>  >>>> write  implicit replication into explicit replication, so:
>  >>>>
>  >>>>  <view datapath="${...}" />
>  >>>>
>  >>>> becomes:
>  >>>>
>  >>>>  <replicator datapath="${...}">
>  >>>>    <view />
>  >>>>  </replicator>
>  >>>>
>  >>>> etc.
>  >>>>
>  >>>> Does this seem feasible?  Could we even spit out a deprecation
>  >>>> warning  suggesting that explicit replication be used?
>  >>>
>  >>
>  >>
>
>
>



-- 
Henry Minsky
Software Architect
[EMAIL PROTECTED]

Reply via email to