Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » M2T (model-to-text transformation) » Possible XPath/transformation bug when dealing with optional attributes
Possible XPath/transformation bug when dealing with optional attributes [message #53041] Thu, 13 November 2008 08:20 Go to next message
Jochen Wuttke is currently offline Jochen Wuttke
Messages: 41
Registered: July 2009
Member
I have a transformation that looks like this:

<c:iterate select="/XMI/Unique" var="uniqueApplication">
<c:log>Processing application of unique stereotype <c:get
select="$uniqueApplication/@id"/></c:log>

<c:setVariable select="$uniqueApplication/@UniquenessProperty"
var="uniqueProperty"/>

<c:if test="count($uniqueProperty) > 0">
<%-- now do something interesting --%>
</c:if>
</c:iterate>

The attribute @UniquenessProperty is optional, and in my tests I have
one case where the attribute is set, and one case where it is not. The
strange thing that happens is that if I run my transformation once, I
get the correct results (the c:if executes only for the case where the
attribute is set). If I execute the transformation again, the c:if also
executes for the case where the attribute is not set. This behavior
reliable alternates between correct and wrong as often as I care to try.

From the log output I can see that the relevant elements in the model
are always processed in the same order, that is, the element where the
attribute is set is processed before the element without the attribute.
This at least seems to exclude the possibility that a global variable
carries around values when it shouldn't.

I'm not sure but this seems to be a bug somewhere in the Xpath or
transformation engine?!

Jochen
Re: Possible XPath/transformation bug when dealing with optional attributes [message #53095 is a reply to message #53041] Mon, 17 November 2008 14:54 Go to previous messageGo to next message
Joaquin  Cañadas is currently offline Joaquin Cañadas
Messages: 25
Registered: July 2009
Junior Member
I solved a similar problem using the cardinality xpath function. You can
try something like this:

<c:choose select="$uniqueApplication/@UniquenessProperty">
<c:when test="cardinality($uniqueApplication/UniquenessProperty, '1')
= true">
<%-- now do something interesting --%>
</c:when>
</c:choose>


Jochen escribió:
> I have a transformation that looks like this:
>
> <c:iterate select="/XMI/Unique" var="uniqueApplication">
> <c:log>Processing application of unique stereotype <c:get
> select="$uniqueApplication/@id"/></c:log>
>
> <c:setVariable select="$uniqueApplication/@UniquenessProperty"
> var="uniqueProperty"/>
>
> <c:if test="count($uniqueProperty) > 0">
> <%-- now do something interesting --%>
> </c:if>
> </c:iterate>
>
> The attribute @UniquenessProperty is optional, and in my tests I have
> one case where the attribute is set, and one case where it is not. The
> strange thing that happens is that if I run my transformation once, I
> get the correct results (the c:if executes only for the case where the
> attribute is set). If I execute the transformation again, the c:if also
> executes for the case where the attribute is not set. This behavior
> reliable alternates between correct and wrong as often as I care to try.
>
> From the log output I can see that the relevant elements in the model
> are always processed in the same order, that is, the element where the
> attribute is set is processed before the element without the attribute.
> This at least seems to exclude the possibility that a global variable
> carries around values when it shouldn't.
>
> I'm not sure but this seems to be a bug somewhere in the Xpath or
> transformation engine?!
>
> Jochen
Re: Possible XPath/transformation bug when dealing with optional attributes [message #53122 is a reply to message #53095] Tue, 18 November 2008 09:14 Go to previous messageGo to next message
Jochen Wuttke is currently offline Jochen Wuttke
Messages: 41
Registered: July 2009
Member
Thanks, but that does not solve the problem of changing results of the
same transformation. Additionally, this test always fails when the
property is set! This does either not work on attributes, or something
with my setup is really screwed. Plus, that test statement has exactly
the same behavior as the one I'm using in my code, in the case where the
attribute is not present.

I've extended the JET template a little with debug messages:

<c:if test="count($uniqueProperty) > 0">
<c:log>Uniqueness Property set to <c:get select="$uniqueProperty"/></c:log>

pointcut setUniqueProperty( <c:get select="$className" /> _consumer ):
target(_consumer) && call( * <c:get select="$className" />+.set<c:get
select="$uniqueProperty"/>(..) );

before( <c:get select="$className" /> _consumer ): setUniqueProperty(
_consumer ) {
if ( lumi_uniquePropertySet ) {
uniqueProperty = _consumer.get<c:get select="$uniqueProperty"/>();
}
}
</c:if>

Now, what's really crazy is that the <c:get/> in the c:log produces an
error message, saying the XPath expression returned no result. But in
the other places where I use the same <c:get> it works and returns a value.
I'm starting to go crazy about this :S

Jochen

Joaquín Cañadas wrote:
> I solved a similar problem using the cardinality xpath function. You can
> try something like this:
>
> <c:choose select="$uniqueApplication/@UniquenessProperty">
> <c:when test="cardinality($uniqueApplication/UniquenessProperty, '1')
> = true">
> <%-- now do something interesting --%>
> </c:when>
> </c:choose>
>
>
> Jochen escribió:
>> I have a transformation that looks like this:
>>
>> <c:iterate select="/XMI/Unique" var="uniqueApplication">
>> <c:log>Processing application of unique stereotype <c:get
>> select="$uniqueApplication/@id"/></c:log>
>>
>> <c:setVariable select="$uniqueApplication/@UniquenessProperty"
>> var="uniqueProperty"/>
>>
>> <c:if test="count($uniqueProperty) > 0">
>> <%-- now do something interesting --%>
>> </c:if>
>> </c:iterate>
>>
>> The attribute @UniquenessProperty is optional, and in my tests I have
>> one case where the attribute is set, and one case where it is not. The
>> strange thing that happens is that if I run my transformation once, I
>> get the correct results (the c:if executes only for the case where the
>> attribute is set). If I execute the transformation again, the c:if
>> also executes for the case where the attribute is not set. This
>> behavior reliable alternates between correct and wrong as often as I
>> care to try.
>>
>> From the log output I can see that the relevant elements in the model
>> are always processed in the same order, that is, the element where the
>> attribute is set is processed before the element without the attribute.
>> This at least seems to exclude the possibility that a global variable
>> carries around values when it shouldn't.
>>
>> I'm not sure but this seems to be a bug somewhere in the Xpath or
>> transformation engine?!
>>
>> Jochen
Re: Possible XPath/transformation bug when dealing with optional attributes [message #53148 is a reply to message #53041] Tue, 18 November 2008 14:02 Go to previous messageGo to next message
Paul Elder is currently offline Paul Elder
Messages: 849
Registered: July 2009
Senior Member
Jochen:

I am having trouble reproducing your problem. When I try it with input like
the following, I get the expected results, not matter how often I run it.

<XMI>
<Unique id="1"/>
<Unique id="2" UniquenessProperty="value"/>
<Unique id="3"/>
</XMI>

Is you input an XML document, or is it a document serialize by EMF?

Also, what versions of Eclise, EMF and JET are you using? I have used
Ganymede SR1 (Eclipse 3.4.1, EMF 2.4.1, JET 0.9.1)

Paul
Re: Possible XPath/transformation bug when dealing with optional attributes [message #53224 is a reply to message #53148] Thu, 20 November 2008 04:30 Go to previous messageGo to next message
Jochen Wuttke is currently offline Jochen Wuttke
Messages: 41
Registered: July 2009
Member
My input is a UML model extended with stereotypes, both created with
Eclipse UML.
I could attach the model and transformation project, but I'm not sure if
it's appropriate to post large attachments to the group.

Jochen

Paul Elder wrote:
> Jochen:
>
> I am having trouble reproducing your problem. When I try it with input like
> the following, I get the expected results, not matter how often I run it.
>
> <XMI>
> <Unique id="1"/>
> <Unique id="2" UniquenessProperty="value"/>
> <Unique id="3"/>
> </XMI>
>
> Is you input an XML document, or is it a document serialize by EMF?
>
> Also, what versions of Eclise, EMF and JET are you using? I have used
> Ganymede SR1 (Eclipse 3.4.1, EMF 2.4.1, JET 0.9.1)
>
> Paul
>
>
Re: Possible XPath/transformation bug when dealing with optional attributes [message #53249 is a reply to message #53224] Thu, 20 November 2008 07:45 Go to previous messageGo to next message
Paul Elder is currently offline Paul Elder
Messages: 849
Registered: July 2009
Senior Member
Jochen:

I'd say, go ahead and attach it. If its really big, ZIP it first. If the
attachment gets rejected, then e-mail it to me directly :-)

Paul

Jochen wrote:

> My input is a UML model extended with stereotypes, both created with
> Eclipse UML.
> I could attach the model and transformation project, but I'm not sure if
> it's appropriate to post large attachments to the group.

> Jochen
Re: Possible XPath/transformation bug when dealing with optional attributes [message #53276 is a reply to message #53249] Thu, 20 November 2008 08:52 Go to previous messageGo to next message
Jochen Wuttke is currently offline Jochen Wuttke
Messages: 41
Registered: July 2009
Member
This is a multi-part message in MIME format.
--------------030705080905040105020305
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 7bit

OK, here we go...


Paul Elder wrote:
> Jochen:
>
> I'd say, go ahead and attach it. If its really big, ZIP it first. If the
> attachment gets rejected, then e-mail it to me directly :-)
>
> Paul
>
>




--------------030705080905040105020305
Content-Type: text/xml; x-mac-type="0"; x-mac-creator="0";
name="Tomcat.uml"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="Tomcat.uml"

<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:propcheck="http:///schemas/propcheck/_lo-b4KwJEd2CQKN5zsBxOw/0" xmlns:uml="http://www.eclipse.org/uml2/2.1.0/UML" xsi:schemaLocation="http:///schemas/propcheck/_lo-b4KwJEd2CQKN5zsBxOw/0 pathmap://PROPCHECK_PROFILES/propcheck.profile.uml#_lpCGQKwJ Ed2CQKN5zsBxOw">
<uml:Model xmi:id="_xeu4II-dEd2-tbgO9SQqEQ" name="Tomcat Example">
<packagedElement xmi:type="uml:Package" xmi:id="_-IpKIJt-Ed2PubECUyswvw" name="javax">
<packagedElement xmi:type="uml:Package" xmi:id="_AsgOAJt_Ed2PubECUyswvw" name="servlet">
<packagedElement xmi:type="uml:Package" xmi:id="_nrpjMJt_Ed2U5ofqNHZ7Rw" name="jsp">
<packagedElement xmi:type="uml:Class" xmi:id="_QsBscJVCEd2aG-UbUOMskA" name="JspFactory">
<ownedOperation xmi:id="_SZgh8JVCEd2aG-UbUOMskA" name="getDefaultFactory"/>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_qDwqEJt_Ed2U5ofqNHZ7Rw" name="tagext">
<packagedElement xmi:type="uml:Interface" xmi:id="_tcrGoJt_Ed2U5ofqNHZ7Rw" name="JspIdConsumer"/>
</packagedElement>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_cOj9UJxaEd2yIuY0mCafDw" name="el">
<packagedElement xmi:type="uml:Class" xmi:id="_eVFk8JxaEd2yIuY0mCafDw" name="CompositeELResolver">
<nestedClassifier xmi:type="uml:Class" xmi:id="_omXkUJ7HEd2DgMRoDWUDUQ" name="FeatureIterator">
<ownedOperation xmi:id="_st4MQJ7HEd2DgMRoDWUDUQ" name="next"/>
</nestedClassifier>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_7cJx4JuCEd2-zIJO-AmP5w" name="faces">
<packagedElement xmi:type="uml:Package" xmi:id="_9f2H8JuCEd2-zIJO-AmP5w" name="webapp">
<packagedElement xmi:type="uml:Class" xmi:id="__7BJ4JuCEd2-zIJO-AmP5w" name="UIComponentClassicTagBase" isAbstract="true"/>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_jgbIwJxXEd2zH7P9kuSfFQ" name="component">
<packagedElement xmi:type="uml:Class" xmi:id="_msh4YJxXEd2zH7P9kuSfFQ" name="UIComponent" isAbstract="true">
<ownedAttribute xmi:id="_kv3L4Ky0Ed28WO-ms6k0Zw" name="children" type="_msh4YJxXEd2zH7P9kuSfFQ" aggregation="composite" association="_Gr0JcKy0Ed28WO-ms6k0Zw">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_6yBbgKy0Ed28WO-ms6k0Zw" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_6ISiAKy0Ed28WO-ms6k0Zw"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_VtCpwKywEd28WO-ms6k0Zw" name="DefaultUniquePropertyTest"/>
<packagedElement xmi:type="uml:Association" xmi:id="_Gr0JcKy0Ed28WO-ms6k0Zw" name="A_UIComponent_children" memberEnd="_OH0oAKy0Ed28WO-ms6k0Zw _kv3L4Ky0Ed28WO-ms6k0Zw">
<ownedEnd xmi:id="_OH0oAKy0Ed28WO-ms6k0Zw" name="" type="_msh4YJxXEd2zH7P9kuSfFQ" association="_Gr0JcKy0Ed28WO-ms6k0Zw"/>
</packagedElement>
</packagedElement>
</packagedElement>
</packagedElement>
<profileApplication xmi:id="_5xPRMKw2Ed2Pepbvoy45wA">
<eAnnotations xmi:id="_5xPRMaw2Ed2Pepbvoy45wA" source="http://www.eclipse.org/uml2/2.0.0/UML">
<references xmi:type="ecore:EPackage" href=" pathmap://PROPCHECK_PROFILES/propcheck.profile.uml#_lpCGQKwJ Ed2CQKN5zsBxOw"/>
</eAnnotations>
<appliedProfile href=" pathmap://PROPCHECK_PROFILES/propcheck.profile.uml#_XJtfYIQc Ed2j7PHkj8Dq7g"/>
</profileApplication>
</uml:Model>
<propcheck:Initialized xmi:id="_7ZV3cKw2Ed2Pepbvoy45wA" base_Class="_QsBscJVCEd2aG-UbUOMskA"/>
<propcheck:Initializer xmi:id="_86h9YKw2Ed2Pepbvoy45wA" base_Operation="_SZgh8JVCEd2aG-UbUOMskA"/>
<propcheck:NotNull xmi:id="_-_JggKw2Ed2Pepbvoy45wA" base_Operation="_st4MQJ7HEd2DgMRoDWUDUQ"/>
<propcheck:Unique xmi:id="_I1RREKw3Ed2Pepbvoy45wA" base_Class="__7BJ4JuCEd2-zIJO-AmP5w" UniquenessProperty="JspId"/>
<propcheck:Unique xmi:id="_c0nwcKywEd28WO-ms6k0Zw" base_Class="_VtCpwKywEd28WO-ms6k0Zw"/>
<propcheck:Unique xmi:id="_BP5d4Ky1Ed28WO-ms6k0Zw" UniquenessProperty="Id" base_Association="_Gr0JcKy0Ed28WO-ms6k0Zw"/>
</xmi:XMI>

--------------030705080905040105020305
Content-Type: application/zip;
name="transform-plugin.zip"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="transform-plugin.zip"

UEsDBAoAAAAAAGN2dDkAAAAAAAAAAAAAAAARABAAdHJhbnNmb3JtLXBsdWdp bi9VWAwAQGsl
SUprJUn2AfYBUEsDBBQACAAIAGN2dDkAAAAAAAAAAAAAAAAbABAAdHJhbnNm b3JtLXBsdWdp
bi8uY2xhc3NwYXRoVVgMAHFrJUlKayVJ9gH2AZWQywrCMBBF1/YrQvam6spF H4go6EKl1LXE
ZGhT46TmUfTvVUR0VXQ393I4XCbJr2dNOrBOGUzpmI0oARRGKqxSui+XwynN sygRmjvXcl9n
0eATAL29kZNCmVJnBSXP8nXGv4AN+EnDO95DC4Nv2tiKgdCqdcAa6ZnmAUX9 GMrWxeIw327K
2WqzKP6XtRKYMBaYhUtQFuROh0qh6zGZ4Nvg37KjwiebxF9vugNQSwcIpQ6J JqwAAABaAQAA
UEsDBBQACAAIAGN2dDkAAAAAAAAAAAAAAAAfABAAdHJhbnNmb3JtLXBsdWdp bi8uamV0cHJv
cGVydGllc1VYDABxayVJSmslSfYB9gGzsa/IzVEoSy0qzszPs1Uy1DNQUkjN S85PycxLt1UK
DXHTtVCyt+OyyUot0S1OLSkBChfbcXHalKTmFuQklqTqJufnlSRm5qUW2cGE im30schy2hTn
lxYlIwvZ6GMIcdnoo9oEAFBLBwhHbVG0ZQAAAKAAAABQSwMEFAAIAAgAY3Z0 OQAAAAAAAAAA
AAAAABkAEAB0cmFuc2Zvcm0tcGx1Z2luLy5wcm9qZWN0VVgMAHFrJUlKayVJ 9gH2Ab2Sz0oD
MRDGz/Ypyt6baE89pFtQ8aYI1QeIybhkSSYhf4qP39ndtLgWoSB4CHzf5Et+ YSZi9+Xs8gAx
GY/b5o7dNktA5bXBbtu8vz2tNs2uXYgQfQ8qP0JS0YRM4XZxI1A6aIuza9m/ 2tIZFHws0Zby
zgHmVvCTomK9JQ2afzcfxVi9D6DIVPdAxyTqoVBBPnYMlDUhAeshszEG8cyk nIxdGWBpsnzm
Bf958VUknZnykYQ8yP9BBg3sWaL5hJTv/0qshdpcguUSYYpO+gI9jfJl3By4 Y+iX/Kw7eN0R
Gh2t9QXgJOlx598x+3BHUEsHCCDPg6TsAAAArQIAAFBLAwQUAAgACABjdnQ5 AAAAAAAAAAAA
AAAAIQAQAHRyYW5zZm9ybS1wbHVnaW4vYnVpbGQucHJvcGVydGllc1VYDABx ayVJSmslSfYB
9gErzi8tSk7V01OwVchKLTHKSixL1NeJ4VJAgOKiZH2u/NKSgtISsLKkzDx9 LiChl5mXnFOa
kloMFNND1QICBTml6UBFFbk5mHK+riGOup5+bvpcXABQSwcI4zb5F1QAAACA AAAAUEsDBBQA
CAAIAGN2dDkAAAAAAAAAAAAAAAAbABAAdHJhbnNmb3JtLXBsdWdpbi9leHBv cnQueG1sVVgM
AHFrJUlKayVJ9gH2AVWQzU7DMBCEz81TWHunTgNIPcSpkFAPnCpoz8gkm9St Y5u1jdq3Z0kK
Esed/ftm6s1ltOILKRrvFKyWJQh0re+MGxQc9tu7NWyaog7kT9gm0WGvs00K gs2Dce94CZ4S
CKdHVPCRje2gKRZ10jRgusn/Z7m9qEOHy7neTc3Il2MyTqeJQx4iI8mTR/mM 8Zx8kEwQ2iO2
5x353lhkzmn/zWdq+UmvbfwT99fAUmeImT1dQcwIkVl+z4D4zNqa3iApqMpy XVbl/erxoQKR
I748vW49jZqdJsoI8seUnF1xHPKWR1N8A1BLBwiPYAfW5AAAAEEBAABQSwME CgAAAAAAY3Z0
OQAAAAAAAAAAAAAAABoAEAB0cmFuc2Zvcm0tcGx1Z2luL01FVEEtSU5GL1VY DABKayVJSmsl
SfYB9gFQSwMEFAAIAAgAY3Z0OQAAAAAAAAAAAAAAACUAEAB0cmFuc2Zvcm0t cGx1Z2luL01F
VEEtSU5GL01BTklGRVNULk1GVVgMAHFrJUlKayVJ9gH2AW2OwW7CMAyG73mK qGcaoMcgLuNK
pwqk3dPiFleuM5IYaW+/Vl2BSciSD/4++3fpGFuIKf+CENGz1VuzUR/CF4K8 /IMPVizk0w1g
tQxUuF5XJF2OvLDzz1B7wubV2UXkjiCNR/YpCCzua+pYN3GELUJ4cr74YHVz NcIY0SC3hmRA
9hKVPkqJ6gQ3wQD5vGK1D52BhvA7gukhrdS/yfTPrp6v3+f0fVaYMT97Y07t jT362fLigVyM
lUtXq82qRl6rX1BLBwh5p5jewAAAAFQBAABQSwMEFAAIAAgAY3Z0OQAAAAAA AAAAAAAAACIA
EAB0cmFuc2Zvcm0tcGx1Z2luL3BsdWdpbi5wcm9wZXJ0aWVzVVgMAHFrJUlK ayVJ9gH2AeNS
VrBJzi+oLMpMzyix4wLy9JG5QAEVzxQVLq6CnNL0zDy/xNxUBVsF14rE3IKc VAXf/JTUHK6C
ovyyzJTUIqhkeXm5XipEgV5+UToXAFBLBwgMwTvrTgAAAGIAAABQSwMEFAAI AAgAY3Z0OQAA
AAAAAAAAAAAAABsAEAB0cmFuc2Zvcm0tcGx1Z2luL3BsdWdpbi54bWxVWAwA cWslSUprJUn2
AfYBrVO7bsMwDNzzFQb32n0sHSRnCFqgQIYO6RywMm0o1QuSnKR/XzmOnbju UiCaRPJ4x5NA
tjxqle3JB2kNh4f8HjIywlbSNBw+Nq93z7AsF2xJQkkX6AJ9StCu4lTbSFMu sixjdIxkunIX
9UdWHOASOitN5GB9k58Z8x3FPHo0obZeQ3nGsjF1aU5H24rUyyDDIU0Pc8Da YkV+LkO6njWE
iD5uSDuFkTjE8y0UGqXpuqbwod5LrBSGwKHV6hF3ubDaSUVVvk1t29EAxjTq aKzzVlEQXrou
X7LiOroCRWzW8tOjlxTKyQxMamd97Kvfpyf+7VRYE71VG2wCZG2gd0+1PHIQ kGEb7duJILn1
LUHxb/Yd7nFG3SVvwt6/2Yy/vgn5wfqv4FDQjP8QpgI1qjBVYMVff5Kyw0/3 W1CMa1CmcMGK
YUV+AFBLBwgefEmeRQEAAG0DAABQSwMECgAAAAAAY3Z0OQAAAAAAAAAAAAAA ABsAEAB0cmFu
c2Zvcm0tcGx1Z2luL3RlbXBsYXRlcy9VWAwASmslSUprJUn2AfYBUEsDBBQA CAAIAGN2dDkA
AAAAAAAAAAAAAAAmABAAdHJhbnNmb3JtLXBsdWdpbi90ZW1wbGF0ZXMvYW9w LnhtbC5qZXRV
WAwAcWslSUprJUn2AfYBjY9BDsIgEEXX7SkIcWVS2LgytHtP4BpxpDSUIR0q Pb6Qpm51Ny/z
fvK/0hTBpGloG7WfNLTKXC0kRuAL9/ykMW6z50xWS361plAG/YaFYUwOA/W8 K/RAAtbRiPle
v7fwQl7sRsFm/PoEll0aXeg5LlboqM0IYlq9E+LM5S/Ro71Mf5kG57l0qgnr gj0ySu6dy0x5
jP8AUEsHCH68SmGWAAAABgEAAFBLAwQUAAgACABjdnQ5AAAAAAAAAAAAAAAA OgAQAHRyYW5z
Zm9ybS1wbHVnaW4vdGVtcGxhdGVzL0Fzc2VydGlvblZpb2xhdGVkRXhjZXB0 aW9uLmphdmFV
WAwAcWslSUprJUn2AfYBrVNNTxsxED3Hv2IUEEoQ2Q8IgSQUgSoOVByQqIrU m+Mddl28Xsv2
JqCK/96xt4VEKvRD+DCyxzPvjd+M0933XQx24WNjHq0sKw8DMYT9LDuGEXxq RIUablvv7zEJ
YedKQQxzYNGhXWKRwOdKOjC2KS2vgesCfIXAhWhqw/Wj1CXU3KOVXLmAwS2S o6CQJZeKLxRC
qwu0MY3iagfNXTxcCCWNQ7huF0oKuJICNR2XeZIFoFUlRfVMJNFRElVSSOet XLReNnov1kPO
Fy7uQ27lvZml6Wq1SrBjSRpbpgpLrlI0arTMs6TytaLgTh/dgTbWzYKD1oY8 JJfU0tMj4fz6
sqOtjcIateehFEp6/77F0iySvMUMbtDAQbbXdW/xuFlfiLzizoOouC5D+PYl mXNHXQzlfZGN
CjAXDwJNcCTfSDPI83HEG+XZKJ9AfjDbP5qND77+At8m3JQxw8U9L5HAk1ZL JxOp7xLV1lI3
rZszlnZTdsZbXzUWTjhUFu8+9He28mw639maHs3D9jDa42DzSbQ52cPOMY32 aO0y2qxLzaMN
nsl4DSVcjidrmdkLUX74vI8h08iQjef90w3pTlJ+2mmdsrOb1hgafXfLrabR doO+i6PdHzLT
jalQ3Lk3hAV88KgLB0HgRFE3kpe774z1glg9UiuYlPV+wr4OOBhSWq/nWoN2 MJyz3tMayJnh
4VvWVDI1aN0leOvwrzluaPzDT+5w9ujT22YVP1TEWS/hOaa7+WNB/8H/G7pX eP7tlW+8auMx
7In9AFBLBwgdf6fGRwIAAIYFAABQSwMEFAAIAAgAY3Z0OQAAAAAAAAAAAAAA ACwAEAB0cmFu
c2Zvcm0tcGx1Z2luL3RlbXBsYXRlcy9Db21wYXJhYmxlLmFqLmpldFVYDABx ayVJSmslSfYB
9gHdU9Fu2jAUfU6+4jZau4RB8t5SXmCVNg2oRDVpGtNknFvi1rEz21lhFf++ 6wRYtyJUaS/T
IpGQ3HOOzz3X7p/2etDrnQ7C/ilk2RIVGuaEWoIrELg2Bm2lVe6/MFshdyAU MF2lq1IG4cyZ
pqKrS66Vw5VLl+g+MiPYQmIcUYFwUZI63ULj5CL0aK9ADM5cHPW3woqVeDmP CL2tHJTkkll7
zfg9W+KEGL+JJxfwTD5t5W36EuErIQ+r7ij2QHvdp8t9HeqyYsYD5lE2mKuo 4VPCWXZTCEuh
5gj03GaNwGqnSwqdMynXXRhNYTK9gfF09O7q00lYta1Cn5+TXbAoqZnL6NWz HCAb7Fq9CENR
Vtq4l7E6hK/qhRR8N+ODtH02xHnS5WMYZJ0wgA6MmeMFWvhVA1svGq6vZ2HA bh2aODmHE34r
9UPM8u+CI66Q105oRVHD2RlY59MQSjjBpPjBmtJBSzs7CZkInFn7R3AUmTZv fvIjpL8G8zG6
QudxVDBbDGk2UVfhAww97PMXeNzQjg2CDf24bw/iiZ7VvGhZb1ccK28PMIFm 8dnaOixTNCat
aPc4qWiDHzMEuUb7WgENTGKJykEuDOHkujmCZbMOzPf24sQfEe8J6MqyQwv6 yp2mg1rRzZ1D
9MbRzntPL9f+w6zJ95oZ9wIdqXkzgCMqPs2Zrg3HD1uwPzNb5ZvCIMvTvC4r YvD7eJ/nX84L
v9VM2j+mNV3ckUhL+lcm1xqNW2v/x/SCIKRgNz8BUEsHCGZdzMc4AgAAPgYA AFBLAwQUAAgA
CABjdnQ5AAAAAAAAAAAAAAAAOAAQAHRyYW5zZm9ybS1wbHVnaW4vdGVtcGxh dGVzL2V4cGxp
Y2l0SW1wbGVtZW50YXRpb24uYWouamV0VVgMAHFrJUlKayVJ9gH2AaVUbU/b MBD+nPyKIxoo
UWky9pE23YcxpE3jRWo1aQKEjHNtDI4dOS5rN/Hfd07SZizdQFrVpvXdc8+d n7vreH84hOFw
f+KP9yFJFqjQMCvUAmyOwLUxWJVaZc7CqhK5BaGA6TJeFdLzp9bUHl2mXCuL Kxsv0H5lRrA7
iWFADsIFUWx1Aw2jke/QjoEiOLNhMG6JFSswvQ4I3Xp2UnLJquqS8Qe2wHOK eEYejaBHHzf0
Vfwa4lMhd7H2SG9FUUosUNnq9gVeQTYzZxz/wg3+JqzaId3hs6y4KqXgwsr1 dZBMrlVQx1P3
kmSWi4oaliHQd9tHBLa0uqCGcibl+hBOLuD8YgZnFyefTr/t+WUjI4z5MZUM FUoSKg3e9DSG
ZLKRceT7dHdtLNyzRxZLphaxwbmLjM/Q5jojRLm8ozo3E7OTfqsGcf+u5p/g rXxbcCcC/PQ9
Nid/GB3DHp9L/T1k2aPgiCvkSyu0IoXh4AAq60QQSljBpPjBaterrr0TtPFG VID3wVnG7ydQ
/zhK/582rk+jHve7HvdWnZf4ezJ2OeidJAy6HkAmDEWRvjQ19R9BUTeWHEhR BjP3J3BHcU3D
r242gLQp0y3ASQttIJVbfM+baxNSJSDStyMQ4zYqlqgWNifLYFAr2vJCkbaI K3Hjwj1r1rW/
0eWonycsnM3dMYwOoT5cMkNHuv1sXWJVbzMRPLkHLRXPITzX0yXPG4KPK46l mw7ACJpc03Vl
sYjRmLikpbVShV36JtUgiINB8fvZbaHStlOVROsGN2iKIN13kAdAr3tNEpf0 sMcQDCwt92c6
XDrDtJ5lupZ9kUVqXo/6Pzhc0VO9NBy/tOCNRN4sN8iyOFsWJeH5Q9hJR58n /+kXUEsHCF9/
EEiQAgAAPgYAAFBLAwQUAAgACABjdnQ5AAAAAAAAAAAAAAAAKwAQAHRyYW5z Zm9ybS1wbHVn
aW4vdGVtcGxhdGVzL0ltbXV0YWJsZS5hai5qZXRVWAwAcWslSUprJUn2AfYB jZNfb9owFMWf
409xG40qsJK8Q+BlVSWmUSqBJk1CmoxzAZfEtmxnBVX97rsOf9atUde8RInP Pdfn5+u80+9D
v98Zs7wDWbZBhZZ7qTbgtwhCW4vOaFWEP9wZFB6kAq5Nuq/KiM29bVa0GQmt PO59ukH/nVvJ
VyUmMS2QLu6mXh+lSXfIgjo4UIXgPonzk7HiFY6WMalPK62WouTOPXCx4xu8 p4q/zLtDeGOf
Hu1d+hHjO1m2u55LXEu8m9ftfk6qqvZhfRln46WKm3ICnGWLrXTEtECg9wk1 Aq+9roi54GV5
uIHbGdzPFjCd3U7uflwxc0wKuRjQbsFhSVlG8ac3GCAbn5MOGZOV0dZ/rKpH elOvSinOR9xa
dkFDNX9CPjOgJ+uxCHrwZYti50CugSu4SMAfDIJePTbT46DShVxLLEJJxiKj pfKipvPXaqKk
n6Lf6sIl3QFciXWpn5JAJmnd0yWDwqckTbvEmkUsWuFaW3zlwItfUiDukfpI rehI4fqavHzS
aw/bGAc2jfDfnT2zKJofnMcqRWtTQ2PiS5XE05Ds0NwIBXl+ITAew+wYX6+P NN5rGocQUZa1
dQiwHwkYNNQGEH/2NFRf6eMh/Jj7MEgP3Pr/eJSahpVIvOMQbsdc11bgt5M4 afBGi61FXqRF
XRlSi12409ELe/kNUEsHCCUBJ/T7AQAATAQAAFBLAwQUAAgACABjdnQ5AAAA AAAAAAAAAAAA
LQAQAHRyYW5zZm9ybS1wbHVnaW4vdGVtcGxhdGVzL0luaXRpYWxpemVkLmFq LmpldFVYDABx
ayVJSmslSfYB9gGNVW1P2zAQ/pz8iiMClHQ0+U5fBAIhdRorEmjaNCbkOldq cO3IcXkZ8N93
ttNSRsbKl4bcPc/dPffY6e90u9Dt7gzj/g4UxTUqNMwKdQ12hsC1MVhXWpXu Dasr5BaEAqar
/GEuo/jcGh/R1YBrZfHB5tdovzEj2ERimlCA8pIstzqkplkvdtmOgRCc2TTp N8SKzXFwmVB2
E2ml5JLV9Rnjt+wavxLiDXnWg3f0eaCv802IT4RsZ11C6pbx9tbLXY2UsIJJ 8RvLy6QYXqrE
E5DERXExEzWpWiLQbyM2AltYPSfVOZPycQ+Ox/B1fAGn4+PRyY+tuAqzQp/v U79Qo6RpBsn2
OyGgGC5n7cWxmFfa2M1QHcqvFhMp+HLJrbCVOIRZHxMqNJYZAqTNTyt8Cc2y pxjorygOYaK1
RKbgrtEUpCYVwGrvv9CMT66MuHNaLQFirfwApkzW2POJgboTR9CBU2b5DGtg 6hHmaGe6pGcp
9T2BqMQrB2XA+kB6cuMKBw5zW/tuwktqar24yylCh1ooyxfWR09DtTTbB7fV tNOu6GoDDtNJ
8zzLPFdE2cIGdywRxffTUfHapCkOJqzGq3HlT6xWiRNxkOhqVCbDOGqjCEUL fa+wXOF+Hohy
sO1gv1YUnuD5ebPe/47qqjhQTdCP1C9WrQzXn3txxKb0nGZg0C6MotO2D1t8 ShtKWXknOOID
kqTUJZ1C2N2F//qL7OXy3uzgiYZZW9nAmgWZJXqJozhqcYrSqrtKd9dbsI7P O5ohJzuIqXdE
6GZpDDrSaiElaEMU9r1JopVDqMLorUm2NlKaQkfuhVcVaCqatJHrzcBegibg iT+mVXjvGZeU
G/US3NpzkDia4FQbDIN8sL13g4NfzRTSrTW1/L6i88fa4jxHY3I6+8pKlSaH nGNd+y+Oo2o5
sqBpM4/VP27LxiEJfYSiKFxBbWVc5IZ2FY70PiSfLN3bn+mfM/fi3Lq7+owZ uwGPu8+cAh+w
uLWe64Xh+KVJdp+chvliZpCVebmYV4Tgt6mPvDj3vvwBUEsHCMFL4p4KAwAA vQcAAFBLAwQU
AAgACABjdnQ5AAAAAAAAAAAAAAAALwAQAHRyYW5zZm9ybS1wbHVnaW4vdGVt cGxhdGVzL2lz
SW5pdGlhbGl6ZWQuYWouamV0VVgMAHFrJUlKayVJ9gH2AY1U70/bMBD9nPwV RwQo6Wj8nf4Q
Ewip00qRiqZNY0Kuc7SG1I5sl9IB//vOTlvo6FgrpBbfvXd3757dPmg2odk8 6MbtA2BsjAoN
d1KNwU0QhDYGbaVV4U+4rVA4kAq4rvLHaRnFQ2dCRFcdoZXDR5eP0X3jRvJR iWlCAcpLstzp
OjXNWrHP9gyEENylSXtJrPgUO9cJZS8jWylFya295OKej/GCEBvkWQve0ec1 vc13IT6X5XbW
FcRuGe/obbkbaXtKOslL+RuL64R1r1USKEhkxq4m0pKuBQJ9L+VG4DOnp6S7 4GW5OIKzAVwM
rqA/OOud/9iLq3paaItj6hgsljRPJ9l/JwWw7mraVhzLaaWN2w3VoPxqNiql WK15K2wtD2E2
B32K4og14gga0OdOTNACVwtQWjXlKstbZYpuoouQdzpBcW9B3gavOW58PT26 CyazoGZlCdoQ
hffcupCHshjoU2mpnJjV0X7gtWl2DF7EtLF9gNA8zeshjTTPsyxQRZQsXb2L FYB97/fY64SG
nYy4xZtBFW6IVgk8cNNJdNUrkm4cbaOoazI9V1iscT9PZNHZ97Bfa4pA8Py8 U+t/B3XFTtRy
J2GiNlt30n37m1YcrTWjxfQ2Zdv7b3FvFAqd+oNQCajrw0NC3pZ6nm6sIYPX QCD+mFbhPDCu
KHfqpV5gKybrjfBWG/y4CLgwZWiJFw9SID4iaUE7Wfb7ThV/WBszdRk8UW/k 1nTP5RveJ7QP
RcOFdTjN0Zi8opfDlSpNPguB1oZH0rPDG9jK65ouwKL6x/Vebj3xY0beqoxt K+Mjd7Tb+lIc
Q/LJ0UPzhf659AdD5x+XS27cDjylFsGoH7B4Gwz1zAj8ukxOszXz1cQgL/Ji Nq0IIe7TEHmJ
6e/lD1BLBwjJDKwAoAIAAHAGAABQSwMEFAAIAAgAY3Z0OQAAAAAAAAAAAAAA ACoAEAB0cmFu
c2Zvcm0tcGx1Z2luL3RlbXBsYXRlcy9MYW5ndWFnZS5hai5qZXRVWAwAcWsl SUprJUn2AfYB
tVVtb9owEP5MfsXVWktgkHyngDqtqrSpLZVgm6YxVSY5glsntmzTUVX97zsn oaWDbmjaIgTi
7p7H9/L40j/sdqHbPRwG/UOI4wwLNNyJIgO3QEiUMWi1KlJv4VZj4kAUwJWO VrlsBGNnSo/S
g0QVDlcuytB95kbwmcSQkYPiWCtyqgoNW8eBj/YMhEi4C1m/Ji54joMpo+ja s5MykdzaK57c
8gwvCfGCvHUMW/RRRW+jfYjPhNyP9foPbEpv0UQGteQJhs1vzU4TmhuG7y8N 76QMGbCO78Wm
qexQaf6blDQ3/zmnYH2u3SGCzotcz3mRLWmEUxYPp0VVUKnCE8czKWagDc7F asDmDEQ6YMpk
ESZSaIvRDbporkzO3YRnlgHh4niyEJYEmyLQb61jBL50iuJEwqW878DpCC5H E7gYnX44+3oQ
6EpG0E961CmwKEkoA/ZmS2MQD9cyOg4CkWtl3H6oNsXr5UyKZH1/dsKedEeY 618jai3t8KxH
6lHrjj4EAdATt4MGtOH9ApNbC2IOHHJ0C5UCgQjj0Fig1iQLtOTLxB0WYDDD lS6BXxBokoZT
xnOjcvh0cQ7UxHIvVERNu0nldWA9Mm74J2jMkGaEIaUsXDWMjYJi9aPA9GoN j0+Ksow7bgZe
pwxSlCL3QNIWsOFodrOrd2VoPOzHT4cMWz3www7buxtddzJ6tcdhFLVaVAc9 R0fATWb/UQn7
5P5QHdz3W5n2rO91NRKYka4sFVBOy9BsbMI1ptXubjRovuHBa+qgcjdufD1z 2rvz3vNFprzl
ki7ydMqgtuZYOG8g01byVVbMp7/JMqSLTDWURYzvrcM8QmMiTUc7WYRsrVHI hS3zANLIs4pK
EaW7plzXwWjHVOxxvIvfe24UdU7Tl+sBe+toLXykP1feMHZ+FdDI3B48UtGm Eqr4DYvfr2O1
NAme18H+ZVEzTxYGeRqly1wTIrkNS89jQJ/Hn1BLBwifWU712gIAAHcHAABQ SwMEFAAIAAgA
Y3Z0OQAAAAAAAAAAAAAAAC4AEAB0cmFuc2Zvcm0tcGx1Z2luL3RlbXBsYXRl cy9MYW5ndWFn
ZVByb3AuYWouamV0VVgMAHFrJUlKayVJ9gH2AZ1UYU/bMBD9nPyKwxo07drk e2mrTUNImxhF
ajVpWifkuNfU4MSW7UAR4r/vnLZQoAK0qErU8927u/fuPDjs9aDXOxzFg0PI sgIrtNzLqgC/
RBDaWnRGV/Ng4c6g8CAr4Nqkq1JF8cTb5kSbodCVx5VPC/S/uJU8V5gwOiA/ 1k69Xrsm7eM4
eAcEihDcJ2ywAa54icMZI+/NyV5IobhzF1xc8wLPKeIZePsYXsGna3iXfgT4 VKqPoV6+g2as
Nq+AUotGcYFJ60+r24LWjuHvc8NXpRIGrBvY2DU1HDVmInKb2O2hvPus2DNe FTURNmPZaFax
pqNG8y+eF0rmYCwu5GrIFgzkfMi0LVIUShqH6RX6dKFtyf2UF44BxWXZdCkd jcccgb6bqUHg
tdfkJwVX6q4LJ2M4H0/h5/jk++nvg9isRYOB6BNV4FCRLEP26ZWikI22oh3H sSyNtv5jUR3y
N3WupNhO696wR5Up5vKlx6NydLbl7T6Oo6wTR9CBb0sU1w7kAjgtgidl89o3 NJAMQN2LZbMS
UMgbrMBigSsTIrMoiuIoR+ISk3F+Farjtmj34UAslL5N+PxGCsQVitpLXdHc wdFRQE06+9vY
VJm+0UEDQVlcElLBfRxFg7DytMRhwdfVQU40OkJcoiNnBHSCG5yvL4Yool6T A4rfneSmUXS0
vYv+04DCDVc1DehsxmBjLbHywUCm0ctC1+mpzEG2izKiAQ2VRpM757FM0drU UF6vqoRtJYFS
uqYIuF0Sz0RTc209KfK/lDHaLMqdZfuyAz1Xmtgz9PJ9YJ89bcIP+nMRDBMf pv+CW/8eiNK0
maTyGxDhQpno2go82ziHqyjATpcW+Tyd16Uhd3GdNOaHmH4P/wBQSwcI3zJC VpICAADSBQAA
UEsDBBQACAAIAGN2dDkAAAAAAAAAAAAAAAAjABAAdHJhbnNmb3JtLXBsdWdp bi90ZW1wbGF0
ZXMvbWFpbi5qZXRVWAwAcWslSUprJUn2AfYB7VlbT+M4FH5uf4UVgXiikfZx RBGIZaRKA4tG
M7MrrRAyyWlrcOyM7UC7q/nve3yJm97SAl0YoekD9HLu5/uOT5Kj/RNDR5zd klLBkE36yaNO
CMv7iVSjHmSclRp6d2B6j1Ld65Jm8IWOUGT/uNs92j88JBeUCQLCqCkpJROG DKUiVcF/o3fk
8NCJPeoPQ8lzUKSkZtxP/t1bNK5Ay0pl0CuVvIPM9AQt4EeqVZYm1kL2QYP5 RhWjtxyIBo4y
/eTgICEPVPUTKstJwZO0jilTQA0QKgjVJYq6mOABMEZalpxl1DApiBwSMwYy KIrKOMPovQRl
pjZw65QZUNZQ7TD962KQRvH05JZquDnjVOsQSGbfD/LkmHQJvtbEnaZYx3s6 gvycQ4G1+/sE
K74XlK+btmxO1lKbuQMnedBUQ5la06YhMl7lQAwUJcd8+kn9Tqdo0CVw5SOy 3Yiay31zxj+6
7y5th5KGJOOrPcR69eidM+9U4mveNBpxhm+aWglJj2MN0hjVcfcojT1Cgc3N dz6w59SQMdVW
hOmBYIZRzv6BnBRgxjInK1u/1DP5KCD/o7RiCKb0xEK2fzBn8ICgayd3aoxi t5WB1XLY82ZV
Gv0PSHpW/51i580BcCnNZcV5I9+IhE6nDQMrFR0YMKs2j3PF3dLZoo730wq5 ADjmx4gHV6VB
+6nSwJVGBZBmWgJOlvWDZabRPlo6O5krLwDWOwXV5lG2ytvGSTbvydJyA6xc Xxy0zsaQ3TMx
8oeqYN8r0AIQZgq+VwxPTVJIBcSezT3yJxABiDYjCRPaUIFu7SAkGi1gRpkU Bg9rLLyLsGsU
9cYtXGHCtLEfvBcCHkHan+HrIPvVCQeAeM3T2QFbY5XL0fGVkhkGbj0sHMHB YYMjqDICEz3t
LRlOEddYSFs0a3sjHIMBQflUMx3Q6Krsy7z5mAzEsh2dA3O7lqtzQ8fV8kkk aJ9zvvyrz9UW
REa1uYMVU8FBBtpWnGk/eny02wRxVoOrd0cf6Hw8rXxcpW7jChyxUa2aw97y q0+v1d3LxhZi
mqVMDFNeFUzIyhav4yqXyXJq8yW4zjbdnGqNyybC+RuT9pv8fJJBab8IRUB5 WxeYYDZIVqFx
ChS4KXTsixiqkCX9ZJMZl/D6rWl+b3L83G5t/kTFqMLyzLZmgj+isqx3orYt utYOJ90VVYgG
FAztKqmyZ93ao27PCaS9XpDnwVzilwObD5YNB5ypB5yCEUxKt9mvNcpjUF46 GA8fXCGt5SET
eW2WDoeoi1O3rDNodZGmbh2M6foT2iVzPUu9Bum6zP0SOZO3TFodXpj59mNs S3sNrPlYVlm2
hiLLuUhkuVUgflFqDQINxxh2sK80Fd92balh/6RrIbxeLut3ods/bhqWtro+ 2hnLLcnJ14tP
5Gqbq+VFngedGrv4cQPPncTPRHRaX8ptQ/R43ReI7rK5bmTfTnW1wDD7xa44 5oy/b5ZZtD2R
aXWFX41g4Xpkjl9xVOtWbgXVQK14KyJO48Cs3RxZ0bxHchPHP9Mp8R7gG/r6 GUylxDNPikUb
rw1huoCu7TC8fg38tXf92rteTqnY/5fvXyss/p8cw70Ev2IG1xt7L8n/ttXz ilozUOzzTD9u
PZRvYtnZRuysuPmYcYb/f4cSRA4im/b3vKulJxxvBS6vvpg0Q02XAeY9wL9q SLNNyx6r5Rrl
9TMmpJyeWCbaPTVkEjUGeRvX19zTbWhfLxoM2bUWNQrv8P7ILvlag3ZQ98JV 9EmsjW3USNuY
7+z32gWfPoe6Wz9dPJOFPaK2frw4k3/N54vPHvE7YeBuMDOr3JNwMqe27aPG jocCxeuLScGJ
jannb5V3lrK5OP9yeji4/JjUP65LIFhzoZOlBwvh15YIGx+6/wFQSwcIWglb socFAADZHwAA
UEsDBBQACAAIAGN2dDkAAAAAAAAAAAAAAAA0ABAAdHJhbnNmb3JtLXBsdWdp bi90ZW1wbGF0
ZXMvTm90TnVsbEluaXRpYWxpemVkLmFqLmpldFVYDABxayVJSmslSfYB9gGN VGtP2zAU/Zz8
iksEKOlo/L1tKiYQUqfRIhVNm8aEXOe2NaR2ZLu0DPjvs530wcgY+ZLkPs49 5/jRO2q3od0+
6oe9IyBkhgIVNVzMwMwRmFQKdSlF7iJUl8gMcAFUlul6UQTh2CifkWXGpDC4 NukMzTeqOJ0U
GEc2YeuiJDWyKo2TbuiqHYLtYNTEUa8GFnSB2U1kq+tMIyQrqNZXlN3TGQ5t xyvwpAtv4NMK
XqcfAb7gRTPqpkU3yDvZH3c7lGa4LIqB4IbTgv/G/CYi/RsReRzrNCHXc66t uTmCfdeeI9Cl
kQtrPqNF8XgC5yMYjq7hcnQ+uPhxEJaVZOixjqUNGgsrKosO3/gBpL+R3A1D viilMh/ratn6
cjkpONusdWPb1iPb06D2KQyDUnJh2NJtFm4u0cxlruOkA05a3IJW6uJxmiZJ CPYJ7BxuKhc2
s8j3ywHZwSpyOqEab0el36BSRPBAVRbJcpBH/TBogqjoErkSmG/7fp7yPDt0 bb+2EB7g+XlH
72/dsiSnopbsaffIdlx//7u7L15IMXit31BlceNGW72lpJ+A5XJ8DAdsWshV /MrABHaJimsq
cOUJ7do2GuyEM4fr03V2m2ztR2tEbdzm4xvLvVvvU7WH2a8faYUBtOBsjuxe A58CFSAnd/62
0OD2B6zmKGr5rpYE7gmDCU6lwnhUFZukU3Oh+QNniGu0PjoalfQ3jrpg7anx P3Z2bLJM2JHJ
k1U3ftQGFykqlZb2MJtCxNFnxlBrf29V3GqqcgrmsfzHCaslR1Zy4CWTJmiX ubPLD34PdCD6
ZOxR/2J/rlxg7B2+osr8H6aQzK/AOyBuicdyqRh+rYvdXVUBX88V0jzNl4vS NrB7d/EGL+HL
H1BLBwj2i4AakwIAAPEFAABQSwMEFAAIAAgAY3Z0OQAAAAAAAAAAAAAAAC8A EAB0cmFuc2Zv
cm0tcGx1Z2luL3RlbXBsYXRlcy9Ob3ROdWxsUmV0dXJuLmFqLmpldFVYDABx ayVJSmslSfYB
9gGNVG1r20AM/mz/CtWszTlL7O95g7FS2NiSsITBWEa5nJXkmrPPnM9tSul/ n852SrOkXYyx
sfToke6R5MFltwvd7uXIH1xCHK8xQ8OtzNZgNwhCG4NFrrPEWXiRo7AgM+A6 j3ap8vyZNZVH
50OhM4s7G63R/uRG8qVCFpCDcEEYWV1DWdj3HdoxUITglgWDhjjjKQ4XAaEb z0lKoXhRTLnY
8jWOKeKAPOzDEX1U0xfROcQ3Up1iPSK9/Q+Zzo9YIoO54gJZ63er04LWK8Of Q8MnpVgAQcdJ
8dpUCVSZ3Tn3eYsTgncOah1rOy6V+oG2NNkiiEeLrKagtsfxfCML6nSCQO9m ABB4aXVKkyC4
Uo8duJ7AeDKH75PrLze/Lvy81h8GokfHhgIVKTwMPhw1B+LRXv++78s018ae F9UmfF4ulRSQ
G3lPfVljsp/BkwwvvaPw238RTUPIc6DGk+8DXXHb96ANnzcotgXIFXBI0W50 AqaCFeBCHCb2
3OV7fGXRsLDxuwZPlneuNOPaocIeXIiV0g+MJ/dSIO5QlFbqjKYJrq7Aycra 0I7erJNFUQ21
3BCCnTxygw2ffM+TK1bnHg4zKrayebPHwmIaoTERqZhZlbHAHQX0S7VUPgnr CnKr/F6at4sN
aEU8r1IyPpXSee40/TlyetgeBB8tTd1X+pg6w8y6SZtyY8/gUZqmmpR8h8Xt 4kyXRuC3Blwt
cc083xjkSZSUaU4RYssqz7NP9/NfUEsHCGGAC98vAgAADwUAAFBLAwQUAAgA CABjdnQ5AAAA
AAAAAAAAAAAALgAQAHRyYW5zZm9ybS1wbHVnaW4vdGVtcGxhdGVzL3NldENs YXNzUGFja2Fn
ZS5qZXRVWAwAcWslSUprJUn2AfYBzVRNS8QwED03vyIOlqTSj3u3XVYEjyII XkQkxrgWs21J
sqLgjzfd7mZTt1X35i2ZvHnz8maSIkwSnCThHBUhujGqqpfYvFT6QjKtr9hK lLypjXg36VKY
W6Yq9igFBd4d2y1EqWn6NBrN0A6rfayjg3iMa1AtsiRbFZsSdacAwAVbxl/Z Uriw1Y0KnldG
KGYE1kIKbkrQjTL01DFniy4Bf2IvxGoutGlUnp/dLcxHK0qyXsl8c0ju+4yY 8GZdG+phIxIB
fmOqhBbmKChCjIKdtnGr2oFHqRKtZFycS0mhv0YM4MKUpCQmmAxxGGJsQTMU VM+YOmNOrAUR
CoK9U26VWimcGQrpJu0HRNudd+3P9jb+zdQJB6/7Fv1vD7052rnoj5a3/ubk L6gpN0McjD6O
wfC7Ut0Gotj1qntZIx3074vJA5l4gOM1LispRuocwbBt9JbEM8PSTNk0lJwd KbmRT0Id1nOA
jOnWjqoG+41g+zd8AVBLBwib2cIqcgEAAN0EAABQSwMEFAAIAAgAY3Z0OQAA AAAAAAAAAAAA
ACgAEAB0cmFuc2Zvcm0tcGx1Z2luL3RlbXBsYXRlcy9VbmlxdWUuYWouamV0 VVgMAHFrJUlK
ayVJ9gH2Ac1YbU/bSBD+HP+Kwbq2DgSH+wpJJETbu6oCqoNyOikS2tiTxFdn 191dc0Qt//1m
/RK/xAS7AolPIO+8PvPM7GxGbw4P4fDwzcQavYHhcIEcJdMBX4BeInhCSlSR 4L75wlSEnoaA
AxORe78Ke9aVlsmJiMae4BrvtbtAfcNkwGYhOjYdkJzdd7VIRZ3+iWWkjQXS 8Jh27FFmmLMV
jqc2SWcnjSa9kCn1hXnf2AIvSKNivH8CW+bd1Lxy2xj+GITNVnMV1ZDeoOzu 9isPvsc4tYeT
KbcTXULX6o2842AOGpUe256IuXZ+ixPJL1JEKPW6DxM4sidWz4iGYjFJDXFU CnKZY6AzihoU
hpTT2K7ZIKejYapNHofG5aSV63EL1z7OWRzqbQfWcHi9DBTRxUegvxmLEFis xYro5LEwXA/g
/SVcXF7D+eX7Tx//2bOitIhbKW1VGIaTvIgnlhWsIiE1eEuXklCBG/C5G8ar gItYuadKUbCB
4DeBCCkE/8O9h5H5cJIrdnHnNgpvSEKSWbnPiB4soLS7udmnfKJ4FgZe3l1t HYIpCpMk61BH
Ks24h2cSmUnVaTSSG+jDz590pL9WKPCUTh9+EIkjGdyZws6ECJFxMLjfVrl0 RUbGMGehwpNC
4XL2r8muKkpyPA5DEiNBEXDtxbpjMnBLfafiFcr+MY2sQDnFB3j7FvAeyagx 04xsbufA5fif
47qUKIVD8bC5RtnaNxxvx10cJ+D1eorN8dT3Uygqx8bliCZx20ZNBnav2tdM 0pBmYUClrCkN
4N3RO6OpZYz2xGTXe7RwRiYJJx8eD6Y6LYObFMG1j+3381Jw5HnHDDK0BS26 DMESs7Y5v5sT
5QoRudJmq9CLojWjzYH9p9hFvp8MekM/qzfDuZDYKb6G7OoEpII4j7UsSYAB f6tDN0bMbfl0
DgmXHzLapE30EllE2fGfTJ0tGV+g70CdWV0jh37m4enu6MWRT2NtM/V3OIcK Ipu26tIhR7UG
eY4OAUctRRz6MMP8Yu8XXfNaemb/tffEkqnlGa09r5P3RXQvze0qtetrQlPU jRvBIP9Mt3H+
7YaFtO6UMKiXI90izG2/pbWXnfWTOkrUseSbRJuMFQo/Shp7NTEXv8e04DgN YWaA5Jr5HvRQ
huVOBD5soZxlLkL/MxIQu8mTame7RBZtbRN1Ja7EHX4IcYV0Wed2K5pJuLW9 pGa6Mfiayu5Y
CaRyDemVKdkseV9iGtsA/HgVQWCWP5pd5oR2KXo2gJcnMwB6XHnLVCtf6ZNN Rst1YrbDI2cL
qdHOBCbM93MUN8mUemtQyrCyOnV58z1LTO3uucfjfchQdh5/RhXo5z3SBfir tdK4ckWsXeIT
1yGtyfaU/33618Wniz+OwYaDwoFJ55wuN3ow0QA7AJsuFLlOfpsQQPnDN1zD 1DY6DVUxClMb
6M4AvY4wMV1B6szgmclxO4WiaxXIuoc+dUIrYpSQ7kSNl4et5YL0S5A+B6a/ RuziBwr6v8An
gfBK01P8WjIvv7rBzLkH639QSwcIfpujangEAAAREwAAUEsDBBQACAAIAGN2 dDkAAAAAAAAA
AAAAAAAtABAAdHJhbnNmb3JtLXBsdWdpbi90ZW1wbGF0ZXMvdW5pcXVlQW5h bHlzaXMuamV0
VVgMAHFrJUlKayVJ9gH2AaVW207jMBB9Jl8xqooCq+1mea1o1S67rCohQOLy ghByk2nrJXGy
sQPi7xnbuTglLe1u1Qc3nTlzfOZ4HO/0cDCA36hArRAESxDShVlneZphrt7o B1OQsGeUgDEm
KJSEQvC/BcJgcDj2TsOhRHXPcs7mMYKkoFCNen0bM82ymIdM8VQEkzvzSKCU 1yV6D15YPurZ
2PphMPY8zzA757lUEKHCPOEC4XWFRC4HTiQYhDGTEtIcmABapSE3hYA1Rffm OGcSn840cMnN
AXsyBWeRJkiQnJRCSThhWgh11O+IPIYxfO+NvQOzG66AN7wNs4MN1D6DtNy4 tEyJD9BnA1YQ
ZCx8ZkuMftkGPkx4NOrCfixxwzXUOF2Ob6gHmKq3DK2+GIFK4exienOjQ5bk oVpXkx9MtJ8I
5TSwCAZtG1Hf5PkuCYpxeHARxkWEJHuSxUzhqFetZECARoxru9dvf1CZPgW6 UWSofT0wbQzV
4QTHbjv5oRVfucI1RdvB+3qjA75yiLuP//ZJq07lFtZZYbNnyDFXZ7Pp7ezq 8oNzHKxt/tHC
vaKWrKCRZUaUHlomG1bM6Jm+CtqJiCDHBdEQIRfLJqoUmgYJxgur9xZpWrwq 4IeJ83QHnaq8
f2tDlR1MtJ7rmLf07BNcWcylykmEAVtQX47aWieYzDHXuzp5/Ao++MdlhfqP qaLseaE+qxNY
gepwS/8jjLMFIrUren8tnMSi3qrh8EsLbn0uav/s4jV9Fg19mL+Vc3o9zSnQ pKlVnhbLFbCK
14a0hnedysii2rK1X/UNrI9MB0Ld6w2Ho7xozjnBMMhSRdJwFkOYCsXoAs1b 5l/Q1akPRH2v
12OHk0Foqm7zpKY48oskHjoTxu+aCQR5QN9N4+yDMkVGrwH3LC6wej3QD37Q 1DNHRyOZwbnQ
I2DFXuhEw8mga4CamvVY7jc4gUP/wmw2vhMxT2gZXTJV0G9fv1hsT5kJhUvM fdPCVuiLZj8+
MVs3JEyL9PonvcuEVMVpyR420x3byRa2btAUru5Bu7DtdW5H7x1QSwcIovtZ WQoDAAAKCgAA
UEsDBBQACAAIAGN2dDkAAAAAAAAAAAAAAAAzABAAdHJhbnNmb3JtLXBsdWdp bi90ZW1wbGF0
ZXMvVW5pcXVlQ29udGFpbmVyLmphdmEuamV0VVgMAHFrJUlKayVJ9gH2AbVW bW/bNhD+LP2K
q7AAEurQ3xPHWJGmW1G02RqvxYAABSOdbTYUqfLFiTfkv+9EvdiO5c4fWhiw E/LuuXueOx45
OTk9hdPTk2k8OYHxeIEKDXdCLcAtEXJtDNpKq6Je4bbC3IFQwHXFHksZxTfO hB1dXeRaOXx0
bIHuEzeC30lME9oguyRjTjemaXYe19Y1Annk3KXJpAVWvMSL24Ss251ByFxy a//g+T1f4Afy
2AHPzmEPnjXwlh0D/EbIYdTOxQ7QG22H+/KXEt88XpI9F6TmbTKe3qokgJDM 4/FsKSwpWyDQ
bys4AvdOl6R8zqVcj+D1NXy4nsH769dv3/z9Iq4avjDJzyhnsCiJ0UXyy54Y MJ52fM/jWJSV
Ng6+8hVnkqsFMzhnH3GOBlWOf3r0eD5s9Bn5fW+4a+OdkOx3bpfveTWwc3CV XSln1pus8iXz
SljBhJoz6UuhtLfslbVonNDqk9CShCmuHnOs6gXyrPydFDkE1sNa9PUjIZ5X 4t84qoxY1Wpb
V0sNlNXk+u4r+Y+g+Z1SZZT1JRoLF6DwAVqmz+3qRn4Ot6vspEM03XIHOWwX EAmz4dhCTmZT
WGlRAC+KK4klKpfCDLD5M6NTavSDhcOqAbGODJZ6hb9dNpFsiBSJOaQbtnX/ 1jLZd7hOO3y2
JPKX1KppBvQhpygEDCwOx0wh6Tdh1e6egQ/lSCBEr7zr+exHG3VrwfgpPkqW hh3cI52fny8R
hfmZmgQWR4ow1ybH4lVRbLUG5XaQ1g/SfhN2UPljMxhk+uuNryq6e+xnbhQN YZsmXuVLzO+x
SLKhlGbQRNo/JX0izhsF6SzbVLRxGe73H5fJ9+U5nFVosa4Gu6OmL8K2kt+L Y9eUtNFK/INF
2odq9qJNaIJrK1K3884tQCF7oUbbQ63RirI8Tq8DRPb6JKR2s7YOS7bIm755 WNJ8pzO5ic4q
LSUZv6DR6qWs2T7RQ+ZBVBieMN/qEft//Lfm++YaqNY0rtOB0Z+laXspbGpG TwupFTZZRnQy
KMlw3+3dL1ivwlkIwMI/N+jojdFk0oycNH2ufJYG0+bFIj0FyjIm7JUK/Iow nxuAaKC7O9d6
cLXVinpttXeMiqKcrIfUx+BTQAIvD/g9xe1XKHgUP8X/AVBLBwgD/RPjVwMA AEUKAABQSwEC
FQMKAAAAAABjdnQ5AAAAAAAAAAAAAAAAEQAMAAAAAAAAAABA7UEAAAAAdHJh bnNmb3JtLXBs
dWdpbi9VWAgAQGslSUprJUlQSwECFQMUAAgACABjdnQ5pQ6JJqwAAABaAQAA GwAMAAAAAAAA
AABApIE/AAAAdHJhbnNmb3JtLXBsdWdpbi8uY2xhc3NwYXRoVVgIAHFrJUlK ayVJUEsBAhUD
FAAIAAgAY3Z0OUdtUbRlAAAAoAAAAB8ADAAAAAAAAAAAQKSBRAEAAHRyYW5z Zm9ybS1wbHVn
aW4vLmpldHByb3BlcnRpZXNVWAgAcWslSUprJUlQSwECFQMUAAgACABjdnQ5 IM+DpOwAAACt
AgAAGQAMAAAAAAAAAABApIEGAgAAdHJhbnNmb3JtLXBsdWdpbi8ucHJvamVj dFVYCABxayVJ
SmslSVBLAQIVAxQACAAIAGN2dDnjNvkXVAAAAIAAAAAhAAwAAAAAAAAAAECk gUkDAAB0cmFu
c2Zvcm0tcGx1Z2luL2J1aWxkLnByb3BlcnRpZXNVWAgAcWslSUprJUlQSwEC FQMUAAgACABj
dnQ5j2AH1uQAAABBAQAAGwAMAAAAAAAAAABApIH8AwAAdHJhbnNmb3JtLXBs dWdpbi9leHBv
cnQueG1sVVgIAHFrJUlKayVJUEsBAhUDCgAAAAAAY3Z0OQAAAAAAAAAAAAAA ABoADAAAAAAA
AAAAQO1BOQUAAHRyYW5zZm9ybS1wbHVnaW4vTUVUQS1JTkYvVVgIAEprJUlK ayVJUEsBAhUD
FAAIAAgAY3Z0OXmnmN7AAAAAVAEAACUADAAAAAAAAAAAQKSBgQUAAHRyYW5z Zm9ybS1wbHVn
aW4vTUVUQS1JTkYvTUFOSUZFU1QuTUZVWAgAcWslSUprJUlQSwECFQMUAAgA CABjdnQ5DME7
604AAABiAAAAIgAMAAAAAAAAAABApIGkBgAAdHJhbnNmb3JtLXBsdWdpbi9w bHVnaW4ucHJv
cGVydGllc1VYCABxayVJSmslSVBLAQIVAxQACAAIAGN2dDkefEmeRQEAAG0D AAAbAAwAAAAA
AAAAAECkgVIHAAB0cmFuc2Zvcm0tcGx1Z2luL3BsdWdpbi54bWxVWAgAcWsl SUprJUlQSwEC
FQMKAAAAAABjdnQ5AAAAAAAAAAAAAAAAGwAMAAAAAAAAAABA7UHwCAAAdHJh bnNmb3JtLXBs
dWdpbi90ZW1wbGF0ZXMvVVgIAEprJUlKayVJUEsBAhUDFAAIAAgAY3Z0OX68 SmGWAAAABgEA
ACYADAAAAAAAAAAAQKSBOQkAAHRyYW5zZm9ybS1wbHVnaW4vdGVtcGxhdGVz L2FvcC54bWwu
amV0VVgIAHFrJUlKayVJUEsBAhUDFAAIAAgAY3Z0OR1/p8ZHAgAAhgUAADoA DAAAAAAAAAAA
QKSBMwoAAHRyYW5zZm9ybS1wbHVnaW4vdGVtcGxhdGVzL0Fzc2VydGlvblZp b2xhdGVkRXhj
ZXB0aW9uLmphdmFVWAgAcWslSUprJUlQSwECFQMUAAgACABjdnQ5Zl3MxzgC AAA+BgAALAAM
AAAAAAAAAABApIHyDAAAdHJhbnNmb3JtLXBsdWdpbi90ZW1wbGF0ZXMvQ29t cGFyYWJsZS5h
ai5qZXRVWAgAcWslSUprJUlQSwECFQMUAAgACABjdnQ5X38QSJACAAA+BgAA OAAMAAAAAAAA
AABApIGUDwAAdHJhbnNmb3JtLXBsdWdpbi90ZW1wbGF0ZXMvZXhwbGljaXRJ bXBsZW1lbnRh
dGlvbi5hai5qZXRVWAgAcWslSUprJUlQSwECFQMUAAgACABjdnQ5JQEn9PsB AABMBAAAKwAM
AAAAAAAAAABApIGaEgAAdHJhbnNmb3JtLXBsdWdpbi90ZW1wbGF0ZXMvSW1t dXRhYmxlLmFq
LmpldFVYCABxayVJSmslSVBLAQIVAxQACAAIAGN2dDnBS+KeCgMAAL0HAAAt AAwAAAAAAAAA
AECkgf4UAAB0cmFuc2Zvcm0tcGx1Z2luL3RlbXBsYXRlcy9Jbml0aWFsaXpl ZC5hai5qZXRV
WAgAcWslSUprJUlQSwECFQMUAAgACABjdnQ5yQysAKACAABwBgAALwAMAAAA AAAAAABApIFz
GAAAdHJhbnNmb3JtLXBsdWdpbi90ZW1wbGF0ZXMvaXNJbml0aWFsaXplZC5h ai5qZXRVWAgA
cWslSUprJUlQSwECFQMUAAgACABjdnQ5n1lO9doCAAB3BwAAKgAMAAAAAAAA AABApIGAGwAA
dHJhbnNmb3JtLXBsdWdpbi90ZW1wbGF0ZXMvTGFuZ3VhZ2UuYWouamV0VVgI AHFrJUlKayVJ
UEsBAhUDFAAIAAgAY3Z0Od8yQlaSAgAA0gUAAC4ADAAAAAAAAAAAQKSBwh4A AHRyYW5zZm9y
bS1wbHVnaW4vdGVtcGxhdGVzL0xhbmd1YWdlUHJvcC5hai5qZXRVWAgAcWsl SUprJUlQSwEC
FQMUAAgACABjdnQ5WglbsocFAADZHwAAIwAMAAAAAAAAAABApIHAIQAAdHJh bnNmb3JtLXBs
dWdpbi90ZW1wbGF0ZXMvbWFpbi5qZXRVWAgAcWslSUprJUlQSwECFQMUAAgA CABjdnQ59ouA
GpMCAADxBQAANAAMAAAAAAAAAABApIGoJwAAdHJhbnNmb3JtLXBsdWdpbi90 ZW1wbGF0ZXMv
Tm90TnVsbEluaXRpYWxpemVkLmFqLmpldFVYCABxayVJSmslSVBLAQIVAxQA CAAIAGN2dDlh
gAvfLwIAAA8FAAAvAAwAAAAAAAAAAECkga0qAAB0cmFuc2Zvcm0tcGx1Z2lu L3RlbXBsYXRl
cy9Ob3ROdWxsUmV0dXJuLmFqLmpldFVYCABxayVJSmslSVBLAQIVAxQACAAI AGN2dDmb2cIq
cgEAAN0EAAAuAAwAAAAAAAAAAECkgUktAAB0cmFuc2Zvcm0tcGx1Z2luL3Rl bXBsYXRlcy9z
ZXRDbGFzc1BhY2thZ2UuamV0VVgIAHFrJUlKayVJUEsBAhUDFAAIAAgAY3Z0 OX6bo2p4BAAA
ERMAACgADAAAAAAAAAAAQKSBJy8AAHRyYW5zZm9ybS1wbHVnaW4vdGVtcGxh dGVzL1VuaXF1
ZS5hai5qZXRVWAgAcWslSUprJUlQSwECFQMUAAgACABjdnQ5ovtZWQoDAAAK CgAALQAMAAAA
AAAAAABApIEFNAAAdHJhbnNmb3JtLXBsdWdpbi90ZW1wbGF0ZXMvdW5pcXVl QW5hbHlzaXMu
amV0VVgIAHFrJUlKayVJUEsBAhUDFAAIAAgAY3Z0OQP9E+NXAwAARQoAADMA DAAAAAAAAAAA
QKSBejcAAHRyYW5zZm9ybS1wbHVnaW4vdGVtcGxhdGVzL1VuaXF1ZUNvbnRh aW5lci5qYXZh
LmpldFVYCABxayVJSmslSVBLBQYAAAAAGwAbADQKAABCOwAAAAA=
--------------030705080905040105020305--
Re: Possible XPath/transformation bug when dealing with optional attributes [message #53332 is a reply to message #53276] Fri, 21 November 2008 15:32 Go to previous messageGo to next message
Paul Elder is currently offline Paul Elder
Messages: 849
Registered: July 2009
Senior Member
Jochen:

Well, I spent a half my day chasing this down - convinced that there was
something subtly wrong with the XPath engine, but in the end, it's really
simple.

Line 40 of your Unique.aj.jet template has this test:

<c:if test="cardinality($uniqueProperty, '1M') = true">

But, it should be:

<c:if test="cardinality($uniqueProperty, '1M') = true()">

Note the () after true. As originally written, the test is comparing a
boolean value with the xpath expression 'true', or in expanded form
child::true. Since JET evaluates all XPath expresions relative to the
document, this is /child::true, which, unless I'm greatly mistaken, will
always match nothing. The definition of comparing a boolean() to a node set
is to call boolean() on the node set. Since /child::true will always be
empty, boolean(/child::true) will always be false().

So, your test is doing the exact opposite of what you intended.

Paul

P.S. All was not for nothing. I did find out that the stereotype() function
I posted in late Semptember had some serious errors. And, I suspect there is
a problem related to the XML DOM (modelLoader org.eclipse.jet.xml) when it
comes to resolving expressions such as /XMI/Unique/@id.
Re: Possible XPath/transformation bug when dealing with optional attributes [message #53349 is a reply to message #53332] Sat, 22 November 2008 06:05 Go to previous messageGo to next message
Jochen Wuttke is currently offline Jochen Wuttke
Messages: 41
Registered: July 2009
Member
Paul, sorry that you wasted your time like that. This may be a minor bug
in the template, but unfortunately it doesn't solve the problem.
The true problem is that following:
The "if" statements in lines 39 and 60 should be mutually exclusive, right?
Now, when I execute the transformation for the first time and the
template is called for the class DefaultUniquePropertyTest, the correct
if get's executed. When I execute the transformation for the second
time, the wrong if statement gets executed.
This behavior alternates with every execution of the transformation, and
I can't figure out why.

If you want to waste another half afternoon tracking this, the easiest
way to check if you get the same behavior in your installation, check
the generated aspect
javax.faces.webapp.aspects.DefaultUniquePropertyTest_Unique, line 29
should alternate with each execution between:

uniqueProperty = _consumer.getId();

and
uniqueProperty = _consumer.hashCode();

If this does not happen for you, then I'm in trouble ;-)

In any case, thanks a lot for the time you already spent on this.

Jochen


Paul Elder wrote:
> Jochen:
>
> Well, I spent a half my day chasing this down - convinced that there was
> something subtly wrong with the XPath engine, but in the end, it's really
> simple.
>
> Line 40 of your Unique.aj.jet template has this test:
>
> <c:if test="cardinality($uniqueProperty, '1M') = true">
>
> But, it should be:
>
> <c:if test="cardinality($uniqueProperty, '1M') = true()">
>
> Note the () after true. As originally written, the test is comparing a
> boolean value with the xpath expression 'true', or in expanded form
> child::true. Since JET evaluates all XPath expresions relative to the
> document, this is /child::true, which, unless I'm greatly mistaken, will
> always match nothing. The definition of comparing a boolean() to a node set
> is to call boolean() on the node set. Since /child::true will always be
> empty, boolean(/child::true) will always be false().
>
> So, your test is doing the exact opposite of what you intended.
>
> Paul
>
> P.S. All was not for nothing. I did find out that the stereotype() function
> I posted in late Semptember had some serious errors. And, I suspect there is
> a problem related to the XML DOM (modelLoader org.eclipse.jet.xml) when it
> comes to resolving expressions such as /XMI/Unique/@id.
>
>
Stop wasting your time [message #53373 is a reply to message #53349] Sat, 22 November 2008 17:02 Go to previous message
Jochen Wuttke is currently offline Jochen Wuttke
Messages: 41
Registered: July 2009
Member
Hi Paul,

we finally found the problem. It's a silly bug attributed to the fact
that all variables are global in JET. Sorry for making you waste so much
time on that.

Jochen
Previous Topic:JET2 and access to UML model
Next Topic:Running the result of a JET transform
Goto Forum:
  


Current Time: Wed Apr 23 19:53:08 EDT 2014

Powered by FUDForum. Page generated in 0.04776 seconds