event handling with swixml

[email protected] Tue, 23 Aug 2005 17:15:59 +0200
Newsgroups gmane.comp.embedded.carlsbad-cubes
Message-ID <[email protected]>
------=_Part_2333_17650554.1124810159268
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Hi,

I know this question (see subj.) was already raised couple of times
but I would like
to discuss it one more time.

First let me say that I agree with the statement that we should not do any=
=20
scripting in xml file. Personally I don't like the idea of
incorporating BeanShell, Groovy
or any other scripting language into gui descriptor file. swixml
should probably remain
purely declarative language.

But still would be nice to ease event handling.

So when I'm talking about adding some feature into framework that
facilitate work
with events I would call this feature 'binding' rather then scripting.
The concept would be in a way similar to the automatic fields mapping
which swixml does now.
Similarly we could have swixml mapping gui events to proper methods in
client's class. For example syntax could look like this:

<textfield id=3D"myText" keyPressed=3D"handleKeyPressed"/>
or=20
<label id=3D"myLabel" mousePressed=3D"handleMousePressed" />

where myText and myLabel are fields while handleKeyPressed and
handleMousePressed are methods in client object.

Actually we've implemented this kind of extension in our project and
it serves quite good
so far. In fact it didn't require a lot of coding so adding it to the
siwxml core won't add much complexity to the project.

I'm sending a patch here. As you can see it has only one extra class
and few lines
added to Parser class.

I'd be happy if swixml's authors could spare some time to consider the patc=
h.
If you need more examples let me know.
Thanks in advance,

Vitali

------=_Part_2333_17650554.1124810159268
Content-Type: application/octet-stream; name=".diff"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=".diff"

ZGlmZiAtTkViYyAtSSAnJElkJyAtSSAnJFJldmlzaW9uJyBzd2l4bWxfMTQ0L3NyYy9vcmcvc3dp
eG1sL0V2ZW50SGFuZGxlci5qYXZhIHN3aXhtbF9leHQvc3JjL29yZy9zd2l4bWwvRXZlbnRIYW5k
bGVyLmphdmENCioqKiBzd2l4bWxfMTQ0L3NyYy9vcmcvc3dpeG1sL0V2ZW50SGFuZGxlci5qYXZh
CVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MA0KLS0tIHN3aXhtbF9leHQvc3JjL29yZy9zd2l4bWwv
RXZlbnRIYW5kbGVyLmphdmEJVHVlIEF1ZyAyMyAxNToxMjozMSAyMDA1DQoqKioqKioqKioqKioq
KioNCioqKiAwICoqKioNCi0tLSAxLDI5MCAtLS0tDQorIHBhY2thZ2Ugb3JnLnN3aXhtbDsNCisg
DQorIGltcG9ydCBqYXZhLmF3dC5ldmVudC5Nb3VzZUV2ZW50Ow0KKyBpbXBvcnQgamF2YS5hd3Qu
ZXZlbnQuTW91c2VNb3Rpb25MaXN0ZW5lcjsNCisgaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lklu
dm9jYXRpb25IYW5kbGVyOw0KKyBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRh
cmdldEV4Y2VwdGlvbjsNCisgaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsNCisgaW1w
b3J0IGphdmEubGFuZy5yZWZsZWN0LlByb3h5Ow0KKyBpbXBvcnQgamF2YS51dGlsLkV2ZW50TGlz
dGVuZXI7DQorIGltcG9ydCBqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsNCisgDQor
IGltcG9ydCBqYXZheC5zd2luZy5KTGlzdDsNCisgaW1wb3J0IGphdmF4LnN3aW5nLmV2ZW50Lkxp
c3RTZWxlY3Rpb25FdmVudDsNCisgaW1wb3J0IGphdmF4LnN3aW5nLmV2ZW50Lkxpc3RTZWxlY3Rp
b25MaXN0ZW5lcjsNCisgDQorIHB1YmxpYyBjbGFzcyBFdmVudEhhbmRsZXIgaW1wbGVtZW50cyBJ
bnZvY2F0aW9uSGFuZGxlciB7DQorIAkJDQorIAlwcml2YXRlIFN0cmluZyBfbGlzdGVuZXJNZXRo
b2ROYW1lOw0KKyAJcHJpdmF0ZSBPYmplY3QgX2NsaWVudDsgLy9pbiBvdGhlciB0ZXJtaW5vbG9n
eSAtIHRhcmdldCBvYmplY3QuIA0KKyAJcHJpdmF0ZSBNZXRob2QgX2hhbmRsZXI7DQorIA0KKyAJ
LyoqDQorIAkgKiBDbGllbnRzIHNob3VsZCB1c2Ugc3RhdGljIGNyZWF0ZSBtZXRob2QuDQorIAkg
KiBAc2VlICNjcmVhdGUNCisgCSAqLw0KKyAJcHJpdmF0ZSBFdmVudEhhbmRsZXIoQ2xhc3MgbGlz
dGVuZXJJbnRlcmZhY2UsIFN0cmluZyBsaXN0ZW5lck1ldGhvZE5hbWUsIE9iamVjdCBjbGllbnQs
IFN0cmluZyBoYW5kbGVyKSB7DQorIAkJX2xpc3RlbmVyTWV0aG9kTmFtZSA9IGxpc3RlbmVyTWV0
aG9kTmFtZTsNCisgCQlfY2xpZW50ID0gY2xpZW50Ow0KKyANCisgCQlDbGFzcyBldmVudENsYXNz
ID0gZ3Vlc3NFdmVudENsYXNzKGxpc3RlbmVySW50ZXJmYWNlLmdldE5hbWUoKSk7DQorIA0KKyAJ
CS8vMS4gdHJ5IGhhbmRsZXIgd2l0aCBldmVudCBvYmplY3QgcGFyYW1ldGVyDQorIAkJQ2xhc3Nb
XSBwYXJhbVR5cGVzID0gbmV3IENsYXNzW10geyBldmVudENsYXNzIH07DQorIAkJX2hhbmRsZXIg
PSBnZXRNZXRob2QoY2xpZW50LmdldENsYXNzKCksIGhhbmRsZXIsIHBhcmFtVHlwZXMpOw0KKyAJ
CQ0KKyAJCWlmIChfaGFuZGxlciA9PSBudWxsKSB7DQorIAkJCS8vMi4gaGFuZGxlciB3aXRoIGV2
ZW50IG9iamVjdCBwYXJhbWV0ZXIgd2FzIG5vdCBmb3VuZC4NCisgCQkJLy8gICB0cnkgaGFuZGxl
ciB3aXRob3V0IHBhcmFtZXRlcnMNCisgCQkJX2hhbmRsZXIgPSBnZXRNZXRob2QoY2xpZW50Lmdl
dENsYXNzKCksIGhhbmRsZXIsIG51bGwpOw0KKyAJCX0NCisgCQkNCisgCQlpZiAoX2hhbmRsZXIg
PT0gbnVsbCkgew0KKyAJCQkvLyBoYW5kbGVyIHdhcyBub3QgZm91bmQNCisgCQkJdGhyb3cgbmV3
IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24oIkNhbiBub3QgZmluZCBoYW5kbGVyIGZvciAiICsgbGlz
dGVuZXJNZXRob2ROYW1lICsgIjogIiArDQorIAkJCQkJY2xpZW50LmdldENsYXNzKCkuZ2V0TmFt
ZSgpICsgIi4iICsgaGFuZGxlcik7DQorIAkJfQ0KKyAJfQ0KKyAJDQorIAkvKioNCisgCSAqIENy
ZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyA8Y29kZT5saXN0ZW5lckludGVyZmFjZTwv
Y29kZT4NCisgCSAqIGluIHdoaWNoIHRoZSBpbXBsZW1lbnRhdGlvbmkgb2YgbWV0aG9kIG5hbWVk
IDxjb2RlPmxpc3RlbmVyTWV0aG9kTmFtZTwvY29kZT4gY2FsbHMgbWV0aG9kIG5hbWVkIDxjb2Rl
PmhhbmRsZXI8L2NvZGU+IG9mIHRoZSA8Y29kZT5jbGllbnQ8L2NvZGU+IG9iamVjdC4NCisgCSAq
IDxjb2RlPmhhbmRsZXI8L2NvZGU+IG1ldGhvZCBtYXkgYWNjZXB0IGV2ZW50IG9iamVjdCB0aGF0
IGNvcnJlc3BvbmRzIHRvIDxjb2RlPmxpc3RlbmVySW50ZXJmYWNlPC9jb2RlPiBhcyBhIHBhcmFt
ZXRlci4gaWYgPGNvZGU+Y2xpZW50PC9jb2RlPiBvYmplY3QncyBjbGFzcw0KKyAJICogZGVmaW5l
cyB0d28gbWV0aG9kcyBuYW1lZCA8Y29kZT5oYW5kbGVyPC9jb2RlPiB3aXRoIGFuZCB3aXRob3V0
IGV2ZW50IG9iamVjdCBwYXJhbWV0ZXIsIHRoZW4gdGhlIG9uZSA8aT53aXRoPC9pPiBwYXJhbWV0
ZXIgaGFzIGEgcHJlY2VkZW5jZS4NCisgCSAqIElmIHRoZSA8Y29kZT5saXN0ZW5lck1ldGhvZE5h
bWU8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+IGFsbCBtZXRob2RzIGluIHRoZSBpbnRlcmZh
Y2UgdHJpZ2dlciB0aGUgPGNvZGU+aGFuZGxlcjwvY29kZT4gbWV0aG9kIA0KKyAJICogdG8gYmUg
ZXhlY3V0ZWQgb24gdGhlIDxjb2RlPmNsaWVudDwvY29kZT4gb2JqZWN0Lg0KKyAJICogPHA+DQor
IAkgKiBTaW1wbGUgZXhhbXBsZSBvZiB1c2Ugd291bGQgYmU6DQorIAkgKiA8cHJlPg0KKyAJICog
CWNsYXNzIE15RnJhbWUgew0KKyAJICogCS4uLg0KKyAJICogCQlsaXN0LmFkZExpc3RTZWxlY3Rp
b25MaXN0ZW5lcigNCisgCSAqIAkJCQkoTGlzdFNlbGVjdGlvbkxpc3RlbmVyKSBFdmVudEhhbmRs
ZXIuY3JlYXRlKExpc3RTZWxlY3Rpb25MaXN0ZW5lci5jbGFzcywgbnVsbCwgdGhpcywgImhhbmRs
ZVZhbHVlQ2hhbmdlZCIpKTsNCisgCSAqIAkuLi4NCisgCSAqIAkJdm9pZCBoYW5kbGVWYWx1ZUNo
YW5nZWQoKSB7IC4uLiB9DQorIAkgKiAJfQ0KKyAJICogPC9wcmU+DQorIAkgKiBDb2RlIG9iYXZl
IGlzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyB0cmFkaXRpb25hbCBjb2RlIHVzaW5nIGFu
b255bW91cyBjbGFzcy4NCisgCSAqIDxwcmU+DQorIAkgKiAJY2xhc3MgTXlGcmFtZSB7DQorIAkg
KiAJLi4uDQorIAkgKiAJCWxpc3QuYWRkTGlzdFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBMaXN0U2Vs
ZWN0aW9uTGlzdGVuZXIoKSB7DQorIAkgKiAJCQlwdWJsaWMgdm9pZCB2YWx1ZUNoYW5nZWQoTGlz
dFNlbGVjdGlvbkV2ZW50IGUpIHsNCisgCSAqIAkJCQloYW5kbGVWYWx1ZUNoYW5nZWQoKTsNCisg
CSAqIAkJCX0NCisgCSAqIAkJfSk7DQorIAkgKiAJLi4uDQorIAkgKiAJCXZvaWQgaGFuZGxlVmFs
dWVDaGFuZ2VkKCkgeyAuLi4gfQ0KKyAJICogCX0NCisgCSAqIDwvcHJlPg0KKyAJICogDQorIAkg
KiBAcGFyYW0gbGlzdGVuZXJJbnRlcmZhY2UgdGhlIGxpc3RlbmVyIGludGVyZmFjZSB0byBjcmVh
dGUgYSBwcm94eSBmb3INCisgCSAqIEBwYXJhbSBsaXN0ZW5lck1ldGhvZE5hbWUgdGhlIG5hbWUg
b2YgdGhlIG1ldGhvZCBpbiB0aGUgbGlzdGVuZXIgaW50ZXJmYWNlIHRoYXQgc2hvdWxkIHRyaWdn
ZXIgdGhlIGhhbmRsZXINCisgCSAqIEBwYXJhbSBjbGllbnQgdGhlIG9iamVjdCB0aGF0IGltcGxl
bWVudHMgaGFuZGxlciBtZXRob2QNCisgCSAqIEBwYXJhbSBoYW5kbGVyIG5hbWUgb2YgdGhlIGNs
aWVudCBvYmplY3QncyBtZXRob2QgdGhhdCBtdXN0IGJlIGNhbGxlZCBvbiBldmVudA0KKyAJICog
IA0KKyAgCSAqIEB0aHJvd3MgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBpZiBoYW5kbGVyIG1ldGhv
ZCBpcyBub3QgZm91bmQgaW4gY2xpZW50IG9iamVjdCdzIGNsYXNzLg0KKyAJICovDQorIAlzdGF0
aWMgcHVibGljIE9iamVjdCBjcmVhdGUoQ2xhc3MgbGlzdGVuZXJJbnRlcmZhY2UsIFN0cmluZyBs
aXN0ZW5lck1ldGhvZE5hbWUsIE9iamVjdCBjbGllbnQsIFN0cmluZyBoYW5kbGVyKSB7DQorIAkJ
cmV0dXJuIFByb3h5Lm5ld1Byb3h5SW5zdGFuY2UoDQorIAkJCQljbGllbnQuZ2V0Q2xhc3MoKS5n
ZXRDbGFzc0xvYWRlcigpLCANCisgCQkJCW5ldyBDbGFzc1tdIHsgbGlzdGVuZXJJbnRlcmZhY2Ug
fSwgDQorIAkJCQluZXcgRXZlbnRIYW5kbGVyKGxpc3RlbmVySW50ZXJmYWNlLCBsaXN0ZW5lck1l
dGhvZE5hbWUsIGNsaWVudCwgaGFuZGxlcikpOw0KKyAJfQ0KKyAJDQorIAkvKioNCisgCSAqIEhl
bHBlciBtZXRob2QuIERpc2NvdmVycyBhcHByb3ByaWF0ZSA8Y29kZT5hZGRYeHhMaXN0ZW5lcjwv
Y29kZT4gbWV0aG9kIGJhc2VkIG9uIDxjb2RlPmxpc3RlbmVyTWV0aG9kTmFtZTwvY29kZT4gZHlu
YW1pY2FsbHkuIA0KKyAJICogRmFydGhlciByZWR1Y2VzIGFtb3VudCBvZiBjb2RpbmcgY29tcGFy
ZWQgd2l0aCA8Y29kZT5jcmVhdGU8L2NvZGU+IG1ldGhvZC4gDQorIAkgKiBBbHNvIHRoaXMgbWV0
aG9kIGlzIGRlZGljYXRlZCB0byBiZSB1c2VkIGJ5IHN3aXhtbCBQYXJzZXIuDQorIAkgKiBTbyB0
aGUgZXhhbXBsZSBmcm9tIDxjb2RlPmNyZWF0ZTwvY29kZT4gbWV0aG9kIGNhbiBiZSByZXdyaXRl
biBsaWtlIHRoaXM6DQorIAkgKiA8cHJlPg0KKyAJICogRXZlbnRIYW5kbGVyLmFkZExpc3RlbmVy
KGxpc3QsICJ2YWx1ZUNoYW5nZWQiLCB0aGlzLCAiaGFuZGxlVmFsdWVDaGFuZ2VkIik7DQorIAkg
KiA8L3ByZT4NCisgCSAqIE9yIGluIHN3aXhtbCBkZXNjcmlwdG9yIGl0IHdvdWxkIGxvb2sgbGlr
ZToNCisgCSAqIDxwcmU+DQorIAkgKiAmbHQ7bGlzdCBpZD0ibGlzdCIgdmFsdWVDaGFuZ2VkPSJo
YW5kbGVWYWx1ZUNoYW5nZWQiLyZndDsNCisgCSAqIDwvcHJlPg0KKyAJICogSW4gdGhpcyBjYXNl
IGNsaWVudCBvYmplY3QgaXMgdGhlIG9uZSB3aGljaCBpcyBwYXNzZWQgdG8gU3dpbmdFbmdpbmUn
cyBjb25zdHJ1Y3Rvci4NCisgCSAqIA0KKyAJICogQHBhcmFtIGNvbXBvbmVudCBndWkgY29tcG9u
ZW50IHRvIGFkZCBsaXN0ZW5lciB0bw0KKyAJICogQHBhcmFtIGxpc3RlbmVyTWV0aG9kTmFtZSB0
aGUgbmFtZSBvZiB0aGUgbWV0aG9kIGluIHRoZSBsaXN0ZW5lciBpbnRlcmZhY2UgdGhhdCBzaG91
bGQgdHJpZ2dlciB0aGUgaGFuZGxlcg0KKyAJICogQHBhcmFtIGNsaWVudCB0aGUgb2JqZWN0IHRo
YXQgaW1wbGVtZW50cyBoYW5kbGVyIG1ldGhvZA0KKyAJICogQHBhcmFtIGhhbmRsZXIgbmFtZSBv
ZiB0aGUgY2xpZW50IG9iamVjdCdzIG1ldGhvZCB0aGF0IG11c3QgYmUgY2FsbGVkIG9uIGV2ZW50
DQorIAkgKiANCisgCSAqIEBzZWUgI2NyZWF0ZQ0KKyAJICovDQorIAlwdWJsaWMgc3RhdGljIHZv
aWQgYWRkTGlzdGVuZXIoT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIGxpc3RlbmVyTWV0aG9kTmFt
ZSwgT2JqZWN0IGNsaWVudCwgU3RyaW5nIGhhbmRsZXIpIHsNCisgCQkvL2ZpbmQgYXBwcm9wcmlh
dGUgYWRkWHh4TGlzdGVuZXIgbWV0aG9kDQorIAkJTWV0aG9kIGFkZE1ldGhvZCA9IGd1ZXNzQWRk
TWV0aG9kKGNvbXBvbmVudC5nZXRDbGFzcygpLCBsaXN0ZW5lck1ldGhvZE5hbWUpOw0KKyAJCWlm
IChhZGRNZXRob2QgPT0gbnVsbCkgew0KKyAJCQl0aHJvdyBuZXcgTm9TdWNoRWxlbWVudEV4Y2Vw
dGlvbigiQ2Fubm90IGFkZCBsaXN0ZW5lciBmb3I6IiArIGxpc3RlbmVyTWV0aG9kTmFtZSk7DQor
IAkJfQ0KKyAJCQ0KKyAJCS8vIGNyZWF0ZSBldmVudCBoYW5kbGVyDQorIAkJQ2xhc3MgbGlzdGVu
ZXJJbnRlcmZhY2UgPSBhZGRNZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKVswXTsNCisgCQlPYmpl
Y3QgZXZlbnRIYW5kbGVyID0gRXZlbnRIYW5kbGVyLmNyZWF0ZShsaXN0ZW5lckludGVyZmFjZSwg
bGlzdGVuZXJNZXRob2ROYW1lLCBjbGllbnQsIGhhbmRsZXIpOw0KKyAJCQ0KKyAJCS8vIGFkZCBs
aXN0ZW5lciB0byB0aGUgZ3VpIGNvbXBvbmVudA0KKyAJCXRyeSB7DQorIAkJCWFkZE1ldGhvZC5p
bnZva2UoY29tcG9uZW50LCBuZXcgT2JqZWN0W10geyBldmVudEhhbmRsZXIgfSk7DQorIAkJfQ0K
KyAJCWNhdGNoIChFeGNlcHRpb24gZSkgew0KKyAJCQkvL3Nob3VsZCBub3QgaGFwcGVuDQorIAkJ
CXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFcnJvciBhZGRpbmcgbGlzdGVuZXIuIHJlYXNv
bjogIiArIGUpOw0KKyAJCX0NCisgCX0JDQorIA0KKyAJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8NCisgCS8vIEludm9jYXRpb25IYW5kbGVyIGltcGxlbWVudGF0aW9uDQorIAkN
CisgCXB1YmxpYyBPYmplY3QgaW52b2tlKE9iamVjdCBwcm94eSwgTWV0aG9kIG1ldGhvZCwgT2Jq
ZWN0W10gYXJncykgdGhyb3dzIFRocm93YWJsZSB7DQorIAkJDQorICAgICAgICAgU3RyaW5nIG1l
dGhvZE5hbWUgPSBtZXRob2QuZ2V0TmFtZSgpOw0KKyANCisgICAgICAgICAvLyBIYW5kbGUgdGhl
IE9iamVjdCBwdWJsaWMgbWV0aG9kcy4NCisgICAgICAgICBpZiAobWV0aG9kLmdldERlY2xhcmlu
Z0NsYXNzKCkgPT0gT2JqZWN0LmNsYXNzKSB7DQorICAgICAgICAgICAgIGlmIChtZXRob2ROYW1l
LmVxdWFscygiaGFzaENvZGUiKSkgew0KKyAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRl
Z2VyKFN5c3RlbS5pZGVudGl0eUhhc2hDb2RlKHByb3h5KSk7DQorICAgICAgICAgICAgIH0gZWxz
ZSBpZiAobWV0aG9kTmFtZS5lcXVhbHMoImVxdWFscyIpKSB7DQorICAgICAgICAgICAgICAgICBy
ZXR1cm4gQm9vbGVhbi52YWx1ZU9mKHByb3h5ID09IGFyZ3NbMF0pOw0KKyAgICAgICAgICAgICB9
IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzKCJ0b1N0cmluZyIpKSB7DQorICAgICAgICAgICAg
ICAgICByZXR1cm4gcHJveHkuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAnQCcNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKHByb3h5Lmhhc2hDb2RlKCkpOw0K
KyAgICAgICAgICAgICB9DQorICAgICAgICAgfQ0KKyAJCQ0KKyAJCS8vIEZpbHRlciBvdXQgbGlz
dGVuZXIncyBtZXRob2RzIHdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluDQorIAkJaWYgKF9saXN0ZW5l
ck1ldGhvZE5hbWUgIT0gbnVsbCAmJiAhX2xpc3RlbmVyTWV0aG9kTmFtZS5lcXVhbHMobWV0aG9k
TmFtZSkpIHsNCisgCQkJcmV0dXJuIG51bGw7DQorIAkJfQ0KKyAJCQ0KKyAJCS8vIENhbGwgaGFu
ZGxlciBtZXRob2Qgb2YgdGhlIGNsaWVudC4NCisgCQl0cnkgew0KKyAJCQlPYmplY3RbXSBwYXJh
bXMgPSBudWxsOw0KKyAJCQlpZiAoX2hhbmRsZXIuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGgg
PT0gMSkgew0KKyAJCQkJcGFyYW1zID0gYXJnczsNCisgCQkJfQ0KKyAJCQkNCisgCQkJT2JqZWN0
IHJlc3VsdCA9IG51bGw7DQorIAkJCWlmICghX2hhbmRsZXIuaXNBY2Nlc3NpYmxlKCkpIHsgLy8g
aGFuZGxlcnMgbWF5IGJlIHByaXZhdGUgbWV0aG9kcyBhcyB3ZWxsDQorIAkJCQlfaGFuZGxlci5z
ZXRBY2Nlc3NpYmxlKHRydWUpOw0KKyAJCQkJcmVzdWx0ID0gX2hhbmRsZXIuaW52b2tlKF9jbGll
bnQsIHBhcmFtcyk7DQorIAkJCQlfaGFuZGxlci5zZXRBY2Nlc3NpYmxlKGZhbHNlKTsvL3Jlc3Rv
cmUgYWNjZXNzaWJpbGl0eQ0KKyAJCQl9DQorIAkJCWVsc2Ugew0KKyAJCQkJcmVzdWx0ID0gX2hh
bmRsZXIuaW52b2tlKF9jbGllbnQsIHBhcmFtcyk7DQorIAkJCX0NCisgCQkJcmV0dXJuIHJlc3Vs
dDsNCisgCQkJDQorIAkJfQ0KKyAJCWNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIHgp
IHsNCisgCQkJdGhyb3cgeC5nZXRUYXJnZXRFeGNlcHRpb24oKTsNCisgCQl9DQorIAkJY2F0Y2gg
KElsbGVnYWxBY2Nlc3NFeGNlcHRpb24geCkgew0KKyAJCQl0aHJvdyB4Ow0KKyAJCX0NCisgCX0N
CisgCQ0KKyAJLy8vLy8vLy8vLw0KKyAJLy8gcHJpdmF0ZQ0KKyAJDQorIAkvKioNCisgCSAqIFNl
YXJjaHMgZm9yIGEgbWV0aG9kIGluIGluaGVyaXRhbmNlIGhpZXJhcmNoeSBmcm9tIDxjb2RlPmNs
YXp6PC9jb2RlPiBkb3duIHRvIDxjb2RlPk9iamVjdC5jbGFzczwvY29kZT4uDQorIAkgKiBSZXR1
cm5lZCBtZXRob2QgaXMgbm90IG5lY2Vzc2FyaWx5IHB1YmxpYy4gQ2FuIGhhdmUgYW55IHZpc2li
aWxpdHkuIA0KKyAJICovDQorIAlwcml2YXRlIE1ldGhvZCBnZXRNZXRob2QoQ2xhc3MgY2xhenos
IFN0cmluZyBuYW1lLCBDbGFzc1tdIHBhcmFtcykgew0KKyAJCU1ldGhvZCBtZXRob2QgPSBudWxs
Ow0KKyAJCXdoaWxlIChjbGF6eiAhPSBudWxsICYmIG1ldGhvZCA9PSBudWxsKSB7DQorIAkJCXRy
eSB7DQorIAkJCQltZXRob2QgPSBjbGF6ei5nZXREZWNsYXJlZE1ldGhvZChuYW1lLCBwYXJhbXMp
Ow0KKyAJCQl9DQorIAkJCWNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgew0KKyAJCQkJ
Ly9tZXRob2QgaXMgbm90IGZvdW5kIGluIHRoZSBjbGFzcyBpdHNlbGYuDQorIAkJCSAgICAvL2Nv
bnRpbnVlIHJlY3Vyc2l2ZWx5IHRvIHRoZSBzdXBlciBjbGFzcy4NCisgCQkJCWNsYXp6ID0gY2xh
enouZ2V0U3VwZXJjbGFzcygpOw0KKyAJCQl9DQorIAkJfQ0KKyAJCXJldHVybiBtZXRob2Q7DQor
IAl9DQorIAkNCisgCS8qKg0KKyAJICogQ2hlY2tzIGlmIGdpdmVuIGNsYXNzIGhhcyA8Y29kZT5h
ZGRYeHhMaXN0ZW5lcjwvY29kZT4gbWV0aG9kIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuDQor
IAkgKiA8Y29kZT5saXN0ZW5lck1ldGhvZE5hbWU8L2NvZGU+LiBJZiBzbyByZXR1cm5zIHRoZSBt
ZXRob2QsIDxjb2RlPm51bGw8L2NvZGU+IG90aGVyd2lzZS4gDQorIAkgKiBGb3IgZXhhbXBsZSBp
ZiA8Y29kZT5saXN0ZW5lck1ldGhvZE5hbWU8L2NvZGU+IGlzDQorIAkgKiAia2V5UHJlc3NlZCIs
IGNoZWNrcyB3aGV0aGVyIGdpdmVuIGNsYXNzIGhhcyA8Y29kZT5hZGRLZXlMaXN0ZW5lcjwvY29k
ZT4gbWV0aG9kLg0KKyAJICogQHBhcmFtIGNsYXp6IGNsYXNzIHRvIGJlIGNoZWNrZWQgDQorIAkg
KiBAcGFyYW0gbGlzdGVuZXJNZXRob2ROYW1lIG5hbWUgb2YgdGhlIGxpc3RlbmVyIG1ldGhvZC4g
Zm9yIGV4YW1wbGUgImtleVByZXNzZWQiLg0KKyAJICovDQorIAlwcml2YXRlIHN0YXRpYyBNZXRo
b2QgZ3Vlc3NBZGRNZXRob2QoQ2xhc3MgY2xhenosIFN0cmluZyBsaXN0ZW5lck1ldGhvZE5hbWUp
IHsNCisgCQlNZXRob2RbXSBtZXRob2RzID0gY2xhenouZ2V0TWV0aG9kcygpOw0KKyAJCWZvciAo
aW50IGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgew0KKyAJCQlNZXRob2QgYWRkTWV0
aG9kID0gbWV0aG9kc1tpXTsNCisgCQkJDQorIAkJCS8vMS4gbWV0aG9kIHNob3VsZCBzdGFydCB3
aXRoICJhZGQiDQorIAkJCWlmICghYWRkTWV0aG9kLmdldE5hbWUoKS5zdGFydHNXaXRoKCJhZGQi
KSkgew0KKyAJCQkJY29udGludWU7DQorIAkJCX0NCisgCQkJDQorIAkJCUNsYXNzW10gcGFyYW1U
eXBlcyA9IGFkZE1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOw0KKyANCisgCQkJLy8yLiBtZXRo
b2Qgc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgcGFyYW1ldGVyDQorIAkJCWlmIChwYXJhbVR5cGVz
Lmxlbmd0aCAhPSAxKSB7DQorIAkJCQljb250aW51ZTsNCisgCQkJfQ0KKyAJCQkNCisgCQkJLy8z
LiBwYXJhbWV0ZXIgdHlwZSBtdXN0IGJlIGluc3RhbmNlIG9mIEV2ZW50TGlzdGVuZXINCisgCQkJ
Q2xhc3MgcGFyYW1UeXBlID0gcGFyYW1UeXBlc1swXTsNCisgCQkJaWYgKCFFdmVudExpc3RlbmVy
LmNsYXNzLmlzQXNzaWduYWJsZUZyb20ocGFyYW1UeXBlc1swXSkpIHsNCisgCQkJCWNvbnRpbnVl
Ow0KKyAJCQl9DQorIAkJCQ0KKyAJCQkvLzQuIGFuZCBpdCBtdXN0IGhhdmUgbWV0aG9kIHdpdGgg
bmFtZSAibGlzdGVuZXJNZXRob2ROYW1lIg0KKyAJCQlDbGFzcyBldmVudENsYXNzID0gZ3Vlc3NF
dmVudENsYXNzKHBhcmFtVHlwZXNbMF0uZ2V0TmFtZSgpKTsNCisgCQkJdHJ5IHsNCisgCQkJCU1l
dGhvZCBsaXN0ZW5lck1ldGhvZCA9IHBhcmFtVHlwZXNbMF0uZ2V0TWV0aG9kKGxpc3RlbmVyTWV0
aG9kTmFtZSwgbmV3IENsYXNzW117ZXZlbnRDbGFzc30pOw0KKyAJCQkJLy8gaXQgcGFzc2VkIGFs
bCB0ZXN0cy4gdGhhdCdzIHdoYXQgd2UgbmVlZA0KKyAJCQkJcmV0dXJuIGFkZE1ldGhvZDsNCisg
CQkJfQ0KKyAJCQljYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsNCisgCQkJCWNvbnRp
bnVlOw0KKyAJCQl9DQorIAkJfQ0KKyAJCXJldHVybiBudWxsOw0KKyAJfQ0KKyAJDQorIAkvKioN
CisgCSAqIEBwYXJhbSBsaXN0ZW5lckludGVyZmFjZU5hbWUgbmFtZSBvZiB0aGUgbGlzdGVuZXIg
aW50ZXJmYWNlDQorIAkgKiBAcmV0dXJuIGV2ZW50IGNsYXNzIHRoYXQgY29ycmVzcG9uZHMgdG8g
dGhlIGdpdmVuIDxjb2RlPmxpc3RlbmVySW50ZXJmYWNlTmFtZTwvY29kZT4uDQorIAkgKiAJCTxj
b2RlPm51bGw8L2NvZGU+IGlmIGNvcnJlc3BvbmRpbmcgY2xhc3MgY2FuIG5vdCBiZSBmb3VuZC4g
Rm9yIGV4YW1wbGUNCisgCSAqIAkJaWYgbGlzdGVuZXJJbnRlcmZhY2VOYW1lIGlzICJLZXlMaXN0
ZW5lciIgcmV0dXJucyA8Y29kZT5LZXlFdmVudDwvY29kZT4gY2xhc3MuDQorIAkgKi8NCisgCXBy
aXZhdGUgc3RhdGljIENsYXNzIGd1ZXNzRXZlbnRDbGFzcyhTdHJpbmcgbGlzdGVuZXJJbnRlcmZh
Y2VOYW1lKSB7DQorIAkJLy8gbGlzdGVuZXIgaW50ZXJmYWNlIGFuZCBldmVudCBjbGFzcw0KKyAJ
CS8vIG5hbWVzIG11c3QgY29tcGx5IHdpdGggamF2YSBiZWFuIGNvbnZlbnRpb25zLg0KKyAJCWlm
ICghbGlzdGVuZXJJbnRlcmZhY2VOYW1lLmVuZHNXaXRoKCJMaXN0ZW5lciIpKSB7DQorIAkJCXJl
dHVybiBudWxsOw0KKyAJCX0NCisgDQorIAkJLy8gY2FsY3VsYXRlIGV2ZW50IGNsYXNzIG5hbWUN
CisgCQlTdHJpbmcgZXZlbnRDbGFzc05hbWUgPSBudWxsOw0KKyAJCWlmIChsaXN0ZW5lckludGVy
ZmFjZU5hbWUuZXF1YWxzKE1vdXNlTW90aW9uTGlzdGVuZXIuY2xhc3MuZ2V0TmFtZSgpKSkgeyAv
LyBNb3VzZU1vdGlvbkxpc3RlbmVyIGlzIGEgc3BlY2lhbCBjYXNlDQorIAkJCWV2ZW50Q2xhc3NO
YW1lID0gTW91c2VFdmVudC5jbGFzcy5nZXROYW1lKCk7DQorIAkJfSANCisgCQllbHNlIHsgLy8g
Zm9yIGFsbCBvdGhlciBsaXN0ZW5lcnMNCisgCQkJU3RyaW5nIGJhc2VOYW1lID0gbGlzdGVuZXJJ
bnRlcmZhY2VOYW1lLnN1YnN0cmluZygwLCBsaXN0ZW5lckludGVyZmFjZU5hbWUubGVuZ3RoKCkg
LSAiTGlzdGVuZXIiLmxlbmd0aCgpKTsNCisgCQkJZXZlbnRDbGFzc05hbWUgPSBiYXNlTmFtZSAr
ICJFdmVudCI7DQorIAkJfQ0KKyANCisgCQkvLyB0cnkgdG8gZ2V0IGV2ZW50IGNsYXNzDQorIAkJ
dHJ5IHsNCisgCQkJQ2xhc3MgZXZlbnRDbGFzcyA9IENsYXNzLmZvck5hbWUoZXZlbnRDbGFzc05h
bWUpOw0KKyAJCQlyZXR1cm4gZXZlbnRDbGFzczsNCisgCQl9DQorIAkJY2F0Y2ggKENsYXNzTm90
Rm91bmRFeGNlcHRpb24gZSkgew0KKyAJCQkvLyBldmVudCBjbGFzcyB3YXMgbm90IGZvdW5kDQor
IAkJCS8vIHBlcmhhcHMgbmFtaW5nIGRvZXMgbm90IGNvbXBseSB3aXRoDQorIAkJCS8vIGphdmEg
YmVhbnMgY29udmVudGlvbnMuDQorIAkJCXJldHVybiBudWxsOw0KKyAJCX0NCisgCX0NCisgfQ0K
ZGlmZiAtTkViYyAtSSAnJElkJyAtSSAnJFJldmlzaW9uJyBzd2l4bWxfMTQ0L3NyYy9vcmcvc3dp
eG1sL1BhcnNlci5qYXZhIHN3aXhtbF9leHQvc3JjL29yZy9zd2l4bWwvUGFyc2VyLmphdmENCioq
KioqKioqKioqKioqKg0KKioqIDc0Niw3NTIgKioqKg0KICAgICAgICAgIC8vDQogICAgICAgICAg
bGlzdC5hZGQoYXR0cik7DQogICAgICAgICAgY29udGludWU7DQohICAgICAgIH0gZWxzZSB7DQog
ICAgICAgICAgLy8NCiAgICAgICAgICAvLyAgU2VhcmNoIGZvciBhIHB1YmxpYyBmaWVsZCBpbiB0
aGUgb2JqLmNsYXNzIHRoYXQgbWF0Y2hlcyB0aGUgYXR0cmlidXRlIG5hbWUNCiAgICAgICAgICAv
Lw0KLS0tIDczMSw3NDQgLS0tLQ0KICAgICAgICAgIC8vDQogICAgICAgICAgbGlzdC5hZGQoYXR0
cik7DQogICAgICAgICAgY29udGludWU7DQohICAgICAgIH0gDQohIAkJZWxzZSBpZiAoIHRyeUxp
c3RlbmVyKG9iaiwgYXR0cikgKSANCiEgCQl7CS8vDQohIAkJCS8vIFNlYXJjaCBmb3IgYSBhZGRY
eHhMaXN0ZW5lciBtZXRob2QNCiEgCQkJLy8NCiEgCQkJY29udGludWU7DQohIAkJfQ0KISAgICAg
ICBlbHNlIHsNCiAgICAgICAgICAvLw0KICAgICAgICAgIC8vICBTZWFyY2ggZm9yIGEgcHVibGlj
IGZpZWxkIGluIHRoZSBvYmouY2xhc3MgdGhhdCBtYXRjaGVzIHRoZSBhdHRyaWJ1dGUgbmFtZQ0K
ICAgICAgICAgIC8vDQoqKioqKioqKioqKioqKioNCioqKiA3NzcsNzgyICoqKioNCi0tLSA3Njks
NzgyIC0tLS0NCiAgICAgIHJldHVybiBsaXN0Ow0KICAgIH0NCiAgDQorIAlwcml2YXRlIGJvb2xl
YW4gdHJ5TGlzdGVuZXIoIE9iamVjdCBvYmosIEF0dHJpYnV0ZSBhdHRyICkgew0KKyAJCXRyeSB7
DQorIAkJCUV2ZW50SGFuZGxlci5hZGRMaXN0ZW5lcihvYmosIGF0dHIuZ2V0TmFtZSgpLCBlbmdp
bmUuZ2V0Q2xpZW50KCksIGF0dHIuZ2V0VmFsdWUoKSk7DQorIAkJfSBjYXRjaCAoTm9TdWNoRWxl
bWVudEV4Y2VwdGlvbiB4KSB7DQorIAkJCXJldHVybiBmYWxzZTsNCisgCQl9DQorIAkJcmV0dXJu
IHRydWU7DQorIAl9DQogIA0KICAgIC8qKg0KICAgICAqIENvcGllcyBhdHRyaWJ1dGVzIHRoYXQg
ZWxlbWVudCBkb2Vzbid0IGhhdmUgeWV0IGZvcm0gZWxlbWVudFtpZF0NCg==
------=_Part_2333_17650554.1124810159268
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Forum mailing list
[email protected]
http://carlsbadcubes.com/mailman/listinfo/forum_carlsbadcubes.com

------=_Part_2333_17650554.1124810159268--