Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Nebula » Grid and StyledCellLabelProvider
Grid and StyledCellLabelProvider [message #62677] Tue, 17 February 2009 08:10 Go to next message
Christian Hauser is currently offline Christian Hauser
Messages: 189
Registered: July 2009
Senior Member
Hi all,

I've been using a normal JFace TableViewer for an editable table.
However, I had to switch to GridTableViewer, because the customer needs
wrapping of the text within cells.

The problem I'm facing now is that my StyledCellLabelProvider that
highlights text is not working with Grid. Am I missing something or is
this rather new feature (Eclipse 3.4) not yet supported on Grid?

Thanks in advance for any help,
Christian
Re: Grid and StyledCellLabelProvider [message #62704 is a reply to message #62677] Tue, 17 February 2009 09:17 Go to previous messageGo to next message
Thomas Schindl is currently offline Thomas Schindl
Messages: 5406
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------010204030502090506010102
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

Hi,

No. We don't support this but it should quite easy for you to implement
a CellRenderer which uses a StyledString and renderer it.

Attached to this mail you'll find a completely untested (I only wrote
the code renderer) class but you should get the idea. Always remember
when using the Grid you are in the position of drawing everything
yourself and you are not restricted to the bounds of the native widget.

Tom

Christian Hauser schrieb:
> Hi all,
>
> I've been using a normal JFace TableViewer for an editable table.
> However, I had to switch to GridTableViewer, because the customer needs
> wrapping of the text within cells.
>
> The problem I'm facing now is that my StyledCellLabelProvider that
> highlights text is not working with Grid. Am I missing something or is
> this rather new feature (Eclipse 3.4) not yet supported on Grid?
>
> Thanks in advance for any help,
> Christian


--
B e s t S o l u t i o n . at
------------------------------------------------------------ --------
Tom Schindl JFace-Committer
------------------------------------------------------------ --------

--------------010204030502090506010102
Content-Type: text/plain;
name="StyledTextCellRenderer.java"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="StyledTextCellRenderer.java"

LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAy MDA2IElCTSBD
b3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVk LiBUaGlzIHBy
b2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBt YWRlIGF2YWls
YWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExp Y2Vuc2UgdjEu
MAogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5k IGlzIGF2YWls
YWJsZSBhdAogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12 MTAuaHRtbAog
KgogKiBDb250cmlidXRvcnM6CiAqICAgIGNocmlzLmdyb3NzQHVzLmlibS5j b20gLSBpbml0
aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICoqKioqKioqKioqKioqKioq KioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiov
CnBhY2thZ2Ugb3JnLmVjbGlwc2UubmVidWxhLmpmYWNlLmdyaWR2aWV3ZXI7 CgppbXBvcnQg
b3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5WaWV3ZXI7CmltcG9y dCBvcmcuZWNs
aXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlcjsKaW1wb3J0 IG9yZy5lY2xp
cHNlLmpmYWNlLnZpZXdlcnMuU3R5bGVkU3RyaW5nOwppbXBvcnQgb3JnLmVj bGlwc2UuamZh
Y2Uudmlld2Vycy5WaWV3ZXJDZWxsOwppbXBvcnQgb3JnLmVjbGlwc2UuamZh Y2Uudmlld2Vy
cy5WaWV3ZXJDb2x1bW47CmltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3 ZXJzLlZpZXdl
clJvdzsKaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuRGVsZWdh dGluZ1N0eWxl
ZENlbGxMYWJlbFByb3ZpZGVyLklTdHlsZWRMYWJlbFByb3ZpZGVyOwppbXBv cnQgb3JnLmVj
bGlwc2UubmVidWxhLndpZGdldHMuZ3JpZC5HcmlkOwppbXBvcnQgb3JnLmVj bGlwc2UubmVi
dWxhLndpZGdldHMuZ3JpZC5HcmlkQ2VsbFJlbmRlcmVyOwppbXBvcnQgb3Jn LmVjbGlwc2Uu
bmVidWxhLndpZGdldHMuZ3JpZC5HcmlkSXRlbTsKaW1wb3J0IG9yZy5lY2xp cHNlLm5lYnVs
YS53aWRnZXRzLmdyaWQuSUludGVybmFsV2lkZ2V0OwppbXBvcnQgb3JnLmVj bGlwc2UubmVi
dWxhLndpZGdldHMuZ3JpZC5pbnRlcm5hbC5CcmFuY2hSZW5kZXJlcjsKaW1w b3J0IG9yZy5l
Y2xpcHNlLm5lYnVsYS53aWRnZXRzLmdyaWQuaW50ZXJuYWwuQ2hlY2tCb3hS ZW5kZXJlcjsK
aW1wb3J0IG9yZy5lY2xpcHNlLm5lYnVsYS53aWRnZXRzLmdyaWQuaW50ZXJu YWwuVGV4dFV0
aWxzOwppbXBvcnQgb3JnLmVjbGlwc2UubmVidWxhLndpZGdldHMuZ3JpZC5p bnRlcm5hbC5U
b2dnbGVSZW5kZXJlcjsKaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Cmlt cG9ydCBvcmcu
ZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlUmFuZ2U7CmltcG9ydCBvcmcuZWNs aXBzZS5zd3Qu
ZXZlbnRzLkRpc3Bvc2VFdmVudDsKaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5l dmVudHMuRGlz
cG9zZUxpc3RlbmVyOwppbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNz LkNvbG9yOwpp
bXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOwppbXBvcnQgb3Jn LmVjbGlwc2Uu
c3d0LmdyYXBoaWNzLkltYWdlOwppbXBvcnQgb3JnLmVjbGlwc2Uuc3d0Lmdy YXBoaWNzLlBv
aW50OwppbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3Rhbmds ZTsKaW1wb3J0
IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5UZXh0TGF5b3V0OwoKLyoqCiAq IFRoZSByZW5k
ZXJlciBmb3IgYSBjZWxsIGluIEdyaWQuCiAqIAogKiBAYXV0aG9yIGNocmlz Lmdyb3NzQHVz
LmlibS5jb20KICogQHNpbmNlIDIuMC4wCiAqLwpwdWJsaWMgY2xhc3MgU3R5 bGVkVGV4dENl
bGxSZW5kZXJlciBleHRlbmRzIEdyaWRDZWxsUmVuZGVyZXIgewoKCWludCBs ZWZ0TWFyZ2lu
ID0gNDsKCglpbnQgcmlnaHRNYXJnaW4gPSA0OwoKCWludCB0b3BNYXJnaW4g PSAwOwoKCWlu
dCBib3R0b21NYXJnaW4gPSAwOwoKCWludCB0ZXh0VG9wTWFyZ2luID0gMTsK CglpbnQgdGV4
dEJvdHRvbU1hcmdpbiA9IDI7CgoJcHJpdmF0ZSBpbnQgaW5zaWRlTWFyZ2lu ID0gMzsKCglp
bnQgdHJlZUluZGVudCA9IDIwOwoKCXByaXZhdGUgVG9nZ2xlUmVuZGVyZXIg dG9nZ2xlUmVu
ZGVyZXI7CgoJcHJpdmF0ZSBCcmFuY2hSZW5kZXJlciBicmFuY2hSZW5kZXJl cjsKCglwcml2
YXRlIENoZWNrQm94UmVuZGVyZXIgY2hlY2tSZW5kZXJlcjsKCglwcml2YXRl IFRleHRMYXlv
dXQgdGV4dExheW91dDsKCglwcml2YXRlIEdyaWRUYWJsZVZpZXdlciB2aWV3 ZXI7CgoJLyoq
CgkgKiBBIG5ldyBjZWxsIHJlbmRlcmVyIGluc3RhbmNlIGFibGUgdG8gZGVh bCB3aXRoIHN0
eWxlZCB0ZXh0IGluZm9ybWF0aW9uCgkgKiAKCSAqIEBwYXJhbSB2aWV3ZXIK CSAqICAgICAg
ICAgICAgdGhlIHZpZXdlcgoJICovCglwdWJsaWMgU3R5bGVkVGV4dENlbGxS ZW5kZXJlcihH
cmlkVGFibGVWaWV3ZXIgdmlld2VyKSB7CgkJdGhpcy52aWV3ZXIgPSB2aWV3 ZXI7Cgl9CgoJ
LyoqCgkgKiB7QGluaGVyaXREb2N9CgkgKi8KCXB1YmxpYyB2b2lkIHBhaW50 KEdDIGdjLCBP
YmplY3QgdmFsdWUpIHsKCQlHcmlkSXRlbSBpdGVtID0gKEdyaWRJdGVtKSB2 YWx1ZTsKCgkJ
Z2Muc2V0Rm9udChpdGVtLmdldEZvbnQoZ2V0Q29sdW1uKCkpKTsKCgkJYm9v bGVhbiBkcmF3
QXNTZWxlY3RlZCA9IGlzU2VsZWN0ZWQoKTsKCgkJYm9vbGVhbiBkcmF3QmFj a2dyb3VuZCA9
IHRydWU7CgoJCWlmIChpc0NlbGxTZWxlY3RlZCgpKSB7CgkJCWRyYXdBc1Nl bGVjdGVkID0g
dHJ1ZTsvLyAoIWlzQ2VsbEZvY3VzKCkpOwoJCX0KCgkJaWYgKGRyYXdBc1Nl bGVjdGVkKSB7
CgkJCWdjLnNldEJhY2tncm91bmQoZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNv bG9yKAoJCQkJ
CVNXVC5DT0xPUl9MSVNUX1NFTEVDVElPTikpOwoJCQlnYy5zZXRGb3JlZ3Jv dW5kKGdldERp
c3BsYXkoKS5nZXRTeXN0ZW1Db2xvcigKCQkJCQlTV1QuQ09MT1JfTElTVF9T RUxFQ1RJT05f
VEVYVCkpOwoJCX0gZWxzZSB7CgkJCWlmIChpdGVtLmdldFBhcmVudCgpLmlz RW5hYmxlZCgp
KSB7CgkJCQlDb2xvciBiYWNrID0gaXRlbS5nZXRCYWNrZ3JvdW5kKGdldENv bHVtbigpKTsK
CgkJCQlpZiAoYmFjayAhPSBudWxsKSB7CgkJCQkJZ2Muc2V0QmFja2dyb3Vu ZChiYWNrKTsK
CQkJCX0gZWxzZSB7CgkJCQkJZHJhd0JhY2tncm91bmQgPSBmYWxzZTsKCQkJ CX0KCQkJfSBl
bHNlIHsKCQkJCWdjLnNldEJhY2tncm91bmQoZ2V0RGlzcGxheSgpLmdldFN5 c3RlbUNvbG9y
KAoJCQkJCQlTV1QuQ09MT1JfV0lER0VUX0JBQ0tHUk9VTkQpKTsKCQkJfQoJ CQlnYy5zZXRG
b3JlZ3JvdW5kKGl0ZW0uZ2V0Rm9yZWdyb3VuZChnZXRDb2x1bW4oKSkpOwoJ CX0KCgkJaWYg
KGRyYXdCYWNrZ3JvdW5kKQoJCQlnYy5maWxsUmVjdGFuZ2xlKGdldEJvdW5k cygpLngsIGdl
dEJvdW5kcygpLnksIGdldEJvdW5kcygpLndpZHRoLAoJCQkJCWdldEJvdW5k cygpLmhlaWdo
dCk7CgoJCWludCB4ID0gbGVmdE1hcmdpbjsKCgkJaWYgKGlzVHJlZSgpKSB7 CgkJCWJvb2xl
YW4gcmVuZGVyQnJhbmNoZXMgPSBpdGVtLmdldFBhcmVudCgpLmdldFRyZWVM aW5lc1Zpc2li
bGUoKTsKCQkJaWYgKHJlbmRlckJyYW5jaGVzKSB7CgkJCQlicmFuY2hSZW5k ZXJlci5zZXRC
cmFuY2hlcyhnZXRCcmFuY2hlcyhpdGVtKSk7CgkJCQlicmFuY2hSZW5kZXJl ci5zZXRJbmRl
bnQodHJlZUluZGVudCk7CgkJCQlicmFuY2hSZW5kZXJlci5zZXRCb3VuZHMo Z2V0Qm91bmRz
KCkueCArIHgsIGdldEJvdW5kcygpLnksCgkJCQkJCWdldFRvZ2dsZUluZGVu dChpdGVtKSwg
Z2V0Qm91bmRzKCkuaGVpZ2h0ICsgMSk7IC8vIFRha2UKCQkJCQkJCQkJCQkJ CQkJCQkJLy8g
aW50bwoJCQkJCQkJCQkJCQkJCQkJCQkvLyBhY2NvdW50CgkJCQkJCQkJCQkJ CQkJCQkJCS8v
IGJvcmRlcgoJCQl9CgoJCQl4ICs9IGdldFRvZ2dsZUluZGVudChpdGVtKTsK CgkJCXRvZ2ds
ZVJlbmRlcmVyLnNldEV4cGFuZGVkKGl0ZW0uaXNFeHBhbmRlZCgpKTsKCgkJ CXRvZ2dsZVJl
bmRlcmVyLnNldEhvdmVyKGdldEhvdmVyRGV0YWlsKCkuZXF1YWxzKCJ0b2dn bGUiKSk7CgoJ
CQl0b2dnbGVSZW5kZXJlci5zZXRMb2NhdGlvbihnZXRCb3VuZHMoKS54ICsg eCwKCQkJCQko
Z2V0Qm91bmRzKCkuaGVpZ2h0IC0gdG9nZ2xlUmVuZGVyZXIuZ2V0Qm91bmRz KCkuaGVpZ2h0
KQoJCQkJCQkJLyAyICsgZ2V0Qm91bmRzKCkueSk7CgkJCWlmIChpdGVtLmhh c0NoaWxkcmVu
KCkpCgkJCQl0b2dnbGVSZW5kZXJlci5wYWludChnYywgbnVsbCk7CgoJCQlp ZiAocmVuZGVy
QnJhbmNoZXMpIHsKCQkJCWJyYW5jaFJlbmRlcmVyLnNldFRvZ2dsZUJvdW5k cyh0b2dnbGVS
ZW5kZXJlci5nZXRCb3VuZHMoKSk7CgkJCQlicmFuY2hSZW5kZXJlci5wYWlu dChnYywgbnVs
bCk7CgkJCX0KCgkJCXggKz0gdG9nZ2xlUmVuZGVyZXIuZ2V0Qm91bmRzKCku d2lkdGggKyBp
bnNpZGVNYXJnaW47CgoJCX0KCgkJaWYgKGlzQ2hlY2soKSkgewoJCQljaGVj a1JlbmRlcmVy
LnNldENoZWNrZWQoaXRlbS5nZXRDaGVja2VkKGdldENvbHVtbigpKSk7CgkJ CWNoZWNrUmVu
ZGVyZXIuc2V0R3JheWVkKGl0ZW0uZ2V0R3JheWVkKGdldENvbHVtbigpKSk7 CgkJCWlmICgh
aXRlbS5nZXRQYXJlbnQoKS5pc0VuYWJsZWQoKSkgewoJCQkJY2hlY2tSZW5k ZXJlci5zZXRH
cmF5ZWQodHJ1ZSk7CgkJCX0KCQkJY2hlY2tSZW5kZXJlci5zZXRIb3Zlcihn ZXRIb3ZlckRl
dGFpbCgpLmVxdWFscygiY2hlY2siKSk7CgoJCQlpZiAoaXNDZW50ZXJlZENo ZWNrQm94T25s
eShpdGVtKSkgewoJCQkJLy8gU3BlY2lhbCBsb2dpYyBpZiB0aGlzIGNvbHVt biBvbmx5IGhh
cyBhIGNoZWNrYm94IGFuZCBpcwoJCQkJLy8gY2VudGVyZWQKCQkJCWNoZWNr UmVuZGVyZXIu
c2V0Qm91bmRzKAoJCQkJCQlnZXRCb3VuZHMoKS54CgkJCQkJCQkJKyAoKGdl dEJvdW5kcygp
LndpZHRoIC0gY2hlY2tSZW5kZXJlcgoJCQkJCQkJCQkJLmdldEJvdW5kcygp LndpZHRoKSAv
IDIpLAoJCQkJCQkoZ2V0Qm91bmRzKCkuaGVpZ2h0IC0gY2hlY2tSZW5kZXJl ci5nZXRCb3Vu
ZHMoKS5oZWlnaHQpCgkJCQkJCQkJLyAyICsgZ2V0Qm91bmRzKCkueSwKCQkJ CQkJY2hlY2tS
ZW5kZXJlci5nZXRCb3VuZHMoKS53aWR0aCwgY2hlY2tSZW5kZXJlcgoJCQkJ CQkJCS5nZXRC
b3VuZHMoKS5oZWlnaHQpOwoJCQl9IGVsc2UgewoJCQkJY2hlY2tSZW5kZXJl ci5zZXRCb3Vu
ZHMoZ2V0Qm91bmRzKCkueCArIHgsCgkJCQkJCShnZXRCb3VuZHMoKS5oZWln aHQgLSBjaGVj
a1JlbmRlcmVyLmdldEJvdW5kcygpLmhlaWdodCkKCQkJCQkJCQkvIDIgKyBn ZXRCb3VuZHMo
KS55LAoJCQkJCQljaGVja1JlbmRlcmVyLmdldEJvdW5kcygpLndpZHRoLCBj aGVja1JlbmRl
cmVyCgkJCQkJCQkJLmdldEJvdW5kcygpLmhlaWdodCk7CgoJCQkJeCArPSBj aGVja1JlbmRl
cmVyLmdldEJvdW5kcygpLndpZHRoICsgaW5zaWRlTWFyZ2luOwoJCQl9CgoJ CQljaGVja1Jl
bmRlcmVyLnBhaW50KGdjLCBudWxsKTsKCQl9CgoJCUltYWdlIGltYWdlID0g aXRlbS5nZXRJ
bWFnZShnZXRDb2x1bW4oKSk7CgkJaWYgKGltYWdlICE9IG51bGwpIHsKCQkJ aW50IHkgPSBn
ZXRCb3VuZHMoKS55OwoKCQkJeSArPSAoZ2V0Qm91bmRzKCkuaGVpZ2h0IC0g aW1hZ2UuZ2V0
Qm91bmRzKCkuaGVpZ2h0KSAvIDI7CgoJCQlnYy5kcmF3SW1hZ2UoaW1hZ2Us IGdldEJvdW5k
cygpLnggKyB4LCB5KTsKCgkJCXggKz0gaW1hZ2UuZ2V0Qm91bmRzKCkud2lk dGggKyBpbnNp
ZGVNYXJnaW47CgkJfQoKCQlpbnQgd2lkdGggPSBnZXRCb3VuZHMoKS53aWR0 aCAtIHggLSBy
aWdodE1hcmdpbjsKCgkJaWYgKGRyYXdBc1NlbGVjdGVkKSB7CgkJCWdjLnNl dEZvcmVncm91
bmQoZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKAoJCQkJCVNXVC5DT0xP Ul9MSVNUX1NF
TEVDVElPTl9URVhUKSk7CgkJfSBlbHNlIHsKCQkJZ2Muc2V0Rm9yZWdyb3Vu ZChpdGVtLmdl
dEZvcmVncm91bmQoZ2V0Q29sdW1uKCkpKTsKCQl9CgoJCUlCYXNlTGFiZWxQ cm92aWRlciBs
cCA9IHZpZXdlci5nZXRMYWJlbFByb3ZpZGVyKGdldENvbHVtbigpKTsKCQkK CQlpZiggbHAg
aW5zdGFuY2VvZiBJU3R5bGVkTGFiZWxQcm92aWRlciApIHsKCQkJSVN0eWxl ZExhYmVsUHJv
dmlkZXIgc3R5bGVkTHAgPSAoSVN0eWxlZExhYmVsUHJvdmlkZXIpIGxwOwoJ CQlTdHlsZWRT
dHJpbmcgc3R5bGVkU3RyaW5nID0gc3R5bGVkTHAuZ2V0U3R5bGVkVGV4dChp dGVtLmdldERh
dGEoKSk7CgkJCQoJCQlpZiAodGV4dExheW91dCA9PSBudWxsKSB7CgkJCQl0 ZXh0TGF5b3V0
ID0gbmV3IFRleHRMYXlvdXQoZ2MuZ2V0RGV2aWNlKCkpOwoJCQkJaXRlbS5n ZXRQYXJlbnQo
KS5hZGREaXNwb3NlTGlzdGVuZXIobmV3IERpc3Bvc2VMaXN0ZW5lcigpIHsK CQkJCQlwdWJs
aWMgdm9pZCB3aWRnZXREaXNwb3NlZChEaXNwb3NlRXZlbnQgZSkgewoJCQkJ CQl0ZXh0TGF5
b3V0LmRpc3Bvc2UoKTsKCQkJCQl9CgkJCQl9KTsKCQkJfQoJCQkKCQkJU3R5 bGVSYW5nZVtd
IHN0eWxlUmFuZ2VzID0gc3R5bGVkU3RyaW5nLmdldFN0eWxlUmFuZ2VzKCk7 CgkJCQoJCQl0
ZXh0TGF5b3V0LnNldFRleHQoaXRlbS5nZXRUZXh0KGdldENvbHVtbigpKSk7 CgkJCXRleHRM
YXlvdXQuc2V0Rm9udChpdGVtLmdldEZvbnQoZ2V0Q29sdW1uKCkpKTsKCQkJ CgkJCWZvciAo
aW50IGk9IDA7IGkgPCBzdHlsZVJhbmdlcy5sZW5ndGg7IGkrKykgewoJCQkJ U3R5bGVSYW5n
ZSBjdXJyID0gcHJlcGFyZVN0eWxlUmFuZ2Uoc3R5bGVSYW5nZXNbaV0sIHRy dWUpOwoJCQkJ
dGV4dExheW91dC5zZXRTdHlsZShjdXJyLCBjdXJyLnN0YXJ0LCBjdXJyLnN0 YXJ0ICsgY3Vy
ci5sZW5ndGggLSAxKTsKCQkJfQoJCQkKCQkJdGV4dExheW91dC5kcmF3KGdj LCB4LCBnZXRC
b3VuZHMoKS55ICsgdGV4dFRvcE1hcmdpbiArIHRvcE1hcmdpbik7CgkJCQoJ CX0gZWxzZSBp
ZiAoIWlzV29yZFdyYXAoKSkgewoJCQlTdHJpbmcgdGV4dCA9IFRleHRVdGls cy5nZXRTaG9y
dFN0cmluZyhnYywgaXRlbQoJCQkJCS5nZXRUZXh0KGdldENvbHVtbigpKSwg d2lkdGgpOwoK
CQkJaWYgKGdldEFsaWdubWVudCgpID09IFNXVC5SSUdIVCkgewoJCQkJaW50 IGxlbiA9IGdj
LnN0cmluZ0V4dGVudCh0ZXh0KS54OwoJCQkJaWYgKGxlbiA8IHdpZHRoKSB7 CgkJCQkJeCAr
PSB3aWR0aCAtIGxlbjsKCQkJCX0KCQkJfSBlbHNlIGlmIChnZXRBbGlnbm1l bnQoKSA9PSBT
V1QuQ0VOVEVSKSB7CgkJCQlpbnQgbGVuID0gZ2Muc3RyaW5nRXh0ZW50KHRl eHQpLng7CgkJ
CQlpZiAobGVuIDwgd2lkdGgpIHsKCQkJCQl4ICs9ICh3aWR0aCAtIGxlbikg LyAyOwoJCQkJ
fQoJCQl9CgoJCQlnYy5kcmF3U3RyaW5nKHRleHQsIGdldEJvdW5kcygpLngg KyB4LCBnZXRC
b3VuZHMoKS55CgkJCQkJKyB0ZXh0VG9wTWFyZ2luICsgdG9wTWFyZ2luLCB0 cnVlKTsKCQl9
IGVsc2UgewoJCQlpZiAodGV4dExheW91dCA9PSBudWxsKSB7CgkJCQl0ZXh0 TGF5b3V0ID0g
bmV3IFRleHRMYXlvdXQoZ2MuZ2V0RGV2aWNlKCkpOwoJCQkJaXRlbS5nZXRQ YXJlbnQoKS5h
ZGREaXNwb3NlTGlzdGVuZXIobmV3IERpc3Bvc2VMaXN0ZW5lcigpIHsKCQkJ CQlwdWJsaWMg
dm9pZCB3aWRnZXREaXNwb3NlZChEaXNwb3NlRXZlbnQgZSkgewoJCQkJCQl0 ZXh0TGF5b3V0
LmRpc3Bvc2UoKTsKCQkJCQl9CgkJCQl9KTsKCQkJfQoJCQl0ZXh0TGF5b3V0 LnNldEZvbnQo
Z2MuZ2V0Rm9udCgpKTsKCQkJdGV4dExheW91dC5zZXRUZXh0KGl0ZW0uZ2V0 VGV4dChnZXRD
b2x1bW4oKSkpOwoJCQl0ZXh0TGF5b3V0LnNldEFsaWdubWVudChnZXRBbGln bm1lbnQoKSk7
CgkJCXRleHRMYXlvdXQuc2V0V2lkdGgod2lkdGggPCAxID8gMSA6IHdpZHRo KTsKCgkJCXRl
eHRMYXlvdXQuZHJhdyhnYywgZ2V0Qm91bmRzKCkueCArIHgsIGdldEJvdW5k cygpLnkKCQkJ
CQkrIHRleHRUb3BNYXJnaW4gKyB0b3BNYXJnaW4pOwoJCX0KCgkJaWYgKGl0 ZW0uZ2V0UGFy
ZW50KCkuZ2V0TGluZXNWaXNpYmxlKCkpIHsKCQkJaWYgKGlzQ2VsbFNlbGVj dGVkKCkpIHsK
CQkJCS8vIFhYWDogc2hvdWxkIGJlIHVzZXIgZGVmaW5hYmxlPwoJCQkJZ2Mu c2V0Rm9yZWdy
b3VuZChnZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoCgkJCQkJCVNXVC5D T0xPUl9XSURH
RVRfREFSS19TSEFET1cpKTsKCQkJfSBlbHNlIHsKCQkJCWdjLnNldEZvcmVn cm91bmQoaXRl
bS5nZXRQYXJlbnQoKS5nZXRMaW5lQ29sb3IoKSk7CgkJCX0KCQkJZ2MuZHJh d0xpbmUoZ2V0
Qm91bmRzKCkueCwgZ2V0Qm91bmRzKCkueSArIGdldEJvdW5kcygpLmhlaWdo dCwKCQkJCQln
ZXRCb3VuZHMoKS54ICsgZ2V0Qm91bmRzKCkud2lkdGggLSAxLCBnZXRCb3Vu ZHMoKS55CgkJ
CQkJCQkrIGdldEJvdW5kcygpLmhlaWdodCk7CgkJCWdjLmRyYXdMaW5lKGdl dEJvdW5kcygp
LnggKyBnZXRCb3VuZHMoKS53aWR0aCAtIDEsIGdldEJvdW5kcygpLnksCgkJ CQkJZ2V0Qm91
bmRzKCkueCArIGdldEJvdW5kcygpLndpZHRoIC0gMSwgZ2V0Qm91bmRzKCku eQoJCQkJCQkJ
KyBnZXRCb3VuZHMoKS5oZWlnaHQpOwoJCX0KCgkJaWYgKGlzQ2VsbEZvY3Vz KCkpIHsKCQkJ
UmVjdGFuZ2xlIGZvY3VzUmVjdCA9IG5ldyBSZWN0YW5nbGUoZ2V0Qm91bmRz KCkueCAtIDEs
CgkJCQkJZ2V0Qm91bmRzKCkueSAtIDEsIGdldEJvdW5kcygpLndpZHRoLAoJ CQkJCWdldEJv
dW5kcygpLmhlaWdodCArIDEpOwoKCQkJZ2Muc2V0Rm9yZWdyb3VuZChnZXRE aXNwbGF5KCku
Z2V0U3lzdGVtQ29sb3IoCgkJCQkJU1dULkNPTE9SX0xJU1RfRk9SRUdST1VO RCkpOwoJCQln
Yy5kcmF3UmVjdGFuZ2xlKGZvY3VzUmVjdCk7CgoJCQlpZiAoaXNGb2N1cygp KSB7CgkJCQlm
b2N1c1JlY3QueCsrOwoJCQkJZm9jdXNSZWN0LndpZHRoIC09IDI7CgkJCQlm b2N1c1JlY3Qu
eSsrOwoJCQkJZm9jdXNSZWN0LmhlaWdodCAtPSAyOwoKCQkJCWdjLmRyYXdS ZWN0YW5nbGUo
Zm9jdXNSZWN0KTsKCQkJfQoJCX0KCX0KCQoJcHJpdmF0ZSBTdHlsZVJhbmdl IHByZXBhcmVT
dHlsZVJhbmdlKFN0eWxlUmFuZ2Ugc3R5bGVSYW5nZSwgYm9vbGVhbiBhcHBs eUNvbG9ycykg
ewoJCS8vIGlmIG5vIGNvbG9ycyBhcHBseSBvciBmb250IGlzIHNldCwgY3Jl YXRlIGEgY2xv
bmUgYW5kIGNsZWFyIHRoZQoJCS8vIGNvbG9ycyBhbmQgZm9udAoJCWlmICgh YXBwbHlDb2xv
cnMgJiYgKHN0eWxlUmFuZ2UuZm9yZWdyb3VuZCAhPSBudWxsIHx8IHN0eWxl UmFuZ2UuYmFj
a2dyb3VuZCAhPSBudWxsKSkgewoJCQlzdHlsZVJhbmdlID0gKFN0eWxlUmFu Z2UpIHN0eWxl
UmFuZ2UuY2xvbmUoKTsKCQkJaWYgKCFhcHBseUNvbG9ycykgewoJCQkJc3R5 bGVSYW5nZS5m
b3JlZ3JvdW5kID0gbnVsbDsKCQkJCXN0eWxlUmFuZ2UuYmFja2dyb3VuZCA9 IG51bGw7CgkJ
CX0KCQl9CgkJcmV0dXJuIHN0eWxlUmFuZ2U7Cgl9CgoJLyoqCgkgKiBDYWxj dWxhdGVzIHRo
ZSBzZXF1ZW5jZSBvZiBicmFuY2ggbGluZXMgd2hpY2ggc2hvdWxkIGJlIHJl bmRlcmVkIGZv
ciB0aGUKCSAqIHByb3ZpZGVkIGl0ZW0KCSAqIAoJICogQHBhcmFtIGl0ZW0K CSAqIEByZXR1
cm4gYW4gYXJyYXkgb2YgaW50ZWdlcnMgY29tcG9zZWQgdXNpbmcgdGhlIGNv bnN0YW50cyBp
bgoJICogICAgICAgICB7QGxpbmsgQnJhbmNoUmVuZGVyZXJ9CgkgKi8KCXBy aXZhdGUgaW50
W10gZ2V0QnJhbmNoZXMoR3JpZEl0ZW0gaXRlbSkgewoJCWludFtdIGJyYW5j aGVzID0gbmV3
IGludFtpdGVtLmdldExldmVsKCkgKyAxXTsKCQlHcmlkSXRlbVtdIHJvb3Rz ID0gaXRlbS5n
ZXRQYXJlbnQoKS5nZXRSb290SXRlbXMoKTsKCgkJLy8gSXMgdGhpcyBhIG5v ZGUgb3IgYSBs
ZWFmPwoJCWlmIChpdGVtLmdldFBhcmVudEl0ZW0oKSA9PSBudWxsKSB7CgkJ CS8vIEFkZCBk
ZXNjZW5kZXIgaWYgbm90IGxhc3QgaXRlbQoJCQlpZiAoIWl0ZW0uaXNFeHBh bmRlZCgpICYm
IHJvb3RzW3Jvb3RzLmxlbmd0aCAtIDFdLmVxdWFscyhpdGVtKSkgewoJCQkJ aWYgKGl0ZW0u
aGFzQ2hpbGRyZW4oKSkKCQkJCQlicmFuY2hlc1tpdGVtLmdldExldmVsKCld ID0gQnJhbmNo
UmVuZGVyZXIuTEFTVF9ST09UOwoJCQkJZWxzZQoJCQkJCWJyYW5jaGVzW2l0 ZW0uZ2V0TGV2
ZWwoKV0gPSBCcmFuY2hSZW5kZXJlci5TTUFMTF9MOwoJCQl9IGVsc2UgewoJ CQkJaWYgKGl0
ZW0uaGFzQ2hpbGRyZW4oKSkKCQkJCQlicmFuY2hlc1tpdGVtLmdldExldmVs KCldID0gQnJh
bmNoUmVuZGVyZXIuUk9PVDsKCQkJCWVsc2UKCQkJCQlicmFuY2hlc1tpdGVt LmdldExldmVs
KCldID0gQnJhbmNoUmVuZGVyZXIuU01BTExfVDsKCQkJfQoKCQl9IGVsc2Ug aWYgKGl0ZW0u
aGFzQ2hpbGRyZW4oKSkKCQkJaWYgKGl0ZW0uaXNFeHBhbmRlZCgpKQoJCQkJ YnJhbmNoZXNb
aXRlbS5nZXRMZXZlbCgpXSA9IEJyYW5jaFJlbmRlcmVyLk5PREU7CgkJCWVs c2UKCQkJCWJy
YW5jaGVzW2l0ZW0uZ2V0TGV2ZWwoKV0gPSBCcmFuY2hSZW5kZXJlci5OT05F OwoJCWVsc2UK
CQkJYnJhbmNoZXNbaXRlbS5nZXRMZXZlbCgpXSA9IEJyYW5jaFJlbmRlcmVy LkxFQUY7CgoJ
CS8vIEJyYW5jaCBmb3IgY3VycmVudCBpdGVtCgkJR3JpZEl0ZW0gcGFyZW50 ID0gaXRlbS5n
ZXRQYXJlbnRJdGVtKCk7CgkJaWYgKHBhcmVudCA9PSBudWxsKQoJCQlyZXR1 cm4gYnJhbmNo
ZXM7CgoJCS8vIEFyZSB0aGVyZSBzaWJsaW5ncyBiZWxvdyB0aGlzIGl0ZW0/ CgkJaWYgKHBh
cmVudC5pbmRleE9mKGl0ZW0pIDwgcGFyZW50LmdldEl0ZW1Db3VudCgpIC0g MSkKCQkJYnJh
bmNoZXNbaXRlbS5nZXRMZXZlbCgpIC0gMV0gPSBCcmFuY2hSZW5kZXJlci5U OwoKCQkvLyBJ
cyB0aGUgbmV4dCBub2RlIGEgcm9vdD8KCQllbHNlIGlmIChwYXJlbnQuZ2V0 UGFyZW50SXRl
bSgpID09IG51bGwKCQkJCSYmICFwYXJlbnQuZXF1YWxzKHJvb3RzW3Jvb3Rz Lmxlbmd0aCAt
IDFdKSkKCQkJYnJhbmNoZXNbaXRlbS5nZXRMZXZlbCgpIC0gMV0gPSBCcmFu Y2hSZW5kZXJl
ci5UOwoKCQkvLyBUaGlzIG11c3QgYmUgdGhlIGxhc3QgZWxlbWVudCBhdCB0 aGlzIGxldmVs
CgkJZWxzZQoJCQlicmFuY2hlc1tpdGVtLmdldExldmVsKCkgLSAxXSA9IEJy YW5jaFJlbmRl
cmVyLkw7CgoJCUdyaWQgZ3JpZCA9IGl0ZW0uZ2V0UGFyZW50KCk7CgkJaXRl bSA9IHBhcmVu
dDsKCQlwYXJlbnQgPSBpdGVtLmdldFBhcmVudEl0ZW0oKTsKCgkJLy8gQnJh bmNoZXMgZm9y
IHBhcmVudCBpdGVtcwoJCXdoaWxlIChpdGVtLmdldExldmVsKCkgPiAwKSB7 CgkJCWlmIChw
YXJlbnQuaW5kZXhPZihpdGVtKSA9PSBwYXJlbnQuZ2V0SXRlbUNvdW50KCkg LSAxKSB7CgkJ
CQlpZiAocGFyZW50LmdldFBhcmVudEl0ZW0oKSA9PSBudWxsCgkJCQkJCSYm ICFncmlkLmdl
dFJvb3RJdGVtKGdyaWQuZ2V0Um9vdEl0ZW1Db3VudCgpIC0gMSkKCQkJCQkJ CQkuZXF1YWxz
KHBhcmVudCkpCgkJCQkJYnJhbmNoZXNbaXRlbS5nZXRMZXZlbCgpIC0gMV0g PSBCcmFuY2hS
ZW5kZXJlci5JOwoJCQkJZWxzZQoJCQkJCWJyYW5jaGVzW2l0ZW0uZ2V0TGV2 ZWwoKSAtIDFd
ID0gQnJhbmNoUmVuZGVyZXIuTk9ORTsKCQkJfSBlbHNlCgkJCQlicmFuY2hl c1tpdGVtLmdl
dExldmVsKCkgLSAxXSA9IEJyYW5jaFJlbmRlcmVyLkk7CgkJCWl0ZW0gPSBw YXJlbnQ7CgkJ
CXBhcmVudCA9IGl0ZW0uZ2V0UGFyZW50SXRlbSgpOwoJCX0KCQkvLyBpdGVt IHNob3VsZCBi
ZSBudWxsIGF0IHRoaXMgcG9pbnQKCQlyZXR1cm4gYnJhbmNoZXM7Cgl9CgoJ LyoqCgkgKiB7
QGluaGVyaXREb2N9CgkgKi8KCXB1YmxpYyBQb2ludCBjb21wdXRlU2l6ZShH QyBnYywgaW50
IHdIaW50LCBpbnQgaEhpbnQsIE9iamVjdCB2YWx1ZSkgewoJCUdyaWRJdGVt IGl0ZW0gPSAo
R3JpZEl0ZW0pIHZhbHVlOwoKCQlnYy5zZXRGb250KGl0ZW0uZ2V0Rm9udChn ZXRDb2x1bW4o
KSkpOwoKCQlpbnQgeCA9IDA7CgoJCXggKz0gbGVmdE1hcmdpbjsKCgkJaWYg KGlzVHJlZSgp
KSB7CgkJCXggKz0gZ2V0VG9nZ2xlSW5kZW50KGl0ZW0pOwoKCQkJeCArPSB0 b2dnbGVSZW5k
ZXJlci5nZXRCb3VuZHMoKS53aWR0aCArIGluc2lkZU1hcmdpbjsKCgkJfQoK CQlpZiAoaXND
aGVjaygpKSB7CgkJCXggKz0gY2hlY2tSZW5kZXJlci5nZXRCb3VuZHMoKS53 aWR0aCArIGlu
c2lkZU1hcmdpbjsKCQl9CgoJCWludCB5ID0gMDsKCgkJSW1hZ2UgaW1hZ2Ug PSBpdGVtLmdl
dEltYWdlKGdldENvbHVtbigpKTsKCQlpZiAoaW1hZ2UgIT0gbnVsbCkgewoJ CQl5ID0gdG9w
TWFyZ2luICsgaW1hZ2UuZ2V0Qm91bmRzKCkuaGVpZ2h0ICsgYm90dG9tTWFy Z2luOwoKCQkJ
eCArPSBpbWFnZS5nZXRCb3VuZHMoKS53aWR0aCArIGluc2lkZU1hcmdpbjsK CQl9CgoJCS8v
IE1PUFItRE5ECgkJLy8gTU9QUjogcmVwbGFjZWQgdGhpcyBjb2RlICh0byBn ZXQgY29ycmVj
dCBwcmVmZXJyZWQgaGVpZ2h0IGZvciBjZWxscwoJCS8vIGluIHdvcmQtd3Jh cCBjb2x1bW5z
KQoJCS8vCgkJLy8geCArPSBnYy5zdHJpbmdFeHRlbnQoaXRlbS5nZXRUZXh0 KGdldENvbHVt
bigpKSkueCArIHJpZ2h0TWFyZ2luOwoJCS8vCgkJLy8geSA9IE1hdGgubWF4 KHksdG9wTWFy
Z2luICsgZ2MuZ2V0Rm9udE1ldHJpY3MoKS5nZXRIZWlnaHQoKSArCgkJLy8g Ym90dG9tTWFy
Z2luKTsKCQkvLwoJCS8vIHdpdGggdGhpcyBjb2RlOgoKCQlpbnQgdGV4dEhl aWdodCA9IDA7
CgkJaWYgKCFpc1dvcmRXcmFwKCkpIHsKCQkJeCArPSBnYy50ZXh0RXh0ZW50 KGl0ZW0uZ2V0
VGV4dChnZXRDb2x1bW4oKSkpLnggKyByaWdodE1hcmdpbjsKCgkJCXRleHRI ZWlnaHQgPSB0
b3BNYXJnaW4gKyB0ZXh0VG9wTWFyZ2luCgkJCQkJKyBnYy5nZXRGb250TWV0 cmljcygpLmdl
dEhlaWdodCgpICsgdGV4dEJvdHRvbU1hcmdpbgoJCQkJCSsgYm90dG9tTWFy Z2luOwoJCX0g
ZWxzZSB7CgkJCWludCBwbGFpblRleHRXaWR0aDsKCQkJaWYgKHdIaW50ID09 IFNXVC5ERUZB
VUxUKQoJCQkJcGxhaW5UZXh0V2lkdGggPSBnYy50ZXh0RXh0ZW50KGl0ZW0u Z2V0VGV4dChn
ZXRDb2x1bW4oKSkpLng7CgkJCWVsc2UKCQkJCXBsYWluVGV4dFdpZHRoID0g d0hpbnQgLSB4
IC0gcmlnaHRNYXJnaW47CgoJCQlUZXh0TGF5b3V0IGN1cnJUZXh0TGF5b3V0 ID0gbmV3IFRl
eHRMYXlvdXQoZ2MuZ2V0RGV2aWNlKCkpOwoJCQljdXJyVGV4dExheW91dC5z ZXRGb250KGdj
LmdldEZvbnQoKSk7CgkJCWN1cnJUZXh0TGF5b3V0LnNldFRleHQoaXRlbS5n ZXRUZXh0KGdl
dENvbHVtbigpKSk7CgkJCWN1cnJUZXh0TGF5b3V0LnNldEFsaWdubWVudChn ZXRBbGlnbm1l
bnQoKSk7CgkJCWN1cnJUZXh0TGF5b3V0LnNldFdpZHRoKHBsYWluVGV4dFdp ZHRoIDwgMSA/
IDEgOiBwbGFpblRleHRXaWR0aCk7CgoJCQl4ICs9IHBsYWluVGV4dFdpZHRo ICsgcmlnaHRN
YXJnaW47CgoJCQl0ZXh0SGVpZ2h0ICs9IHRvcE1hcmdpbiArIHRleHRUb3BN YXJnaW47CgkJ
CWZvciAoaW50IGNudCA9IDA7IGNudCA8IGN1cnJUZXh0TGF5b3V0LmdldExp bmVDb3VudCgp
OyBjbnQrKykKCQkJCXRleHRIZWlnaHQgKz0gY3VyclRleHRMYXlvdXQuZ2V0 TGluZUJvdW5k
cyhjbnQpLmhlaWdodDsKCQkJdGV4dEhlaWdodCArPSB0ZXh0Qm90dG9tTWFy Z2luICsgYm90
dG9tTWFyZ2luOwoKCQkJY3VyclRleHRMYXlvdXQuZGlzcG9zZSgpOwoJCX0K CgkJeSA9IE1h
dGgubWF4KHksIHRleHRIZWlnaHQpOwoKCQlyZXR1cm4gbmV3IFBvaW50KHgs IHkpOwoJfQoK
CS8qKgoJICoge0Bpbmhlcml0RG9jfQoJICovCglwdWJsaWMgYm9vbGVhbiBu b3RpZnkoaW50
IGV2ZW50LCBQb2ludCBwb2ludCwgT2JqZWN0IHZhbHVlKSB7CgoJCUdyaWRJ dGVtIGl0ZW0g
PSAoR3JpZEl0ZW0pIHZhbHVlOwoKCQlpZiAoaXNDaGVjaygpKSB7CgkJCWlm IChldmVudCA9
PSBJSW50ZXJuYWxXaWRnZXQuTW91c2VNb3ZlKSB7CgkJCQlpZiAob3ZlckNo ZWNrKGl0ZW0s
IHBvaW50KSkgewoJCQkJCXNldEhvdmVyRGV0YWlsKCJjaGVjayIpOwoJCQkJ CXJldHVybiB0
cnVlOwoJCQkJfQoJCQl9CgoJCQlpZiAoZXZlbnQgPT0gSUludGVybmFsV2lk Z2V0LkxlZnRN
b3VzZUJ1dHRvbkRvd24pIHsKCQkJCWlmIChvdmVyQ2hlY2soaXRlbSwgcG9p bnQpKSB7CgkJ
CQkJaWYgKCFpdGVtLmdldENoZWNrYWJsZShnZXRDb2x1bW4oKSkpIHsKCQkJ CQkJcmV0dXJu
IGZhbHNlOwoJCQkJCX0KCgkJCQkJaXRlbS5zZXRDaGVja2VkKGdldENvbHVt bigpLCAhaXRl
bS5nZXRDaGVja2VkKGdldENvbHVtbigpKSk7CgkJCQkJaXRlbS5nZXRQYXJl bnQoKS5yZWRy
YXcoKTsKCgkJCQkJaXRlbS5maXJlQ2hlY2tFdmVudChnZXRDb2x1bW4oKSk7 CgoJCQkJCXJl
dHVybiB0cnVlOwoJCQkJfQoJCQl9CgkJfQoKCQlpZiAoaXNUcmVlKCkgJiYg aXRlbS5oYXND
aGlsZHJlbigpKSB7CgkJCWlmIChldmVudCA9PSBJSW50ZXJuYWxXaWRnZXQu TW91c2VNb3Zl
KSB7CgkJCQlpZiAob3ZlclRvZ2dsZShpdGVtLCBwb2ludCkpIHsKCQkJCQlz ZXRIb3ZlckRl
dGFpbCgidG9nZ2xlIik7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJCX0K CgkJCWlmIChl
dmVudCA9PSBJSW50ZXJuYWxXaWRnZXQuTGVmdE1vdXNlQnV0dG9uRG93bikg ewoJCQkJaWYg
KG92ZXJUb2dnbGUoaXRlbSwgcG9pbnQpKSB7CgkJCQkJaXRlbS5zZXRFeHBh bmRlZCghaXRl
bS5pc0V4cGFuZGVkKCkpOwoJCQkJCWl0ZW0uZ2V0UGFyZW50KCkucmVkcmF3 KCk7CgoJCQkJ
CWlmIChpdGVtLmlzRXhwYW5kZWQoKSkgewoJCQkJCQlpdGVtLmZpcmVFdmVu dChTV1QuRXhw
YW5kKTsKCQkJCQl9IGVsc2UgewoJCQkJCQlpdGVtLmZpcmVFdmVudChTV1Qu Q29sbGFwc2Up
OwoJCQkJCX0KCgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJCX0KCQl9CgoJ CXJldHVybiBm
YWxzZTsKCX0KCglwcml2YXRlIGJvb2xlYW4gb3ZlckNoZWNrKEdyaWRJdGVt IGl0ZW0sIFBv
aW50IHBvaW50KSB7CgkJaWYgKGlzQ2VudGVyZWRDaGVja0JveE9ubHkoaXRl bSkpIHsKCQkJ
cG9pbnQgPSBuZXcgUG9pbnQocG9pbnQueCwgcG9pbnQueSk7CgkJCXBvaW50 LnggLT0gZ2V0
Qm91bmRzKCkueDsKCQkJcG9pbnQueSAtPSBnZXRCb3VuZHMoKS55OwoKCQkJ UmVjdGFuZ2xl
IGNoZWNrQm91bmRzID0gbmV3IFJlY3RhbmdsZSgwLCAwLCAwLCAwKTsKCQkJ Y2hlY2tCb3Vu
ZHMueCA9IChnZXRCb3VuZHMoKS53aWR0aCAtIGNoZWNrUmVuZGVyZXIuZ2V0 Qm91bmRzKCku
d2lkdGgpIC8gMjsKCQkJY2hlY2tCb3VuZHMueSA9ICgoZ2V0Qm91bmRzKCku aGVpZ2h0IC0g
Y2hlY2tSZW5kZXJlci5nZXRCb3VuZHMoKS5oZWlnaHQpIC8gMik7CgkJCWNo ZWNrQm91bmRz
LndpZHRoID0gY2hlY2tSZW5kZXJlci5nZXRCb3VuZHMoKS53aWR0aDsKCQkJ Y2hlY2tCb3Vu
ZHMuaGVpZ2h0ID0gY2hlY2tSZW5kZXJlci5nZXRCb3VuZHMoKS5oZWlnaHQ7 CgoJCQlyZXR1
cm4gY2hlY2tCb3VuZHMuY29udGFpbnMocG9pbnQpOwoJCX0gZWxzZSB7CgkJ CXBvaW50ID0g
bmV3IFBvaW50KHBvaW50LngsIHBvaW50LnkpOwoJCQlwb2ludC54IC09IGdl dEJvdW5kcygp
Lng7CgkJCXBvaW50LnkgLT0gZ2V0Qm91bmRzKCkueTsKCgkJCWludCB4ID0g bGVmdE1hcmdp
bjsKCQkJaWYgKGlzVHJlZSgpKSB7CgkJCQl4ICs9IGdldFRvZ2dsZUluZGVu dChpdGVtKTsK
CQkJCXggKz0gdG9nZ2xlUmVuZGVyZXIuZ2V0U2l6ZSgpLnggKyBpbnNpZGVN YXJnaW47CgkJ
CX0KCgkJCWlmIChwb2ludC54ID49IHggJiYgcG9pbnQueCA8ICh4ICsgY2hl Y2tSZW5kZXJl
ci5nZXRTaXplKCkueCkpIHsKCQkJCWludCB5U3RhcnQgPSAoKGdldEJvdW5k cygpLmhlaWdo
dCAtIGNoZWNrUmVuZGVyZXIuZ2V0Qm91bmRzKCkuaGVpZ2h0KSAvIDIpOwoJ CQkJaWYgKHBv
aW50LnkgPj0geVN0YXJ0CgkJCQkJCSYmIHBvaW50LnkgPCB5U3RhcnQgKyBj aGVja1JlbmRl
cmVyLmdldFNpemUoKS55KSB7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJ CX0KCgkJCXJl
dHVybiBmYWxzZTsKCQl9Cgl9CgoJcHJpdmF0ZSBpbnQgZ2V0VG9nZ2xlSW5k ZW50KEdyaWRJ
dGVtIGl0ZW0pIHsKCQlyZXR1cm4gaXRlbS5nZXRMZXZlbCgpICogdHJlZUlu ZGVudDsKCX0K
Cglwcml2YXRlIGJvb2xlYW4gb3ZlclRvZ2dsZShHcmlkSXRlbSBpdGVtLCBQ b2ludCBwb2lu
dCkgewoKCQlwb2ludCA9IG5ldyBQb2ludChwb2ludC54LCBwb2ludC55KTsK CgkJcG9pbnQu
eCAtPSBnZXRCb3VuZHMoKS54IC0gMTsKCQlwb2ludC55IC09IGdldEJvdW5k cygpLnkgLSAx
OwoKCQlpbnQgeCA9IGxlZnRNYXJnaW47CgkJeCArPSBnZXRUb2dnbGVJbmRl bnQoaXRlbSk7
CgoJCWlmIChwb2ludC54ID49IHggJiYgcG9pbnQueCA8ICh4ICsgdG9nZ2xl UmVuZGVyZXIu
Z2V0U2l6ZSgpLngpKSB7CgkJCS8vIHJldHVybiB0cnVlOwoJCQlpbnQgeVN0 YXJ0ID0gKChn
ZXRCb3VuZHMoKS5oZWlnaHQgLSB0b2dnbGVSZW5kZXJlci5nZXRCb3VuZHMo KS5oZWlnaHQp
IC8gMik7CgkJCWlmIChwb2ludC55ID49IHlTdGFydAoJCQkJCSYmIHBvaW50 LnkgPCB5U3Rh
cnQgKyB0b2dnbGVSZW5kZXJlci5nZXRTaXplKCkueSkgewoJCQkJcmV0dXJu IHRydWU7CgkJ
CX0KCQl9CgoJCXJldHVybiBmYWxzZTsKCX0KCgkvKioKCSAqIHtAaW5oZXJp dERvY30KCSAq
LwoJcHVibGljIHZvaWQgc2V0VHJlZShib29sZWFuIHRyZWUpIHsKCQlzdXBl ci5zZXRUcmVl
KHRyZWUpOwoKCQlpZiAodHJlZSkgewoJCQl0b2dnbGVSZW5kZXJlciA9IG5l dyBUb2dnbGVS
ZW5kZXJlcigpOwoJCQl0b2dnbGVSZW5kZXJlci5zZXREaXNwbGF5KGdldERp c3BsYXkoKSk7
CgoJCQlicmFuY2hSZW5kZXJlciA9IG5ldyBCcmFuY2hSZW5kZXJlcigpOwoJ CQlicmFuY2hS
ZW5kZXJlci5zZXREaXNwbGF5KGdldERpc3BsYXkoKSk7CgkJfQoJfQoKCS8q KgoJICoge0Bp
bmhlcml0RG9jfQoJICovCglwdWJsaWMgdm9pZCBzZXRDaGVjayhib29sZWFu IGNoZWNrKSB7
CgkJc3VwZXIuc2V0Q2hlY2soY2hlY2spOwoKCQlpZiAoY2hlY2spIHsKCQkJ Y2hlY2tSZW5k
ZXJlciA9IG5ldyBDaGVja0JveFJlbmRlcmVyKCk7CgkJCWNoZWNrUmVuZGVy ZXIuc2V0RGlz
cGxheShnZXREaXNwbGF5KCkpOwoJCX0gZWxzZSB7CgkJCWNoZWNrUmVuZGVy ZXIgPSBudWxs
OwoJCX0KCX0KCgkvKioKCSAqIHtAaW5oZXJpdERvY30KCSAqLwoJcHVibGlj IFJlY3Rhbmds
ZSBnZXRUZXh0Qm91bmRzKEdyaWRJdGVtIGl0ZW0sIGJvb2xlYW4gcHJlZmVy cmVkKSB7CgkJ
aW50IHggPSBsZWZ0TWFyZ2luOwoKCQlpZiAoaXNUcmVlKCkpIHsKCQkJeCAr PSBnZXRUb2dn
bGVJbmRlbnQoaXRlbSk7CgoJCQl4ICs9IHRvZ2dsZVJlbmRlcmVyLmdldEJv dW5kcygpLndp
ZHRoICsgaW5zaWRlTWFyZ2luOwoKCQl9CgoJCWlmIChpc0NoZWNrKCkpIHsK CQkJeCArPSBj
aGVja1JlbmRlcmVyLmdldEJvdW5kcygpLndpZHRoICsgaW5zaWRlTWFyZ2lu OwoJCX0KCgkJ
SW1hZ2UgaW1hZ2UgPSBpdGVtLmdldEltYWdlKGdldENvbHVtbigpKTsKCQlp ZiAoaW1hZ2Ug
IT0gbnVsbCkgewoJCQl4ICs9IGltYWdlLmdldEJvdW5kcygpLndpZHRoICsg aW5zaWRlTWFy
Z2luOwoJCX0KCgkJUmVjdGFuZ2xlIGJvdW5kcyA9IG5ldyBSZWN0YW5nbGUo eCwgdG9wTWFy
Z2luICsgdGV4dFRvcE1hcmdpbiwgMCwgMCk7CgoJCUdDIGdjID0gbmV3IEdD KGl0ZW0uZ2V0
UGFyZW50KCkpOwoJCWdjLnNldEZvbnQoaXRlbS5nZXRGb250KGdldENvbHVt bigpKSk7CgkJ
UG9pbnQgc2l6ZSA9IGdjLnN0cmluZ0V4dGVudChpdGVtLmdldFRleHQoZ2V0 Q29sdW1uKCkp
KTsKCgkJYm91bmRzLmhlaWdodCA9IHNpemUueTsKCgkJaWYgKHByZWZlcnJl ZCkgewoJCQli
b3VuZHMud2lkdGggPSBzaXplLnggLSAxOwoJCX0gZWxzZSB7CgkJCWJvdW5k cy53aWR0aCA9
IGdldEJvdW5kcygpLndpZHRoIC0geCAtIHJpZ2h0TWFyZ2luOwoJCX0KCgkJ Z2MuZGlzcG9z
ZSgpOwoKCQlyZXR1cm4gYm91bmRzOwoJfQoKCXByaXZhdGUgYm9vbGVhbiBp c0NlbnRlcmVk
Q2hlY2tCb3hPbmx5KEdyaWRJdGVtIGl0ZW0pIHsKCQlyZXR1cm4gIWlzVHJl ZSgpICYmIGl0
ZW0uZ2V0SW1hZ2UoZ2V0Q29sdW1uKCkpID09IG51bGwKCQkJCSYmIGl0ZW0u Z2V0VGV4dChn
ZXRDb2x1bW4oKSkuZXF1YWxzKCIiKQoJCQkJJiYgZ2V0QWxpZ25tZW50KCkg PT0gU1dULkNF
TlRFUjsKCX0KfQ==
--------------010204030502090506010102--
Re: Grid and StyledCellLabelProvider [message #62752 is a reply to message #62704] Tue, 17 February 2009 13:31 Go to previous message
Christian Hauser is currently offline Christian Hauser
Messages: 189
Registered: July 2009
Senior Member
Hi Tom

I'm using a StyledCellLabelProvider, which is not a
IStyledLabelProvider, but thank you anyway. I think I can handle it now,
well, I'll have a look at it and try to adapt it somehow.

Thank you for your help and time!

Christian


Tom Schindl wrote:
> Hi,
>
> No. We don't support this but it should quite easy for you to implement
> a CellRenderer which uses a StyledString and renderer it.
>
> Attached to this mail you'll find a completely untested (I only wrote
> the code renderer) class but you should get the idea. Always remember
> when using the Grid you are in the position of drawing everything
> yourself and you are not restricted to the bounds of the native widget.
>
> Tom
>
> Christian Hauser schrieb:
>
>> Hi all,
>>
>> I've been using a normal JFace TableViewer for an editable table.
>> However, I had to switch to GridTableViewer, because the customer needs
>> wrapping of the text within cells.
>>
>> The problem I'm facing now is that my StyledCellLabelProvider that
>> highlights text is not working with Grid. Am I missing something or is
>> this rather new feature (Eclipse 3.4) not yet supported on Grid?
>>
>> Thanks in advance for any help,
>> Christian
>>
>
>
>
Re: Grid and StyledCellLabelProvider [message #593625 is a reply to message #62677] Tue, 17 February 2009 09:17 Go to previous message
Thomas Schindl is currently offline Thomas Schindl
Messages: 5406
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------010204030502090506010102
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

Hi,

No. We don't support this but it should quite easy for you to implement
a CellRenderer which uses a StyledString and renderer it.

Attached to this mail you'll find a completely untested (I only wrote
the code renderer) class but you should get the idea. Always remember
when using the Grid you are in the position of drawing everything
yourself and you are not restricted to the bounds of the native widget.

Tom

Christian Hauser schrieb:
> Hi all,
>
> I've been using a normal JFace TableViewer for an editable table.
> However, I had to switch to GridTableViewer, because the customer needs
> wrapping of the text within cells.
>
> The problem I'm facing now is that my StyledCellLabelProvider that
> highlights text is not working with Grid. Am I missing something or is
> this rather new feature (Eclipse 3.4) not yet supported on Grid?
>
> Thanks in advance for any help,
> Christian


--
B e s t S o l u t i o n . at
------------------------------------------------------------ --------
Tom Schindl JFace-Committer
------------------------------------------------------------ --------

--------------010204030502090506010102
Content-Type: text/plain;
name="StyledTextCellRenderer.java"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="StyledTextCellRenderer.java"

LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAy MDA2IElCTSBD
b3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVk LiBUaGlzIHBy
b2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBt YWRlIGF2YWls
YWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExp Y2Vuc2UgdjEu
MAogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5k IGlzIGF2YWls
YWJsZSBhdAogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12 MTAuaHRtbAog
KgogKiBDb250cmlidXRvcnM6CiAqICAgIGNocmlzLmdyb3NzQHVzLmlibS5j b20gLSBpbml0
aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICoqKioqKioqKioqKioqKioq KioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiov
CnBhY2thZ2Ugb3JnLmVjbGlwc2UubmVidWxhLmpmYWNlLmdyaWR2aWV3ZXI7 CgppbXBvcnQg
b3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5WaWV3ZXI7CmltcG9y dCBvcmcuZWNs
aXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlcjsKaW1wb3J0 IG9yZy5lY2xp
cHNlLmpmYWNlLnZpZXdlcnMuU3R5bGVkU3RyaW5nOwppbXBvcnQgb3JnLmVj bGlwc2UuamZh
Y2Uudmlld2Vycy5WaWV3ZXJDZWxsOwppbXBvcnQgb3JnLmVjbGlwc2UuamZh Y2Uudmlld2Vy
cy5WaWV3ZXJDb2x1bW47CmltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3 ZXJzLlZpZXdl
clJvdzsKaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuRGVsZWdh dGluZ1N0eWxl
ZENlbGxMYWJlbFByb3ZpZGVyLklTdHlsZWRMYWJlbFByb3ZpZGVyOwppbXBv cnQgb3JnLmVj
bGlwc2UubmVidWxhLndpZGdldHMuZ3JpZC5HcmlkOwppbXBvcnQgb3JnLmVj bGlwc2UubmVi
dWxhLndpZGdldHMuZ3JpZC5HcmlkQ2VsbFJlbmRlcmVyOwppbXBvcnQgb3Jn LmVjbGlwc2Uu
bmVidWxhLndpZGdldHMuZ3JpZC5HcmlkSXRlbTsKaW1wb3J0IG9yZy5lY2xp cHNlLm5lYnVs
YS53aWRnZXRzLmdyaWQuSUludGVybmFsV2lkZ2V0OwppbXBvcnQgb3JnLmVj bGlwc2UubmVi
dWxhLndpZGdldHMuZ3JpZC5pbnRlcm5hbC5CcmFuY2hSZW5kZXJlcjsKaW1w b3J0IG9yZy5l
Y2xpcHNlLm5lYnVsYS53aWRnZXRzLmdyaWQuaW50ZXJuYWwuQ2hlY2tCb3hS ZW5kZXJlcjsK
aW1wb3J0IG9yZy5lY2xpcHNlLm5lYnVsYS53aWRnZXRzLmdyaWQuaW50ZXJu YWwuVGV4dFV0
aWxzOwppbXBvcnQgb3JnLmVjbGlwc2UubmVidWxhLndpZGdldHMuZ3JpZC5p bnRlcm5hbC5U
b2dnbGVSZW5kZXJlcjsKaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Cmlt cG9ydCBvcmcu
ZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlUmFuZ2U7CmltcG9ydCBvcmcuZWNs aXBzZS5zd3Qu
ZXZlbnRzLkRpc3Bvc2VFdmVudDsKaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5l dmVudHMuRGlz
cG9zZUxpc3RlbmVyOwppbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNz LkNvbG9yOwpp
bXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOwppbXBvcnQgb3Jn LmVjbGlwc2Uu
c3d0LmdyYXBoaWNzLkltYWdlOwppbXBvcnQgb3JnLmVjbGlwc2Uuc3d0Lmdy YXBoaWNzLlBv
aW50OwppbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3Rhbmds ZTsKaW1wb3J0
IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5UZXh0TGF5b3V0OwoKLyoqCiAq IFRoZSByZW5k
ZXJlciBmb3IgYSBjZWxsIGluIEdyaWQuCiAqIAogKiBAYXV0aG9yIGNocmlz Lmdyb3NzQHVz
LmlibS5jb20KICogQHNpbmNlIDIuMC4wCiAqLwpwdWJsaWMgY2xhc3MgU3R5 bGVkVGV4dENl
bGxSZW5kZXJlciBleHRlbmRzIEdyaWRDZWxsUmVuZGVyZXIgewoKCWludCBs ZWZ0TWFyZ2lu
ID0gNDsKCglpbnQgcmlnaHRNYXJnaW4gPSA0OwoKCWludCB0b3BNYXJnaW4g PSAwOwoKCWlu
dCBib3R0b21NYXJnaW4gPSAwOwoKCWludCB0ZXh0VG9wTWFyZ2luID0gMTsK CglpbnQgdGV4
dEJvdHRvbU1hcmdpbiA9IDI7CgoJcHJpdmF0ZSBpbnQgaW5zaWRlTWFyZ2lu ID0gMzsKCglp
bnQgdHJlZUluZGVudCA9IDIwOwoKCXByaXZhdGUgVG9nZ2xlUmVuZGVyZXIg dG9nZ2xlUmVu
ZGVyZXI7CgoJcHJpdmF0ZSBCcmFuY2hSZW5kZXJlciBicmFuY2hSZW5kZXJl cjsKCglwcml2
YXRlIENoZWNrQm94UmVuZGVyZXIgY2hlY2tSZW5kZXJlcjsKCglwcml2YXRl IFRleHRMYXlv
dXQgdGV4dExheW91dDsKCglwcml2YXRlIEdyaWRUYWJsZVZpZXdlciB2aWV3 ZXI7CgoJLyoq
CgkgKiBBIG5ldyBjZWxsIHJlbmRlcmVyIGluc3RhbmNlIGFibGUgdG8gZGVh bCB3aXRoIHN0
eWxlZCB0ZXh0IGluZm9ybWF0aW9uCgkgKiAKCSAqIEBwYXJhbSB2aWV3ZXIK CSAqICAgICAg
ICAgICAgdGhlIHZpZXdlcgoJICovCglwdWJsaWMgU3R5bGVkVGV4dENlbGxS ZW5kZXJlcihH
cmlkVGFibGVWaWV3ZXIgdmlld2VyKSB7CgkJdGhpcy52aWV3ZXIgPSB2aWV3 ZXI7Cgl9CgoJ
LyoqCgkgKiB7QGluaGVyaXREb2N9CgkgKi8KCXB1YmxpYyB2b2lkIHBhaW50 KEdDIGdjLCBP
YmplY3QgdmFsdWUpIHsKCQlHcmlkSXRlbSBpdGVtID0gKEdyaWRJdGVtKSB2 YWx1ZTsKCgkJ
Z2Muc2V0Rm9udChpdGVtLmdldEZvbnQoZ2V0Q29sdW1uKCkpKTsKCgkJYm9v bGVhbiBkcmF3
QXNTZWxlY3RlZCA9IGlzU2VsZWN0ZWQoKTsKCgkJYm9vbGVhbiBkcmF3QmFj a2dyb3VuZCA9
IHRydWU7CgoJCWlmIChpc0NlbGxTZWxlY3RlZCgpKSB7CgkJCWRyYXdBc1Nl bGVjdGVkID0g
dHJ1ZTsvLyAoIWlzQ2VsbEZvY3VzKCkpOwoJCX0KCgkJaWYgKGRyYXdBc1Nl bGVjdGVkKSB7
CgkJCWdjLnNldEJhY2tncm91bmQoZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNv bG9yKAoJCQkJ
CVNXVC5DT0xPUl9MSVNUX1NFTEVDVElPTikpOwoJCQlnYy5zZXRGb3JlZ3Jv dW5kKGdldERp
c3BsYXkoKS5nZXRTeXN0ZW1Db2xvcigKCQkJCQlTV1QuQ09MT1JfTElTVF9T RUxFQ1RJT05f
VEVYVCkpOwoJCX0gZWxzZSB7CgkJCWlmIChpdGVtLmdldFBhcmVudCgpLmlz RW5hYmxlZCgp
KSB7CgkJCQlDb2xvciBiYWNrID0gaXRlbS5nZXRCYWNrZ3JvdW5kKGdldENv bHVtbigpKTsK
CgkJCQlpZiAoYmFjayAhPSBudWxsKSB7CgkJCQkJZ2Muc2V0QmFja2dyb3Vu ZChiYWNrKTsK
CQkJCX0gZWxzZSB7CgkJCQkJZHJhd0JhY2tncm91bmQgPSBmYWxzZTsKCQkJ CX0KCQkJfSBl
bHNlIHsKCQkJCWdjLnNldEJhY2tncm91bmQoZ2V0RGlzcGxheSgpLmdldFN5 c3RlbUNvbG9y
KAoJCQkJCQlTV1QuQ09MT1JfV0lER0VUX0JBQ0tHUk9VTkQpKTsKCQkJfQoJ CQlnYy5zZXRG
b3JlZ3JvdW5kKGl0ZW0uZ2V0Rm9yZWdyb3VuZChnZXRDb2x1bW4oKSkpOwoJ CX0KCgkJaWYg
KGRyYXdCYWNrZ3JvdW5kKQoJCQlnYy5maWxsUmVjdGFuZ2xlKGdldEJvdW5k cygpLngsIGdl
dEJvdW5kcygpLnksIGdldEJvdW5kcygpLndpZHRoLAoJCQkJCWdldEJvdW5k cygpLmhlaWdo
dCk7CgoJCWludCB4ID0gbGVmdE1hcmdpbjsKCgkJaWYgKGlzVHJlZSgpKSB7 CgkJCWJvb2xl
YW4gcmVuZGVyQnJhbmNoZXMgPSBpdGVtLmdldFBhcmVudCgpLmdldFRyZWVM aW5lc1Zpc2li
bGUoKTsKCQkJaWYgKHJlbmRlckJyYW5jaGVzKSB7CgkJCQlicmFuY2hSZW5k ZXJlci5zZXRC
cmFuY2hlcyhnZXRCcmFuY2hlcyhpdGVtKSk7CgkJCQlicmFuY2hSZW5kZXJl ci5zZXRJbmRl
bnQodHJlZUluZGVudCk7CgkJCQlicmFuY2hSZW5kZXJlci5zZXRCb3VuZHMo Z2V0Qm91bmRz
KCkueCArIHgsIGdldEJvdW5kcygpLnksCgkJCQkJCWdldFRvZ2dsZUluZGVu dChpdGVtKSwg
Z2V0Qm91bmRzKCkuaGVpZ2h0ICsgMSk7IC8vIFRha2UKCQkJCQkJCQkJCQkJ CQkJCQkJLy8g
aW50bwoJCQkJCQkJCQkJCQkJCQkJCQkvLyBhY2NvdW50CgkJCQkJCQkJCQkJ CQkJCQkJCS8v
IGJvcmRlcgoJCQl9CgoJCQl4ICs9IGdldFRvZ2dsZUluZGVudChpdGVtKTsK CgkJCXRvZ2ds
ZVJlbmRlcmVyLnNldEV4cGFuZGVkKGl0ZW0uaXNFeHBhbmRlZCgpKTsKCgkJ CXRvZ2dsZVJl
bmRlcmVyLnNldEhvdmVyKGdldEhvdmVyRGV0YWlsKCkuZXF1YWxzKCJ0b2dn bGUiKSk7CgoJ
CQl0b2dnbGVSZW5kZXJlci5zZXRMb2NhdGlvbihnZXRCb3VuZHMoKS54ICsg eCwKCQkJCQko
Z2V0Qm91bmRzKCkuaGVpZ2h0IC0gdG9nZ2xlUmVuZGVyZXIuZ2V0Qm91bmRz KCkuaGVpZ2h0
KQoJCQkJCQkJLyAyICsgZ2V0Qm91bmRzKCkueSk7CgkJCWlmIChpdGVtLmhh c0NoaWxkcmVu
KCkpCgkJCQl0b2dnbGVSZW5kZXJlci5wYWludChnYywgbnVsbCk7CgoJCQlp ZiAocmVuZGVy
QnJhbmNoZXMpIHsKCQkJCWJyYW5jaFJlbmRlcmVyLnNldFRvZ2dsZUJvdW5k cyh0b2dnbGVS
ZW5kZXJlci5nZXRCb3VuZHMoKSk7CgkJCQlicmFuY2hSZW5kZXJlci5wYWlu dChnYywgbnVs
bCk7CgkJCX0KCgkJCXggKz0gdG9nZ2xlUmVuZGVyZXIuZ2V0Qm91bmRzKCku d2lkdGggKyBp
bnNpZGVNYXJnaW47CgoJCX0KCgkJaWYgKGlzQ2hlY2soKSkgewoJCQljaGVj a1JlbmRlcmVy
LnNldENoZWNrZWQoaXRlbS5nZXRDaGVja2VkKGdldENvbHVtbigpKSk7CgkJ CWNoZWNrUmVu
ZGVyZXIuc2V0R3JheWVkKGl0ZW0uZ2V0R3JheWVkKGdldENvbHVtbigpKSk7 CgkJCWlmICgh
aXRlbS5nZXRQYXJlbnQoKS5pc0VuYWJsZWQoKSkgewoJCQkJY2hlY2tSZW5k ZXJlci5zZXRH
cmF5ZWQodHJ1ZSk7CgkJCX0KCQkJY2hlY2tSZW5kZXJlci5zZXRIb3Zlcihn ZXRIb3ZlckRl
dGFpbCgpLmVxdWFscygiY2hlY2siKSk7CgoJCQlpZiAoaXNDZW50ZXJlZENo ZWNrQm94T25s
eShpdGVtKSkgewoJCQkJLy8gU3BlY2lhbCBsb2dpYyBpZiB0aGlzIGNvbHVt biBvbmx5IGhh
cyBhIGNoZWNrYm94IGFuZCBpcwoJCQkJLy8gY2VudGVyZWQKCQkJCWNoZWNr UmVuZGVyZXIu
c2V0Qm91bmRzKAoJCQkJCQlnZXRCb3VuZHMoKS54CgkJCQkJCQkJKyAoKGdl dEJvdW5kcygp
LndpZHRoIC0gY2hlY2tSZW5kZXJlcgoJCQkJCQkJCQkJLmdldEJvdW5kcygp LndpZHRoKSAv
IDIpLAoJCQkJCQkoZ2V0Qm91bmRzKCkuaGVpZ2h0IC0gY2hlY2tSZW5kZXJl ci5nZXRCb3Vu
ZHMoKS5oZWlnaHQpCgkJCQkJCQkJLyAyICsgZ2V0Qm91bmRzKCkueSwKCQkJ CQkJY2hlY2tS
ZW5kZXJlci5nZXRCb3VuZHMoKS53aWR0aCwgY2hlY2tSZW5kZXJlcgoJCQkJ CQkJCS5nZXRC
b3VuZHMoKS5oZWlnaHQpOwoJCQl9IGVsc2UgewoJCQkJY2hlY2tSZW5kZXJl ci5zZXRCb3Vu
ZHMoZ2V0Qm91bmRzKCkueCArIHgsCgkJCQkJCShnZXRCb3VuZHMoKS5oZWln aHQgLSBjaGVj
a1JlbmRlcmVyLmdldEJvdW5kcygpLmhlaWdodCkKCQkJCQkJCQkvIDIgKyBn ZXRCb3VuZHMo
KS55LAoJCQkJCQljaGVja1JlbmRlcmVyLmdldEJvdW5kcygpLndpZHRoLCBj aGVja1JlbmRl
cmVyCgkJCQkJCQkJLmdldEJvdW5kcygpLmhlaWdodCk7CgoJCQkJeCArPSBj aGVja1JlbmRl
cmVyLmdldEJvdW5kcygpLndpZHRoICsgaW5zaWRlTWFyZ2luOwoJCQl9CgoJ CQljaGVja1Jl
bmRlcmVyLnBhaW50KGdjLCBudWxsKTsKCQl9CgoJCUltYWdlIGltYWdlID0g aXRlbS5nZXRJ
bWFnZShnZXRDb2x1bW4oKSk7CgkJaWYgKGltYWdlICE9IG51bGwpIHsKCQkJ aW50IHkgPSBn
ZXRCb3VuZHMoKS55OwoKCQkJeSArPSAoZ2V0Qm91bmRzKCkuaGVpZ2h0IC0g aW1hZ2UuZ2V0
Qm91bmRzKCkuaGVpZ2h0KSAvIDI7CgoJCQlnYy5kcmF3SW1hZ2UoaW1hZ2Us IGdldEJvdW5k
cygpLnggKyB4LCB5KTsKCgkJCXggKz0gaW1hZ2UuZ2V0Qm91bmRzKCkud2lk dGggKyBpbnNp
ZGVNYXJnaW47CgkJfQoKCQlpbnQgd2lkdGggPSBnZXRCb3VuZHMoKS53aWR0 aCAtIHggLSBy
aWdodE1hcmdpbjsKCgkJaWYgKGRyYXdBc1NlbGVjdGVkKSB7CgkJCWdjLnNl dEZvcmVncm91
bmQoZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKAoJCQkJCVNXVC5DT0xP Ul9MSVNUX1NF
TEVDVElPTl9URVhUKSk7CgkJfSBlbHNlIHsKCQkJZ2Muc2V0Rm9yZWdyb3Vu ZChpdGVtLmdl
dEZvcmVncm91bmQoZ2V0Q29sdW1uKCkpKTsKCQl9CgoJCUlCYXNlTGFiZWxQ cm92aWRlciBs
cCA9IHZpZXdlci5nZXRMYWJlbFByb3ZpZGVyKGdldENvbHVtbigpKTsKCQkK CQlpZiggbHAg
aW5zdGFuY2VvZiBJU3R5bGVkTGFiZWxQcm92aWRlciApIHsKCQkJSVN0eWxl ZExhYmVsUHJv
dmlkZXIgc3R5bGVkTHAgPSAoSVN0eWxlZExhYmVsUHJvdmlkZXIpIGxwOwoJ CQlTdHlsZWRT
dHJpbmcgc3R5bGVkU3RyaW5nID0gc3R5bGVkTHAuZ2V0U3R5bGVkVGV4dChp dGVtLmdldERh
dGEoKSk7CgkJCQoJCQlpZiAodGV4dExheW91dCA9PSBudWxsKSB7CgkJCQl0 ZXh0TGF5b3V0
ID0gbmV3IFRleHRMYXlvdXQoZ2MuZ2V0RGV2aWNlKCkpOwoJCQkJaXRlbS5n ZXRQYXJlbnQo
KS5hZGREaXNwb3NlTGlzdGVuZXIobmV3IERpc3Bvc2VMaXN0ZW5lcigpIHsK CQkJCQlwdWJs
aWMgdm9pZCB3aWRnZXREaXNwb3NlZChEaXNwb3NlRXZlbnQgZSkgewoJCQkJ CQl0ZXh0TGF5
b3V0LmRpc3Bvc2UoKTsKCQkJCQl9CgkJCQl9KTsKCQkJfQoJCQkKCQkJU3R5 bGVSYW5nZVtd
IHN0eWxlUmFuZ2VzID0gc3R5bGVkU3RyaW5nLmdldFN0eWxlUmFuZ2VzKCk7 CgkJCQoJCQl0
ZXh0TGF5b3V0LnNldFRleHQoaXRlbS5nZXRUZXh0KGdldENvbHVtbigpKSk7 CgkJCXRleHRM
YXlvdXQuc2V0Rm9udChpdGVtLmdldEZvbnQoZ2V0Q29sdW1uKCkpKTsKCQkJ CgkJCWZvciAo
aW50IGk9IDA7IGkgPCBzdHlsZVJhbmdlcy5sZW5ndGg7IGkrKykgewoJCQkJ U3R5bGVSYW5n
ZSBjdXJyID0gcHJlcGFyZVN0eWxlUmFuZ2Uoc3R5bGVSYW5nZXNbaV0sIHRy dWUpOwoJCQkJ
dGV4dExheW91dC5zZXRTdHlsZShjdXJyLCBjdXJyLnN0YXJ0LCBjdXJyLnN0 YXJ0ICsgY3Vy
ci5sZW5ndGggLSAxKTsKCQkJfQoJCQkKCQkJdGV4dExheW91dC5kcmF3KGdj LCB4LCBnZXRC
b3VuZHMoKS55ICsgdGV4dFRvcE1hcmdpbiArIHRvcE1hcmdpbik7CgkJCQoJ CX0gZWxzZSBp
ZiAoIWlzV29yZFdyYXAoKSkgewoJCQlTdHJpbmcgdGV4dCA9IFRleHRVdGls cy5nZXRTaG9y
dFN0cmluZyhnYywgaXRlbQoJCQkJCS5nZXRUZXh0KGdldENvbHVtbigpKSwg d2lkdGgpOwoK
CQkJaWYgKGdldEFsaWdubWVudCgpID09IFNXVC5SSUdIVCkgewoJCQkJaW50 IGxlbiA9IGdj
LnN0cmluZ0V4dGVudCh0ZXh0KS54OwoJCQkJaWYgKGxlbiA8IHdpZHRoKSB7 CgkJCQkJeCAr
PSB3aWR0aCAtIGxlbjsKCQkJCX0KCQkJfSBlbHNlIGlmIChnZXRBbGlnbm1l bnQoKSA9PSBT
V1QuQ0VOVEVSKSB7CgkJCQlpbnQgbGVuID0gZ2Muc3RyaW5nRXh0ZW50KHRl eHQpLng7CgkJ
CQlpZiAobGVuIDwgd2lkdGgpIHsKCQkJCQl4ICs9ICh3aWR0aCAtIGxlbikg LyAyOwoJCQkJ
fQoJCQl9CgoJCQlnYy5kcmF3U3RyaW5nKHRleHQsIGdldEJvdW5kcygpLngg KyB4LCBnZXRC
b3VuZHMoKS55CgkJCQkJKyB0ZXh0VG9wTWFyZ2luICsgdG9wTWFyZ2luLCB0 cnVlKTsKCQl9
IGVsc2UgewoJCQlpZiAodGV4dExheW91dCA9PSBudWxsKSB7CgkJCQl0ZXh0 TGF5b3V0ID0g
bmV3IFRleHRMYXlvdXQoZ2MuZ2V0RGV2aWNlKCkpOwoJCQkJaXRlbS5nZXRQ YXJlbnQoKS5h
ZGREaXNwb3NlTGlzdGVuZXIobmV3IERpc3Bvc2VMaXN0ZW5lcigpIHsKCQkJ CQlwdWJsaWMg
dm9pZCB3aWRnZXREaXNwb3NlZChEaXNwb3NlRXZlbnQgZSkgewoJCQkJCQl0 ZXh0TGF5b3V0
LmRpc3Bvc2UoKTsKCQkJCQl9CgkJCQl9KTsKCQkJfQoJCQl0ZXh0TGF5b3V0 LnNldEZvbnQo
Z2MuZ2V0Rm9udCgpKTsKCQkJdGV4dExheW91dC5zZXRUZXh0KGl0ZW0uZ2V0 VGV4dChnZXRD
b2x1bW4oKSkpOwoJCQl0ZXh0TGF5b3V0LnNldEFsaWdubWVudChnZXRBbGln bm1lbnQoKSk7
CgkJCXRleHRMYXlvdXQuc2V0V2lkdGgod2lkdGggPCAxID8gMSA6IHdpZHRo KTsKCgkJCXRl
eHRMYXlvdXQuZHJhdyhnYywgZ2V0Qm91bmRzKCkueCArIHgsIGdldEJvdW5k cygpLnkKCQkJ
CQkrIHRleHRUb3BNYXJnaW4gKyB0b3BNYXJnaW4pOwoJCX0KCgkJaWYgKGl0 ZW0uZ2V0UGFy
ZW50KCkuZ2V0TGluZXNWaXNpYmxlKCkpIHsKCQkJaWYgKGlzQ2VsbFNlbGVj dGVkKCkpIHsK
CQkJCS8vIFhYWDogc2hvdWxkIGJlIHVzZXIgZGVmaW5hYmxlPwoJCQkJZ2Mu c2V0Rm9yZWdy
b3VuZChnZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoCgkJCQkJCVNXVC5D T0xPUl9XSURH
RVRfREFSS19TSEFET1cpKTsKCQkJfSBlbHNlIHsKCQkJCWdjLnNldEZvcmVn cm91bmQoaXRl
bS5nZXRQYXJlbnQoKS5nZXRMaW5lQ29sb3IoKSk7CgkJCX0KCQkJZ2MuZHJh d0xpbmUoZ2V0
Qm91bmRzKCkueCwgZ2V0Qm91bmRzKCkueSArIGdldEJvdW5kcygpLmhlaWdo dCwKCQkJCQln
ZXRCb3VuZHMoKS54ICsgZ2V0Qm91bmRzKCkud2lkdGggLSAxLCBnZXRCb3Vu ZHMoKS55CgkJ
CQkJCQkrIGdldEJvdW5kcygpLmhlaWdodCk7CgkJCWdjLmRyYXdMaW5lKGdl dEJvdW5kcygp
LnggKyBnZXRCb3VuZHMoKS53aWR0aCAtIDEsIGdldEJvdW5kcygpLnksCgkJ CQkJZ2V0Qm91
bmRzKCkueCArIGdldEJvdW5kcygpLndpZHRoIC0gMSwgZ2V0Qm91bmRzKCku eQoJCQkJCQkJ
KyBnZXRCb3VuZHMoKS5oZWlnaHQpOwoJCX0KCgkJaWYgKGlzQ2VsbEZvY3Vz KCkpIHsKCQkJ
UmVjdGFuZ2xlIGZvY3VzUmVjdCA9IG5ldyBSZWN0YW5nbGUoZ2V0Qm91bmRz KCkueCAtIDEs
CgkJCQkJZ2V0Qm91bmRzKCkueSAtIDEsIGdldEJvdW5kcygpLndpZHRoLAoJ CQkJCWdldEJv
dW5kcygpLmhlaWdodCArIDEpOwoKCQkJZ2Muc2V0Rm9yZWdyb3VuZChnZXRE aXNwbGF5KCku
Z2V0U3lzdGVtQ29sb3IoCgkJCQkJU1dULkNPTE9SX0xJU1RfRk9SRUdST1VO RCkpOwoJCQln
Yy5kcmF3UmVjdGFuZ2xlKGZvY3VzUmVjdCk7CgoJCQlpZiAoaXNGb2N1cygp KSB7CgkJCQlm
b2N1c1JlY3QueCsrOwoJCQkJZm9jdXNSZWN0LndpZHRoIC09IDI7CgkJCQlm b2N1c1JlY3Qu
eSsrOwoJCQkJZm9jdXNSZWN0LmhlaWdodCAtPSAyOwoKCQkJCWdjLmRyYXdS ZWN0YW5nbGUo
Zm9jdXNSZWN0KTsKCQkJfQoJCX0KCX0KCQoJcHJpdmF0ZSBTdHlsZVJhbmdl IHByZXBhcmVT
dHlsZVJhbmdlKFN0eWxlUmFuZ2Ugc3R5bGVSYW5nZSwgYm9vbGVhbiBhcHBs eUNvbG9ycykg
ewoJCS8vIGlmIG5vIGNvbG9ycyBhcHBseSBvciBmb250IGlzIHNldCwgY3Jl YXRlIGEgY2xv
bmUgYW5kIGNsZWFyIHRoZQoJCS8vIGNvbG9ycyBhbmQgZm9udAoJCWlmICgh YXBwbHlDb2xv
cnMgJiYgKHN0eWxlUmFuZ2UuZm9yZWdyb3VuZCAhPSBudWxsIHx8IHN0eWxl UmFuZ2UuYmFj
a2dyb3VuZCAhPSBudWxsKSkgewoJCQlzdHlsZVJhbmdlID0gKFN0eWxlUmFu Z2UpIHN0eWxl
UmFuZ2UuY2xvbmUoKTsKCQkJaWYgKCFhcHBseUNvbG9ycykgewoJCQkJc3R5 bGVSYW5nZS5m
b3JlZ3JvdW5kID0gbnVsbDsKCQkJCXN0eWxlUmFuZ2UuYmFja2dyb3VuZCA9 IG51bGw7CgkJ
CX0KCQl9CgkJcmV0dXJuIHN0eWxlUmFuZ2U7Cgl9CgoJLyoqCgkgKiBDYWxj dWxhdGVzIHRo
ZSBzZXF1ZW5jZSBvZiBicmFuY2ggbGluZXMgd2hpY2ggc2hvdWxkIGJlIHJl bmRlcmVkIGZv
ciB0aGUKCSAqIHByb3ZpZGVkIGl0ZW0KCSAqIAoJICogQHBhcmFtIGl0ZW0K CSAqIEByZXR1
cm4gYW4gYXJyYXkgb2YgaW50ZWdlcnMgY29tcG9zZWQgdXNpbmcgdGhlIGNv bnN0YW50cyBp
bgoJICogICAgICAgICB7QGxpbmsgQnJhbmNoUmVuZGVyZXJ9CgkgKi8KCXBy aXZhdGUgaW50
W10gZ2V0QnJhbmNoZXMoR3JpZEl0ZW0gaXRlbSkgewoJCWludFtdIGJyYW5j aGVzID0gbmV3
IGludFtpdGVtLmdldExldmVsKCkgKyAxXTsKCQlHcmlkSXRlbVtdIHJvb3Rz ID0gaXRlbS5n
ZXRQYXJlbnQoKS5nZXRSb290SXRlbXMoKTsKCgkJLy8gSXMgdGhpcyBhIG5v ZGUgb3IgYSBs
ZWFmPwoJCWlmIChpdGVtLmdldFBhcmVudEl0ZW0oKSA9PSBudWxsKSB7CgkJ CS8vIEFkZCBk
ZXNjZW5kZXIgaWYgbm90IGxhc3QgaXRlbQoJCQlpZiAoIWl0ZW0uaXNFeHBh bmRlZCgpICYm
IHJvb3RzW3Jvb3RzLmxlbmd0aCAtIDFdLmVxdWFscyhpdGVtKSkgewoJCQkJ aWYgKGl0ZW0u
aGFzQ2hpbGRyZW4oKSkKCQkJCQlicmFuY2hlc1tpdGVtLmdldExldmVsKCld ID0gQnJhbmNo
UmVuZGVyZXIuTEFTVF9ST09UOwoJCQkJZWxzZQoJCQkJCWJyYW5jaGVzW2l0 ZW0uZ2V0TGV2
ZWwoKV0gPSBCcmFuY2hSZW5kZXJlci5TTUFMTF9MOwoJCQl9IGVsc2UgewoJ CQkJaWYgKGl0
ZW0uaGFzQ2hpbGRyZW4oKSkKCQkJCQlicmFuY2hlc1tpdGVtLmdldExldmVs KCldID0gQnJh
bmNoUmVuZGVyZXIuUk9PVDsKCQkJCWVsc2UKCQkJCQlicmFuY2hlc1tpdGVt LmdldExldmVs
KCldID0gQnJhbmNoUmVuZGVyZXIuU01BTExfVDsKCQkJfQoKCQl9IGVsc2Ug aWYgKGl0ZW0u
aGFzQ2hpbGRyZW4oKSkKCQkJaWYgKGl0ZW0uaXNFeHBhbmRlZCgpKQoJCQkJ YnJhbmNoZXNb
aXRlbS5nZXRMZXZlbCgpXSA9IEJyYW5jaFJlbmRlcmVyLk5PREU7CgkJCWVs c2UKCQkJCWJy
YW5jaGVzW2l0ZW0uZ2V0TGV2ZWwoKV0gPSBCcmFuY2hSZW5kZXJlci5OT05F OwoJCWVsc2UK
CQkJYnJhbmNoZXNbaXRlbS5nZXRMZXZlbCgpXSA9IEJyYW5jaFJlbmRlcmVy LkxFQUY7CgoJ
CS8vIEJyYW5jaCBmb3IgY3VycmVudCBpdGVtCgkJR3JpZEl0ZW0gcGFyZW50 ID0gaXRlbS5n
ZXRQYXJlbnRJdGVtKCk7CgkJaWYgKHBhcmVudCA9PSBudWxsKQoJCQlyZXR1 cm4gYnJhbmNo
ZXM7CgoJCS8vIEFyZSB0aGVyZSBzaWJsaW5ncyBiZWxvdyB0aGlzIGl0ZW0/ CgkJaWYgKHBh
cmVudC5pbmRleE9mKGl0ZW0pIDwgcGFyZW50LmdldEl0ZW1Db3VudCgpIC0g MSkKCQkJYnJh
bmNoZXNbaXRlbS5nZXRMZXZlbCgpIC0gMV0gPSBCcmFuY2hSZW5kZXJlci5U OwoKCQkvLyBJ
cyB0aGUgbmV4dCBub2RlIGEgcm9vdD8KCQllbHNlIGlmIChwYXJlbnQuZ2V0 UGFyZW50SXRl
bSgpID09IG51bGwKCQkJCSYmICFwYXJlbnQuZXF1YWxzKHJvb3RzW3Jvb3Rz Lmxlbmd0aCAt
IDFdKSkKCQkJYnJhbmNoZXNbaXRlbS5nZXRMZXZlbCgpIC0gMV0gPSBCcmFu Y2hSZW5kZXJl
ci5UOwoKCQkvLyBUaGlzIG11c3QgYmUgdGhlIGxhc3QgZWxlbWVudCBhdCB0 aGlzIGxldmVs
CgkJZWxzZQoJCQlicmFuY2hlc1tpdGVtLmdldExldmVsKCkgLSAxXSA9IEJy YW5jaFJlbmRl
cmVyLkw7CgoJCUdyaWQgZ3JpZCA9IGl0ZW0uZ2V0UGFyZW50KCk7CgkJaXRl bSA9IHBhcmVu
dDsKCQlwYXJlbnQgPSBpdGVtLmdldFBhcmVudEl0ZW0oKTsKCgkJLy8gQnJh bmNoZXMgZm9y
IHBhcmVudCBpdGVtcwoJCXdoaWxlIChpdGVtLmdldExldmVsKCkgPiAwKSB7 CgkJCWlmIChw
YXJlbnQuaW5kZXhPZihpdGVtKSA9PSBwYXJlbnQuZ2V0SXRlbUNvdW50KCkg LSAxKSB7CgkJ
CQlpZiAocGFyZW50LmdldFBhcmVudEl0ZW0oKSA9PSBudWxsCgkJCQkJCSYm ICFncmlkLmdl
dFJvb3RJdGVtKGdyaWQuZ2V0Um9vdEl0ZW1Db3VudCgpIC0gMSkKCQkJCQkJ CQkuZXF1YWxz
KHBhcmVudCkpCgkJCQkJYnJhbmNoZXNbaXRlbS5nZXRMZXZlbCgpIC0gMV0g PSBCcmFuY2hS
ZW5kZXJlci5JOwoJCQkJZWxzZQoJCQkJCWJyYW5jaGVzW2l0ZW0uZ2V0TGV2 ZWwoKSAtIDFd
ID0gQnJhbmNoUmVuZGVyZXIuTk9ORTsKCQkJfSBlbHNlCgkJCQlicmFuY2hl c1tpdGVtLmdl
dExldmVsKCkgLSAxXSA9IEJyYW5jaFJlbmRlcmVyLkk7CgkJCWl0ZW0gPSBw YXJlbnQ7CgkJ
CXBhcmVudCA9IGl0ZW0uZ2V0UGFyZW50SXRlbSgpOwoJCX0KCQkvLyBpdGVt IHNob3VsZCBi
ZSBudWxsIGF0IHRoaXMgcG9pbnQKCQlyZXR1cm4gYnJhbmNoZXM7Cgl9CgoJ LyoqCgkgKiB7
QGluaGVyaXREb2N9CgkgKi8KCXB1YmxpYyBQb2ludCBjb21wdXRlU2l6ZShH QyBnYywgaW50
IHdIaW50LCBpbnQgaEhpbnQsIE9iamVjdCB2YWx1ZSkgewoJCUdyaWRJdGVt IGl0ZW0gPSAo
R3JpZEl0ZW0pIHZhbHVlOwoKCQlnYy5zZXRGb250KGl0ZW0uZ2V0Rm9udChn ZXRDb2x1bW4o
KSkpOwoKCQlpbnQgeCA9IDA7CgoJCXggKz0gbGVmdE1hcmdpbjsKCgkJaWYg KGlzVHJlZSgp
KSB7CgkJCXggKz0gZ2V0VG9nZ2xlSW5kZW50KGl0ZW0pOwoKCQkJeCArPSB0 b2dnbGVSZW5k
ZXJlci5nZXRCb3VuZHMoKS53aWR0aCArIGluc2lkZU1hcmdpbjsKCgkJfQoK CQlpZiAoaXND
aGVjaygpKSB7CgkJCXggKz0gY2hlY2tSZW5kZXJlci5nZXRCb3VuZHMoKS53 aWR0aCArIGlu
c2lkZU1hcmdpbjsKCQl9CgoJCWludCB5ID0gMDsKCgkJSW1hZ2UgaW1hZ2Ug PSBpdGVtLmdl
dEltYWdlKGdldENvbHVtbigpKTsKCQlpZiAoaW1hZ2UgIT0gbnVsbCkgewoJ CQl5ID0gdG9w
TWFyZ2luICsgaW1hZ2UuZ2V0Qm91bmRzKCkuaGVpZ2h0ICsgYm90dG9tTWFy Z2luOwoKCQkJ
eCArPSBpbWFnZS5nZXRCb3VuZHMoKS53aWR0aCArIGluc2lkZU1hcmdpbjsK CQl9CgoJCS8v
IE1PUFItRE5ECgkJLy8gTU9QUjogcmVwbGFjZWQgdGhpcyBjb2RlICh0byBn ZXQgY29ycmVj
dCBwcmVmZXJyZWQgaGVpZ2h0IGZvciBjZWxscwoJCS8vIGluIHdvcmQtd3Jh cCBjb2x1bW5z
KQoJCS8vCgkJLy8geCArPSBnYy5zdHJpbmdFeHRlbnQoaXRlbS5nZXRUZXh0 KGdldENvbHVt
bigpKSkueCArIHJpZ2h0TWFyZ2luOwoJCS8vCgkJLy8geSA9IE1hdGgubWF4 KHksdG9wTWFy
Z2luICsgZ2MuZ2V0Rm9udE1ldHJpY3MoKS5nZXRIZWlnaHQoKSArCgkJLy8g Ym90dG9tTWFy
Z2luKTsKCQkvLwoJCS8vIHdpdGggdGhpcyBjb2RlOgoKCQlpbnQgdGV4dEhl aWdodCA9IDA7
CgkJaWYgKCFpc1dvcmRXcmFwKCkpIHsKCQkJeCArPSBnYy50ZXh0RXh0ZW50 KGl0ZW0uZ2V0
VGV4dChnZXRDb2x1bW4oKSkpLnggKyByaWdodE1hcmdpbjsKCgkJCXRleHRI ZWlnaHQgPSB0
b3BNYXJnaW4gKyB0ZXh0VG9wTWFyZ2luCgkJCQkJKyBnYy5nZXRGb250TWV0 cmljcygpLmdl
dEhlaWdodCgpICsgdGV4dEJvdHRvbU1hcmdpbgoJCQkJCSsgYm90dG9tTWFy Z2luOwoJCX0g
ZWxzZSB7CgkJCWludCBwbGFpblRleHRXaWR0aDsKCQkJaWYgKHdIaW50ID09 IFNXVC5ERUZB
VUxUKQoJCQkJcGxhaW5UZXh0V2lkdGggPSBnYy50ZXh0RXh0ZW50KGl0ZW0u Z2V0VGV4dChn
ZXRDb2x1bW4oKSkpLng7CgkJCWVsc2UKCQkJCXBsYWluVGV4dFdpZHRoID0g d0hpbnQgLSB4
IC0gcmlnaHRNYXJnaW47CgoJCQlUZXh0TGF5b3V0IGN1cnJUZXh0TGF5b3V0 ID0gbmV3IFRl
eHRMYXlvdXQoZ2MuZ2V0RGV2aWNlKCkpOwoJCQljdXJyVGV4dExheW91dC5z ZXRGb250KGdj
LmdldEZvbnQoKSk7CgkJCWN1cnJUZXh0TGF5b3V0LnNldFRleHQoaXRlbS5n ZXRUZXh0KGdl
dENvbHVtbigpKSk7CgkJCWN1cnJUZXh0TGF5b3V0LnNldEFsaWdubWVudChn ZXRBbGlnbm1l
bnQoKSk7CgkJCWN1cnJUZXh0TGF5b3V0LnNldFdpZHRoKHBsYWluVGV4dFdp ZHRoIDwgMSA/
IDEgOiBwbGFpblRleHRXaWR0aCk7CgoJCQl4ICs9IHBsYWluVGV4dFdpZHRo ICsgcmlnaHRN
YXJnaW47CgoJCQl0ZXh0SGVpZ2h0ICs9IHRvcE1hcmdpbiArIHRleHRUb3BN YXJnaW47CgkJ
CWZvciAoaW50IGNudCA9IDA7IGNudCA8IGN1cnJUZXh0TGF5b3V0LmdldExp bmVDb3VudCgp
OyBjbnQrKykKCQkJCXRleHRIZWlnaHQgKz0gY3VyclRleHRMYXlvdXQuZ2V0 TGluZUJvdW5k
cyhjbnQpLmhlaWdodDsKCQkJdGV4dEhlaWdodCArPSB0ZXh0Qm90dG9tTWFy Z2luICsgYm90
dG9tTWFyZ2luOwoKCQkJY3VyclRleHRMYXlvdXQuZGlzcG9zZSgpOwoJCX0K CgkJeSA9IE1h
dGgubWF4KHksIHRleHRIZWlnaHQpOwoKCQlyZXR1cm4gbmV3IFBvaW50KHgs IHkpOwoJfQoK
CS8qKgoJICoge0Bpbmhlcml0RG9jfQoJICovCglwdWJsaWMgYm9vbGVhbiBu b3RpZnkoaW50
IGV2ZW50LCBQb2ludCBwb2ludCwgT2JqZWN0IHZhbHVlKSB7CgoJCUdyaWRJ dGVtIGl0ZW0g
PSAoR3JpZEl0ZW0pIHZhbHVlOwoKCQlpZiAoaXNDaGVjaygpKSB7CgkJCWlm IChldmVudCA9
PSBJSW50ZXJuYWxXaWRnZXQuTW91c2VNb3ZlKSB7CgkJCQlpZiAob3ZlckNo ZWNrKGl0ZW0s
IHBvaW50KSkgewoJCQkJCXNldEhvdmVyRGV0YWlsKCJjaGVjayIpOwoJCQkJ CXJldHVybiB0
cnVlOwoJCQkJfQoJCQl9CgoJCQlpZiAoZXZlbnQgPT0gSUludGVybmFsV2lk Z2V0LkxlZnRN
b3VzZUJ1dHRvbkRvd24pIHsKCQkJCWlmIChvdmVyQ2hlY2soaXRlbSwgcG9p bnQpKSB7CgkJ
CQkJaWYgKCFpdGVtLmdldENoZWNrYWJsZShnZXRDb2x1bW4oKSkpIHsKCQkJ CQkJcmV0dXJu
IGZhbHNlOwoJCQkJCX0KCgkJCQkJaXRlbS5zZXRDaGVja2VkKGdldENvbHVt bigpLCAhaXRl
bS5nZXRDaGVja2VkKGdldENvbHVtbigpKSk7CgkJCQkJaXRlbS5nZXRQYXJl bnQoKS5yZWRy
YXcoKTsKCgkJCQkJaXRlbS5maXJlQ2hlY2tFdmVudChnZXRDb2x1bW4oKSk7 CgoJCQkJCXJl
dHVybiB0cnVlOwoJCQkJfQoJCQl9CgkJfQoKCQlpZiAoaXNUcmVlKCkgJiYg aXRlbS5oYXND
aGlsZHJlbigpKSB7CgkJCWlmIChldmVudCA9PSBJSW50ZXJuYWxXaWRnZXQu TW91c2VNb3Zl
KSB7CgkJCQlpZiAob3ZlclRvZ2dsZShpdGVtLCBwb2ludCkpIHsKCQkJCQlz ZXRIb3ZlckRl
dGFpbCgidG9nZ2xlIik7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJCX0K CgkJCWlmIChl
dmVudCA9PSBJSW50ZXJuYWxXaWRnZXQuTGVmdE1vdXNlQnV0dG9uRG93bikg ewoJCQkJaWYg
KG92ZXJUb2dnbGUoaXRlbSwgcG9pbnQpKSB7CgkJCQkJaXRlbS5zZXRFeHBh bmRlZCghaXRl
bS5pc0V4cGFuZGVkKCkpOwoJCQkJCWl0ZW0uZ2V0UGFyZW50KCkucmVkcmF3 KCk7CgoJCQkJ
CWlmIChpdGVtLmlzRXhwYW5kZWQoKSkgewoJCQkJCQlpdGVtLmZpcmVFdmVu dChTV1QuRXhw
YW5kKTsKCQkJCQl9IGVsc2UgewoJCQkJCQlpdGVtLmZpcmVFdmVudChTV1Qu Q29sbGFwc2Up
OwoJCQkJCX0KCgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJCX0KCQl9CgoJ CXJldHVybiBm
YWxzZTsKCX0KCglwcml2YXRlIGJvb2xlYW4gb3ZlckNoZWNrKEdyaWRJdGVt IGl0ZW0sIFBv
aW50IHBvaW50KSB7CgkJaWYgKGlzQ2VudGVyZWRDaGVja0JveE9ubHkoaXRl bSkpIHsKCQkJ
cG9pbnQgPSBuZXcgUG9pbnQocG9pbnQueCwgcG9pbnQueSk7CgkJCXBvaW50 LnggLT0gZ2V0
Qm91bmRzKCkueDsKCQkJcG9pbnQueSAtPSBnZXRCb3VuZHMoKS55OwoKCQkJ UmVjdGFuZ2xl
IGNoZWNrQm91bmRzID0gbmV3IFJlY3RhbmdsZSgwLCAwLCAwLCAwKTsKCQkJ Y2hlY2tCb3Vu
ZHMueCA9IChnZXRCb3VuZHMoKS53aWR0aCAtIGNoZWNrUmVuZGVyZXIuZ2V0 Qm91bmRzKCku
d2lkdGgpIC8gMjsKCQkJY2hlY2tCb3VuZHMueSA9ICgoZ2V0Qm91bmRzKCku aGVpZ2h0IC0g
Y2hlY2tSZW5kZXJlci5nZXRCb3VuZHMoKS5oZWlnaHQpIC8gMik7CgkJCWNo ZWNrQm91bmRz
LndpZHRoID0gY2hlY2tSZW5kZXJlci5nZXRCb3VuZHMoKS53aWR0aDsKCQkJ Y2hlY2tCb3Vu
ZHMuaGVpZ2h0ID0gY2hlY2tSZW5kZXJlci5nZXRCb3VuZHMoKS5oZWlnaHQ7 CgoJCQlyZXR1
cm4gY2hlY2tCb3VuZHMuY29udGFpbnMocG9pbnQpOwoJCX0gZWxzZSB7CgkJ CXBvaW50ID0g
bmV3IFBvaW50KHBvaW50LngsIHBvaW50LnkpOwoJCQlwb2ludC54IC09IGdl dEJvdW5kcygp
Lng7CgkJCXBvaW50LnkgLT0gZ2V0Qm91bmRzKCkueTsKCgkJCWludCB4ID0g bGVmdE1hcmdp
bjsKCQkJaWYgKGlzVHJlZSgpKSB7CgkJCQl4ICs9IGdldFRvZ2dsZUluZGVu dChpdGVtKTsK
CQkJCXggKz0gdG9nZ2xlUmVuZGVyZXIuZ2V0U2l6ZSgpLnggKyBpbnNpZGVN YXJnaW47CgkJ
CX0KCgkJCWlmIChwb2ludC54ID49IHggJiYgcG9pbnQueCA8ICh4ICsgY2hl Y2tSZW5kZXJl
ci5nZXRTaXplKCkueCkpIHsKCQkJCWludCB5U3RhcnQgPSAoKGdldEJvdW5k cygpLmhlaWdo
dCAtIGNoZWNrUmVuZGVyZXIuZ2V0Qm91bmRzKCkuaGVpZ2h0KSAvIDIpOwoJ CQkJaWYgKHBv
aW50LnkgPj0geVN0YXJ0CgkJCQkJCSYmIHBvaW50LnkgPCB5U3RhcnQgKyBj aGVja1JlbmRl
cmVyLmdldFNpemUoKS55KSB7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJ CX0KCgkJCXJl
dHVybiBmYWxzZTsKCQl9Cgl9CgoJcHJpdmF0ZSBpbnQgZ2V0VG9nZ2xlSW5k ZW50KEdyaWRJ
dGVtIGl0ZW0pIHsKCQlyZXR1cm4gaXRlbS5nZXRMZXZlbCgpICogdHJlZUlu ZGVudDsKCX0K
Cglwcml2YXRlIGJvb2xlYW4gb3ZlclRvZ2dsZShHcmlkSXRlbSBpdGVtLCBQ b2ludCBwb2lu
dCkgewoKCQlwb2ludCA9IG5ldyBQb2ludChwb2ludC54LCBwb2ludC55KTsK CgkJcG9pbnQu
eCAtPSBnZXRCb3VuZHMoKS54IC0gMTsKCQlwb2ludC55IC09IGdldEJvdW5k cygpLnkgLSAx
OwoKCQlpbnQgeCA9IGxlZnRNYXJnaW47CgkJeCArPSBnZXRUb2dnbGVJbmRl bnQoaXRlbSk7
CgoJCWlmIChwb2ludC54ID49IHggJiYgcG9pbnQueCA8ICh4ICsgdG9nZ2xl UmVuZGVyZXIu
Z2V0U2l6ZSgpLngpKSB7CgkJCS8vIHJldHVybiB0cnVlOwoJCQlpbnQgeVN0 YXJ0ID0gKChn
ZXRCb3VuZHMoKS5oZWlnaHQgLSB0b2dnbGVSZW5kZXJlci5nZXRCb3VuZHMo KS5oZWlnaHQp
IC8gMik7CgkJCWlmIChwb2ludC55ID49IHlTdGFydAoJCQkJCSYmIHBvaW50 LnkgPCB5U3Rh
cnQgKyB0b2dnbGVSZW5kZXJlci5nZXRTaXplKCkueSkgewoJCQkJcmV0dXJu IHRydWU7CgkJ
CX0KCQl9CgoJCXJldHVybiBmYWxzZTsKCX0KCgkvKioKCSAqIHtAaW5oZXJp dERvY30KCSAq
LwoJcHVibGljIHZvaWQgc2V0VHJlZShib29sZWFuIHRyZWUpIHsKCQlzdXBl ci5zZXRUcmVl
KHRyZWUpOwoKCQlpZiAodHJlZSkgewoJCQl0b2dnbGVSZW5kZXJlciA9IG5l dyBUb2dnbGVS
ZW5kZXJlcigpOwoJCQl0b2dnbGVSZW5kZXJlci5zZXREaXNwbGF5KGdldERp c3BsYXkoKSk7
CgoJCQlicmFuY2hSZW5kZXJlciA9IG5ldyBCcmFuY2hSZW5kZXJlcigpOwoJ CQlicmFuY2hS
ZW5kZXJlci5zZXREaXNwbGF5KGdldERpc3BsYXkoKSk7CgkJfQoJfQoKCS8q KgoJICoge0Bp
bmhlcml0RG9jfQoJICovCglwdWJsaWMgdm9pZCBzZXRDaGVjayhib29sZWFu IGNoZWNrKSB7
CgkJc3VwZXIuc2V0Q2hlY2soY2hlY2spOwoKCQlpZiAoY2hlY2spIHsKCQkJ Y2hlY2tSZW5k
ZXJlciA9IG5ldyBDaGVja0JveFJlbmRlcmVyKCk7CgkJCWNoZWNrUmVuZGVy ZXIuc2V0RGlz
cGxheShnZXREaXNwbGF5KCkpOwoJCX0gZWxzZSB7CgkJCWNoZWNrUmVuZGVy ZXIgPSBudWxs
OwoJCX0KCX0KCgkvKioKCSAqIHtAaW5oZXJpdERvY30KCSAqLwoJcHVibGlj IFJlY3Rhbmds
ZSBnZXRUZXh0Qm91bmRzKEdyaWRJdGVtIGl0ZW0sIGJvb2xlYW4gcHJlZmVy cmVkKSB7CgkJ
aW50IHggPSBsZWZ0TWFyZ2luOwoKCQlpZiAoaXNUcmVlKCkpIHsKCQkJeCAr PSBnZXRUb2dn
bGVJbmRlbnQoaXRlbSk7CgoJCQl4ICs9IHRvZ2dsZVJlbmRlcmVyLmdldEJv dW5kcygpLndp
ZHRoICsgaW5zaWRlTWFyZ2luOwoKCQl9CgoJCWlmIChpc0NoZWNrKCkpIHsK CQkJeCArPSBj
aGVja1JlbmRlcmVyLmdldEJvdW5kcygpLndpZHRoICsgaW5zaWRlTWFyZ2lu OwoJCX0KCgkJ
SW1hZ2UgaW1hZ2UgPSBpdGVtLmdldEltYWdlKGdldENvbHVtbigpKTsKCQlp ZiAoaW1hZ2Ug
IT0gbnVsbCkgewoJCQl4ICs9IGltYWdlLmdldEJvdW5kcygpLndpZHRoICsg aW5zaWRlTWFy
Z2luOwoJCX0KCgkJUmVjdGFuZ2xlIGJvdW5kcyA9IG5ldyBSZWN0YW5nbGUo eCwgdG9wTWFy
Z2luICsgdGV4dFRvcE1hcmdpbiwgMCwgMCk7CgoJCUdDIGdjID0gbmV3IEdD KGl0ZW0uZ2V0
UGFyZW50KCkpOwoJCWdjLnNldEZvbnQoaXRlbS5nZXRGb250KGdldENvbHVt bigpKSk7CgkJ
UG9pbnQgc2l6ZSA9IGdjLnN0cmluZ0V4dGVudChpdGVtLmdldFRleHQoZ2V0 Q29sdW1uKCkp
KTsKCgkJYm91bmRzLmhlaWdodCA9IHNpemUueTsKCgkJaWYgKHByZWZlcnJl ZCkgewoJCQli
b3VuZHMud2lkdGggPSBzaXplLnggLSAxOwoJCX0gZWxzZSB7CgkJCWJvdW5k cy53aWR0aCA9
IGdldEJvdW5kcygpLndpZHRoIC0geCAtIHJpZ2h0TWFyZ2luOwoJCX0KCgkJ Z2MuZGlzcG9z
ZSgpOwoKCQlyZXR1cm4gYm91bmRzOwoJfQoKCXByaXZhdGUgYm9vbGVhbiBp c0NlbnRlcmVk
Q2hlY2tCb3hPbmx5KEdyaWRJdGVtIGl0ZW0pIHsKCQlyZXR1cm4gIWlzVHJl ZSgpICYmIGl0
ZW0uZ2V0SW1hZ2UoZ2V0Q29sdW1uKCkpID09IG51bGwKCQkJCSYmIGl0ZW0u Z2V0VGV4dChn
ZXRDb2x1bW4oKSkuZXF1YWxzKCIiKQoJCQkJJiYgZ2V0QWxpZ25tZW50KCkg PT0gU1dULkNF
TlRFUjsKCX0KfQ==
--------------010204030502090506010102--
Re: Grid and StyledCellLabelProvider [message #593652 is a reply to message #62704] Tue, 17 February 2009 13:31 Go to previous message
Christian Hauser is currently offline Christian Hauser
Messages: 189
Registered: July 2009
Senior Member
Hi Tom

I'm using a StyledCellLabelProvider, which is not a
IStyledLabelProvider, but thank you anyway. I think I can handle it now,
well, I'll have a look at it and try to adapt it somehow.

Thank you for your help and time!

Christian


Tom Schindl wrote:
> Hi,
>
> No. We don't support this but it should quite easy for you to implement
> a CellRenderer which uses a StyledString and renderer it.
>
> Attached to this mail you'll find a completely untested (I only wrote
> the code renderer) class but you should get the idea. Always remember
> when using the Grid you are in the position of drawing everything
> yourself and you are not restricted to the bounds of the native widget.
>
> Tom
>
> Christian Hauser schrieb:
>
>> Hi all,
>>
>> I've been using a normal JFace TableViewer for an editable table.
>> However, I had to switch to GridTableViewer, because the customer needs
>> wrapping of the text within cells.
>>
>> The problem I'm facing now is that my StyledCellLabelProvider that
>> highlights text is not working with Grid. Am I missing something or is
>> this rather new feature (Eclipse 3.4) not yet supported on Grid?
>>
>> Thanks in advance for any help,
>> Christian
>>
>
>
>
Previous Topic:CDateTime: How to set value
Next Topic:CompositeTable multi-selection?
Goto Forum:
  


Current Time: Wed Oct 22 15:38:06 GMT 2014

Powered by FUDForum. Page generated in 0.02603 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software