LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAqgKiAKICogQ29udHJpYnV0b3JzOgogKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwud2l6YXJkOwoKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5JQ2xpZW50OwppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC5TZXJ2ZXJVSVBsdWdpbjsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwud2l6YXJkLnBhZ2UuU2VsZWN0Q2xpZW50Q29tcG9zaXRlOwppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS53aXphcmQuSVdpemFyZEhhbmRsZTsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkud2l6YXJkLldpemFyZEZyYWdtZW50OwppbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwovKioKICogQSB3aXphcmQgdXNlZCB0byBzZWxlY3QgYSBzZXJ2ZXIgY2xpZW50IGZyb20gYSBsaXN0LgogKi8KcHVibGljIGNsYXNzIFNlbGVjdENsaWVudFdpemFyZCBleHRlbmRzIFRhc2tXaXphcmQgewoJcHJvdGVjdGVkIHN0YXRpYyBTZWxlY3RDbGllbnRDb21wb3NpdGUgY29tcDsKCgkvKioKCSAqIFNlbGVjdENsaWVudFdpemFyZCBjb25zdHJ1Y3RvciBjb21tZW50LgoJICogCgkgKiBAcGFyYW0gY2xpZW50cyBhbiBhcnJheSBvZiBjbGllbnRzCgkgKi8KCXB1YmxpYyBTZWxlY3RDbGllbnRXaXphcmQoZmluYWwgSUNsaWVudFtdIGNsaWVudHMpIHsKCQlzdXBlcihTZXJ2ZXJVSVBsdWdpbi5nZXRSZXNvdXJjZSgiJXdpelNlbGVjdENsaWVudFdpemFyZFRpdGxlIiksCgkJCW5ldyBXaXphcmRGcmFnbWVudCgpIHsJCQkJCQkKCQkJCXB1YmxpYyBib29sZWFuIGhhc0NvbXBvc2l0ZSgpIHsKCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCX0KCgkJCQkvKiAobm9uLUphdmFkb2MpCgkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwudGFzay5XaXphcmRUYXNrI2dldFdpemFyZFBhZ2UoKQoJCQkJICovCgkJCQlwdWJsaWMgQ29tcG9zaXRlIGNyZWF0ZUNvbXBvc2l0ZShDb21wb3NpdGUgcGFyZW50LCBJV2l6YXJkSGFuZGxlIHdpemFyZCkgewoJCQkJCWNvbXAgPSBuZXcgU2VsZWN0Q2xpZW50Q29tcG9zaXRlKHBhcmVudCwgd2l6YXJkLCBjbGllbnRzKTsKCQkJCQlyZXR1cm4gY29tcDsKCQkJCX0KCQkJfQoJCSk7CgoJCXNldEZvcmNlUHJldmlvdXNBbmROZXh0QnV0dG9ucyh0cnVlKTsKCX0KCgkvKioKCSAqIFJldHVybiB0aGUgc2VsZWN0ZWQgY2xpZW50LgoJICogQHJldHVybiBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSUNsaWVudAoJICovCglwdWJsaWMgSUNsaWVudCBnZXRTZWxlY3RlZENsaWVudCgpIHsKCQlyZXR1cm4gY29tcC5nZXRTZWxlY3RlZENsaWVudCgpOwoJfQp9