LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAqgKiAKICogQ29udHJpYnV0b3JzOgogKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwuY29tbWFuZDsKCmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcldvcmtpbmdDb3B5OwppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLlNlcnZlcldvcmtpbmdDb3B5OwppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC5NZXNzYWdlczsKLyoqCiAqIENvbW1hbmQgdG8gY2hhbmdlIHRoZSBzZXJ2ZXIncyBhdXRvLXB1Ymxpc2ggc2V0dGluZy4KICovCnB1YmxpYyBjbGFzcyBTZXRTZXJ2ZXJBdXRvUHVibGlzaERlZmF1bHRDb21tYW5kIGV4dGVuZHMgU2VydmVyQ29tbWFuZCB7Cglwcm90ZWN0ZWQgYm9vbGVhbiB0aW1lOwoJcHJvdGVjdGVkIGJvb2xlYW4gb2xkVGltZTsKCgkvKioKCSAqIFNldFNlcnZlckF1dG9QdWJsaXNoRGVmYXVsdENvbW1hbmQgY29uc3RydWN0b3IuCgkgKiAKCSAqIEBwYXJhbSBzZXJ2ZXIgYSBzZXJ2ZXIKCSAqIEBwYXJhbSB0aW1lIDxjb2RlPnRydWU8L2NvZGU+IHRvIHVzZSB0aGUgZGVmYXVsdCB0aW1lCgkgKi8KCXB1YmxpYyBTZXRTZXJ2ZXJBdXRvUHVibGlzaERlZmF1bHRDb21tYW5kKElTZXJ2ZXJXb3JraW5nQ29weSBzZXJ2ZXIsIGJvb2xlYW4gdGltZSkgewoJCXN1cGVyKHNlcnZlciwgTWVzc2FnZXMuc2VydmVyRWRpdG9yT3ZlcnZpZXdBdXRvUHVibGlzaENvbW1hbmQpOwoJCXRoaXMudGltZSA9IHRpbWU7Cgl9CgoJLyoqCgkgKiBFeGVjdXRlIHRoZSBjb21tYW5kLgoJICovCglwdWJsaWMgdm9pZCBleGVjdXRlKCkgewoJCVNlcnZlcldvcmtpbmdDb3B5IHN3YyA9IChTZXJ2ZXJXb3JraW5nQ29weSkgc2VydmVyOwoJCW9sZFRpbWUgPSBzd2MuZ2V0QXV0b1B1Ymxpc2hEZWZhdWx0KCk7CgkJc3djLnNldEF1dG9QdWJsaXNoRGVmYXVsdCh0aW1lKTsKCX0KCgkvKioKCSAqIFVuZG8gdGhlIGNvbW1hbmQuCgkgKi8KCXB1YmxpYyB2b2lkIHVuZG8oKSB7CgkJU2VydmVyV29ya2luZ0NvcHkgc3djID0gKFNlcnZlcldvcmtpbmdDb3B5KSBzZXJ2ZXI7CgkJc3djLnNldEF1dG9QdWJsaXNoRGVmYXVsdChvbGRUaW1lKTsKCX0KfQ==