LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCqAqCiAqIENvbnRyaWJ1dG9yczoKICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuaW50ZXJuYWw7CgppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLio7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudXRpbC5TZXJ2ZXJMaWZlY3ljbGVBZGFwdGVyOwovKioKICogTGlzdGVucyBmb3IgbWVzc2FnZXMgZnJvbSB0aGUgc2VydmVycy4gVGhpcyBjbGFzcyBrZWVwcwogKiB0cmFjayBvZiBzZXJ2ZXIgaW5zdGFuY2VzIGN1cnJlbnQgc3RhdGUgYW5kIGFueSBjbGllbnRzCiAqIHRoYXQgYXJlIHdhaXRpbmcgdG8gcnVuIG9uIHRoZSBzZXJ2ZXIuIAogKi8KcHVibGljIGNsYXNzIFNlcnZlckxpc3RlbmVyIGV4dGVuZHMgU2VydmVyTGlmZWN5Y2xlQWRhcHRlciBpbXBsZW1lbnRzIElTZXJ2ZXJMaXN0ZW5lciB7CgkvLyBzdGF0aWMgaW5zdGFuY2UKCXByb3RlY3RlZCBzdGF0aWMgU2VydmVyTGlzdGVuZXIgbGlzdGVuZXI7CgoJLyoqCgkgKiBTZXJ2ZXJMaXN0ZW5lciBjb25zdHJ1Y3RvciBjb21tZW50LgoJICovCglwcml2YXRlIFNlcnZlckxpc3RlbmVyKCkgewoJCXN1cGVyKCk7Cgl9CgkKCS8qKgoJICogR2V0IHRoZSBzdGF0aWMgaW5zdGFuY2UuCgkgKgoJICogQHJldHVybiBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuaW50ZXJuYWwucGx1Z2luLlNlcnZlckxpc3RlbmVyCgkgKi8KCXB1YmxpYyBzdGF0aWMgU2VydmVyTGlzdGVuZXIgZ2V0SW5zdGFuY2UoKSB7CgkJaWYgKGxpc3RlbmVyID09IG51bGwpCgkJCWxpc3RlbmVyID0gbmV3IFNlcnZlckxpc3RlbmVyKCk7CgkJcmV0dXJuIGxpc3RlbmVyOwoJfQoJCgkvKioKCSAqIENhbGxlZCB3aGVuIHRoZSBzZXJ2ZXIgY29uZmlndXJhdGlvbidzIHN5bmMgc3RhdGUgY2hhbmdlcy4KCSAqCgkgKiBAcGFyYW0gc2VydmVyIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIubW9kZWwuSVNlcnZlcgoJICovCglwdWJsaWMgdm9pZCBjb25maWd1cmF0aW9uU3luY1N0YXRlQ2hhbmdlKElTZXJ2ZXIgc2VydmVyKSB7CgkJLy8gZG8gbm90aGluZwoJfQoKCS8qKgoJICogTm90aWZpY2F0aW9uIHdoZW4gdGhlIHNlcnZlciBzdGF0ZSBoYXMgY2hhbmdlZC4KCSAqCgkgKiBAcGFyYW0gc2VydmVyIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIubW9kZWwuSVNlcnZlcgoJICovCglwdWJsaWMgdm9pZCBzZXJ2ZXJTdGF0ZUNoYW5nZShJU2VydmVyIHNlcnZlcikgewoJCS8vIGRvIG5vdGhpbmcKCX0KCgkvKioKCSAqIE5vdGlmaWNhdGlvbiB3aGVuIHRoZSBzZXJ2ZXIgc3RhdGUgaGFzIGNoYW5nZWQuCgkgKgoJICogQHBhcmFtIHNlcnZlciBvcmcuZWNsaXBzZS53c3Quc2VydmVyLm1vZGVsLklTZXJ2ZXIKCSAqLwoJcHVibGljIHZvaWQgbW9kdWxlc0NoYW5nZWQoSVNlcnZlciBzZXJ2ZXIpIHsKCQkvLyBkbyBub3RoaW5nCgl9CgoJLyoqCgkgKiBOb3RpZmljYXRpb24gd2hlbiB0aGUgc3RhdGUgb2YgYSBtb2R1bGUgaGFzIGNoYW5nZWQuCgkgKgoJICogQHBhcmFtIHNlcnZlciBvcmcuZWNsaXBzZS53c3Quc2VydmVyLm1vZGVsLklTZXJ2ZXIKCSAqLwoJcHVibGljIHZvaWQgbW9kdWxlU3RhdGVDaGFuZ2UoSVNlcnZlciBzZXJ2ZXIsIElNb2R1bGUgbW9kdWxlKSB7CgkJLy8gZG8gbm90aGluZwoJfQoKCS8qKgoJICogQ2FsbGVkIHdoZW4gdGhlIHNlcnZlciBpc1Jlc3RhcnROZWVkZWQoKSBwcm9wZXJ0eSBjaGFuZ2VzLgoJICoKCSAqIEBwYXJhbSBpbnN0YW5jZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuSVNlcnZlcgoJICovCglwdWJsaWMgdm9pZCByZXN0YXJ0U3RhdGVDaGFuZ2UoSVNlcnZlciBzZXJ2ZXIpIHsKCQkvKmlmIChzZXJ2ZXIuaXNSZXN0YXJ0TmVlZGVkKCkgPT0gZmFsc2UpCgkJCXJldHVybjsKCQkKCQlieXRlIHN0YXRlID0gc2VydmVyLmdldFNlcnZlclN0YXRlKCk7CgkJaWYgKHN0YXRlICE9IElTZXJ2ZXIyLlNUQVRFX1NUQVJURUQgJiYgc3RhdGUgIT0gSVNlcnZlcjIuU1RBVEVfU1RBUlRFRF9ERUJVRyAmJiBzdGF0ZSAhPSBJU2VydmVyLlNUQVRFX1NUQVJURURfUFJPRklMRSkKCQkJcmV0dXJuOwoJCgkJaWYgKFNlcnZlckNvcmUuZ2V0U2VydmVyUHJlZmVyZW5jZXMoKS5pc0F1dG9SZXN0YXJ0aW5nKCkpIHsKCQkJdHJ5IHsKCQkJCXNlcnZlci5yZXN0YXJ0KCk7CgkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewoJCQkJVHJhY2UudHJhY2UoVHJhY2UuU0VWRVJFLCAiRXJyb3IgcmVzdGFydGluZyBzZXJ2ZXIiLCBlKTsKCQkJfQoJCX0qLwoJfQoKCS8qKgoJICogQSBuZXcgcmVzb3VyY2UgaGFzIGJlZW4gYWRkZWQuCgkgKgoJICogQHBhcmFtIGV2ZW50IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5JU2VydmVyUmVzb3VyY2UKCSAqLwoJcHVibGljIHZvaWQgc2VydmVyQWRkZWQoSVNlcnZlciBzZXJ2ZXIpIHsKCQlzZXJ2ZXIuYWRkU2VydmVyTGlzdGVuZXIodGhpcyk7Cgl9CgoJLyoqCgkgKiBBIGV4aXN0aW5nIHJlc291cmNlIGhhcyBiZWVuIHJlbW92ZWQuCgkgKgoJICogQHBhcmFtIGV2ZW50IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5JU2VydmVyUmVzb3VyY2UKCSAqLwoJcHVibGljIHZvaWQgc2VydmVyUmVtb3ZlZChJU2VydmVyIHNlcnZlcikgewoJCXNlcnZlci5yZW1vdmVTZXJ2ZXJMaXN0ZW5lcih0aGlzKTsKCX0KCQoJLyogKG5vbi1KYXZhZG9jKQoJICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuSVB1Ymxpc2hMaXN0ZW5lciNtb2R1bGVTdGF0ZUNoYW5nZShvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjIsIGphdmEudXRpbC5MaXN0LCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuSU1vZHVsZSkKCSAqLwoJcHVibGljIHZvaWQgbW9kdWxlU3RhdGVDaGFuZ2UoSVNlcnZlciBzZXJ2ZXIsIElNb2R1bGVbXSBwYXJlbnRzLCBJTW9kdWxlIG1vZHVsZSkgewoJCS8vIGRvIG5vdGhpbmcKCX0KfQ==