LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiCgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKoCoKICogQ29udHJpYnV0b3JzOgogKiAgICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwoKaW1wb3J0IGphdmEubmV0LlVSTDsKCmltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CgppbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnBsdWdpbi5XU1VJUGx1Z2luOwppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzaS5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQ7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmVjbGlwc2UuV1NETFZhbGlkYXRvcjsKCnB1YmxpYyBjbGFzcyBWYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UKewogIHByaXZhdGUgV1NETFZhbGlkYXRvciB2YWxpZGF0b3I7CiAgCiAgLyogKG5vbi1KYXZhZG9jKQogICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKICAgKi8KICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gCiAgewogICAgc3VwZXIuc2V0VXAoKTsKICAgIC8vIFNldCB0aGUgV1MtSSBwcmVmZXJlbmNlIHRvIGlnbm9yZSBzbyBvbmx5IFdTREwgZXJyb3JzIHdpbGwgYmUgdGVzdGVkLgogICAgV1NVSVBsdWdpbiB3c3VpID0gV1NVSVBsdWdpbi5nZXRJbnN0YW5jZSgpOwogICAgUGVyc2lzdGVudFdTSUNvbnRleHQgd3NpY29udGV4dCA9IHdzdWkuZ2V0V1NJU1NCUENvbnRleHQoKTsKICAgIHdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJKTsKICAgIHdzaWNvbnRleHQgPSB3c3VpLmdldFdTSUFQQ29udGV4dCgpOwogICAgd3NpY29udGV4dC51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpOwogIH0gIAogIAogIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCiAgewogICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UuY2xhc3MsICJWYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZSIpOwogIH0KICAKICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGVTdG9ja1F1b3RlV1NJKCkgdGhyb3dzIEV4Y2VwdGlvbgogIHsKCXZhbGlkYXRvciA9IFdTRExWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKTsKICAgIFVSTCB3c2RsID0gUGVyZm9ybWFuY2VQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KCJkYXRhL1N0b2NrUXVvdGUvU3RvY2tRdW90ZS53c2RsIik7CiAgICBTdHJpbmcgcGF0aCA9IHdzZGwudG9TdHJpbmcoKTsKCQogICAgc3RhcnRNZWFzdXJpbmcoKTsJCiAgICBJVmFsaWRhdGlvblJlcG9ydCB2YWxyZXBvcnQgPSB2YWxpZGF0b3IudmFsaWRhdGUocGF0aCk7CglzdG9wTWVhc3VyaW5nKCk7Cgljb21taXRNZWFzdXJlbWVudHMoKTsKCWFzc2VydFBlcmZvcm1hbmNlKCk7CiAgfQp9Cg==