LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDE2IEZ1bmRhY2nzbiBUZWNuYWxpYSBSZXNlYXJjaCAmIElubm92YXRpb24gYW5kIEtQSVQgVGVjaG5vbG9naWVzLgogKgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAogKgogKiBDb250cmlidXRvcnM6CiAqICAgSHVhc2NhciBFc3Bpbm96YShUZWNuYWxpYSkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICogICBBbGVqYW5kcmEgUnXteihUZWNuYWxpYSkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICogICBJZG95YSBEZWwgUu1vKFRlY25hbGlhKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKiAgIE1hcmkgQ2FybWVuIFBhbGFjaW9zKFRlY25hbGlhKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKiAgIEFuZ2VsIEzzcGV6KFRlY25hbGlhKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKiAgIEphbiBNYXVlcnNiZXJnZXIoS1BJVCktIEltcHJvdmVtZW50cyBpbXBsZW1lbnRhdGlvbgogKiAgIFNhc2NoYSBCYXVtZ2FydChLUElUKS0gSW1wcm92ZW1lbnRzIGltcGxlbWVudGF0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5jZXJ0LmluZnJhLnN2bmtpdDsKCgppbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwppbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CmltcG9ydCBvcmcudG1hdGVzb2Z0LnN2bi5jb3JlLlNWTkV4Y2VwdGlvbjsKaW1wb3J0IG9yZy50bWF0ZXNvZnQuc3ZuLmNvcmUuU1ZOTm9kZUtpbmQ7CmltcG9ydCBvcmcudG1hdGVzb2Z0LnN2bi5jb3JlLlNWTlVSTDsKaW1wb3J0IG9yZy50bWF0ZXNvZnQuc3ZuLmNvcmUuYXV0aC5JU1ZOQXV0aGVudGljYXRpb25NYW5hZ2VyOwppbXBvcnQgb3JnLnRtYXRlc29mdC5zdm4uY29yZS5pbnRlcm5hbC5pby5kYXYuREFWUmVwb3NpdG9yeUZhY3Rvcnk7CmltcG9ydCBvcmcudG1hdGVzb2Z0LnN2bi5jb3JlLmlvLlNWTlJlcG9zaXRvcnk7CmltcG9ydCBvcmcudG1hdGVzb2Z0LnN2bi5jb3JlLmlvLlNWTlJlcG9zaXRvcnlGYWN0b3J5OwppbXBvcnQgb3JnLnRtYXRlc29mdC5zdm4uY29yZS53Yy5TVk5XQ1V0aWw7CgoKcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewoKCS8vIFRoZSBwbHVnLWluIElECgkJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLm9wZW5jZXJ0LmluZnJhLnN2bmtpdCI7IC8vJE5PTi1OTFMtMSQKCgkJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQoJCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CgkJCgkJCgkJCgkJCgkJcHVibGljIHN0YXRpYyBTVk5SZXBvc2l0b3J5IHJlcG9zaXRvcnk7CgkJCgkJLyoqCgkJICogVGhlIGNvbnN0cnVjdG9yCgkJICovCgkJcHVibGljIEFjdGl2YXRvcigpIHsKCQl9CgoJCS8qCgkJICogKG5vbi1KYXZhZG9jKQoJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCgkJICovCgkJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKCQkJCgkJCQoJCQkKCQkJc3VwZXIuc3RhcnQoY29udGV4dCk7CgkJCXBsdWdpbiA9IHRoaXM7CgkJfQoKCQkvKgoJCSAqIChub24tSmF2YWRvYykKCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCgkJICovCgkJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewoJCQlwbHVnaW4gPSBudWxsOwoJCQlzdXBlci5zdG9wKGNvbnRleHQpOwoJCX0KCQkKCQlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgewoJCQlyZXR1cm4gcGx1Z2luOwoJCX0KCQkKCQkKCQlwdWJsaWMgc3RhdGljIFNWTlJlcG9zaXRvcnkgZ2V0UmVwb3NpdG9yeSgpIHsKCQkJcmV0dXJuIHJlcG9zaXRvcnk7CgkJfQoKfQo=