LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCqAqCiAqIENvbnRyaWJ1dG9yczoKICogICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUuaW50ZXJuYWwuY29tbWFuZDsKCmltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CgppbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS5JVG9tY2F0Q29uZmlndXJhdGlvbldvcmtpbmdDb3B5OwppbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS5pbnRlcm5hbC5Ub21jYXRQbHVnaW47CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlclBvcnQ7Ci8qKgogKiBDb21tYW5kIHRvIGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbiBwb3J0LgogKi8KcHVibGljIGNsYXNzIE1vZGlmeVBvcnRDb21tYW5kIGV4dGVuZHMgQ29uZmlndXJhdGlvbkNvbW1hbmQgewoJcHJvdGVjdGVkIFN0cmluZyBpZDsKCXByb3RlY3RlZCBpbnQgcG9ydDsKCXByb3RlY3RlZCBpbnQgb2xkUG9ydDsKCgkvKioKCSAqIENoYW5nZVBvcnRDb21tYW5kIGNvbnN0cnVjdG9yIGNvbW1lbnQuCgkgKi8KCXB1YmxpYyBNb2RpZnlQb3J0Q29tbWFuZChJVG9tY2F0Q29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24sIFN0cmluZyBpZCwgaW50IHBvcnQpIHsKCQlzdXBlcihjb25maWd1cmF0aW9uKTsKCQl0aGlzLmlkID0gaWQ7CgkJdGhpcy5wb3J0ID0gcG9ydDsKCX0KCgkvKioKCSAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQuCgkgKiBAcmV0dXJuIGJvb2xlYW4KCSAqLwoJcHVibGljIGJvb2xlYW4gZXhlY3V0ZSgpIHsKCQkvLyBmaW5kIG9sZCBwb3J0IG51bWJlcgoJCUl0ZXJhdG9yIGl0ZXJhdG9yID0gY29uZmlndXJhdGlvbi5nZXRTZXJ2ZXJQb3J0cygpLml0ZXJhdG9yKCk7CgkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewoJCQlJU2VydmVyUG9ydCB0ZW1wID0gKElTZXJ2ZXJQb3J0KSBpdGVyYXRvci5uZXh0KCk7CgkJCWlmIChpZC5lcXVhbHModGVtcC5nZXRJZCgpKSkKCQkJCW9sZFBvcnQgPSB0ZW1wLmdldFBvcnQoKTsKCQl9CgkKCQkvLyBtYWtlIHRoZSBjaGFuZ2UKCQljb25maWd1cmF0aW9uLm1vZGlmeVNlcnZlclBvcnQoaWQsIHBvcnQpOwoJCXJldHVybiB0cnVlOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGlzIGNvbW1hbmQncyBkZXNjcmlwdGlvbi4KCSAqIEByZXR1cm4gamF2YS5sYW5nLlN0cmluZwoJICovCglwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewoJCXJldHVybiBUb21jYXRQbHVnaW4uZ2V0UmVzb3VyY2UoIiVjb25maWd1cmF0aW9uRWRpdG9yQWN0aW9uTW9kaWZ5UG9ydERlc2NyaXB0aW9uIik7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoaXMgY29tbWFuZCdzIGxhYmVsLgoJICogQHJldHVybiBqYXZhLmxhbmcuU3RyaW5nCgkgKi8KCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKCQlyZXR1cm4gVG9tY2F0UGx1Z2luLmdldFJlc291cmNlKCIlY29uZmlndXJhdGlvbkVkaXRvckFjdGlvbk1vZGlmeVBvcnQiKTsKCX0KCgkvKioKCSAqIFVuZG8gdGhlIGNvbW1hbmQuCgkgKi8KCXB1YmxpYyB2b2lkIHVuZG8oKSB7CgkJY29uZmlndXJhdGlvbi5tb2RpZnlTZXJ2ZXJQb3J0KGlkLCBvbGRQb3J0KTsKCX0KfQ==