LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCqAqCiAqIENvbnRyaWJ1dG9yczoKICogICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwudmlldy5zZXJ2ZXJzOwoKaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwppbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CmltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CmltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSU1vZHVsZTsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC5FY2xpcHNlVXRpbDsKLyoqCiAqIFJlc3RhcnQgYSBtb2R1bGUgb24gYSBzZXJ2ZXIuCiAqLwpwdWJsaWMgY2xhc3MgUmVzdGFydE1vZHVsZUFjdGlvbiBleHRlbmRzIEFjdGlvbiB7Cglwcm90ZWN0ZWQgSVNlcnZlciBzZXJ2ZXI7Cglwcm90ZWN0ZWQgSU1vZHVsZSBtb2R1bGU7CgoJcHVibGljIFJlc3RhcnRNb2R1bGVBY3Rpb24oSVNlcnZlciBzZXJ2ZXIsIElNb2R1bGUgbW9kdWxlKSB7CgkJc3VwZXIoKTsKCQl0aGlzLnNlcnZlciA9IHNlcnZlcjsKCQl0aGlzLm1vZHVsZSA9IG1vZHVsZTsKCQoJCXNldFRleHQobW9kdWxlLmdldE5hbWUoKSk7CgkJCgkJSVByb2plY3QgcHJvamVjdCA9IG1vZHVsZS5nZXRQcm9qZWN0KCk7CgkJaWYgKHByb2plY3QgIT0gbnVsbCkgewoJCQlJbWFnZURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IEVjbGlwc2VVdGlsLmdldFByb2plY3RJbWFnZURlc2NyaXB0b3IocHJvamVjdCk7CgkJCWlmIChkZXNjcmlwdG9yICE9IG51bGwpCgkJCQlzZXRJbWFnZURlc2NyaXB0b3IoZGVzY3JpcHRvcik7CgkJfQoJCgkJLy8gZW5hYmxlIG9yIGRpc2FibGUKCQlpZiAoc2VydmVyID09IG51bGwgfHwgbW9kdWxlID09IG51bGwpIHsKCQkJc2V0RW5hYmxlZChmYWxzZSk7CgkJCXJldHVybjsKCQl9CgoJCS8qaWYgKCEoZHIuZ2V0U2VydmVyU3RhdGUoKSA9PSBJU2VydmVyMi5TVEFURV9TVEFSVEVEIHx8CgkJCWRyLmdldFNlcnZlclN0YXRlKCkgPT0gSVNlcnZlcjIuU1RBVEVfU1RBUlRFRF9ERUJVRykgfHwKCQkJIWRyLmNhblJlc3RhcnRNb2R1bGUobW9kdWxlKSkgewoJCQlzZXRFbmFibGVkKGZhbHNlKTsKCQkJcmV0dXJuOwoJCX0qLwoJCgkJc2V0RW5hYmxlZChzZXJ2ZXIuY2FuUmVzdGFydE1vZHVsZShtb2R1bGUpKTsKCX0KCgkvKioKCSAqIEltcGxlbWVudGF0aW9uIG9mIG1ldGhvZCBkZWZpbmVkIG9uIDxjb2RlPklBY3Rpb248L2NvZGU+LgoJICovCglwdWJsaWMgdm9pZCBydW4oKSB7CgkJdHJ5IHsKCQkJc2VydmVyLnJlc3RhcnRNb2R1bGUobW9kdWxlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKCQkJLy8gaWdub3JlCgkJfQoJfQp9