LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAqgKiAKICogQ29udHJpYnV0b3JzOgogKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWw7CgppbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLio7CmltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyLklPcGVyYXRpb25MaXN0ZW5lcjsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5TZXJ2ZXJTY2hlZHVsaW5nUnVsZTsKLyoqCiAqIAogKi8KcHVibGljIGNsYXNzIFJlc3RhcnRTZXJ2ZXJKb2IgZXh0ZW5kcyBKb2IgewoJcHJvdGVjdGVkIElTZXJ2ZXIgc2VydmVyOwoJcHJvdGVjdGVkIFN0cmluZyBsYXVuY2hNb2RlOwoJcHJvdGVjdGVkIGJvb2xlYW4gaXNSZXN0YXJ0Q29tcGxldGVkID0gZmFsc2U7Cglwcm90ZWN0ZWQgSVN0YXR1cyByZXN1bHRTdGF0dXM7CgkKCXB1YmxpYyBzdGF0aWMgdm9pZCByZXN0YXJ0U2VydmVyKElTZXJ2ZXIgc2VydmVyLCBTdHJpbmcgbGF1bmNoTW9kZSkgewoJCVJlc3RhcnRTZXJ2ZXJKb2Igam9iID0gbmV3IFJlc3RhcnRTZXJ2ZXJKb2Ioc2VydmVyLCBsYXVuY2hNb2RlKTsKCQlqb2Iuc2V0VXNlcih0cnVlKTsKCQlqb2Iuc2NoZWR1bGUoKTsKCX0KCglwdWJsaWMgUmVzdGFydFNlcnZlckpvYihJU2VydmVyIHNlcnZlciwgU3RyaW5nIGxhdW5jaE1vZGUpIHsKCQlzdXBlcigiUmVzdGFydCBzZXJ2ZXIiKTsKCQl0aGlzLnNlcnZlciA9IHNlcnZlcjsKCQl0aGlzLmxhdW5jaE1vZGUgPSBsYXVuY2hNb2RlOwoJCXNldFJ1bGUobmV3IFNlcnZlclNjaGVkdWxpbmdSdWxlKHNlcnZlcikpOwoJfQoKCS8qIChub24tSmF2YWRvYykKCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLkludGVybmFsSm9iI3J1bihvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcikKCSAqLwoJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewoJCUlPcGVyYXRpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBJT3BlcmF0aW9uTGlzdGVuZXIoKSB7CgkJCXB1YmxpYyB2b2lkIGRvbmUoSVN0YXR1cyByZXN1bHQpIHsKCQkJCWlzUmVzdGFydENvbXBsZXRlZCA9IHRydWU7CgkJCQlyZXN1bHRTdGF0dXMgPSByZXN1bHQ7CgkJCX0KCQl9OwoJCXNlcnZlci5yZXN0YXJ0KGxhdW5jaE1vZGUsIGxpc3RlbmVyKTsKCQkKCQkvLyBibG9jayB1dGlsIHRoZSByZXN0YXJ0IGlzIGNvbXBsZXRlZAoJCXdoaWxlICghaXNSZXN0YXJ0Q29tcGxldGVkKSB7CgkJCXRyeSB7CgkJCQlUaHJlYWQuc2xlZXAoMjUwKTsKCQkJfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewoJCQkJLy8gRG8gbm90aGluZy4KCQkJfQoJCX0KCQkKCQlyZXR1cm4gcmVzdWx0U3RhdHVzID09IG51bGwgPyBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFNlcnZlclVJUGx1Z2luLlBMVUdJTl9JRCwgMCwgIiIsIG51bGwpIDogcmVzdWx0U3RhdHVzOwoJfQp9