LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDE2IEZ1bmRhY2nzbiBUZWNuYWxpYSBSZXNlYXJjaCAmIElubm92YXRpb24uCiAqCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCiAqCiAqIENvbnRyaWJ1dG9yczoKICogICBIdWFzY2FyIEVzcGlub3phIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqICAgQWxlamFuZHJhIFJ17XogLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICogICBJZG95YSBEZWwgUu1vIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqICAgTWFyaSBDYXJtZW4gUGFsYWNpb3MgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICogICBBbmdlbCBM83BleiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqCiAqIEdlbmVyYXRlZCB3aXRoIEFjY2VsZW8KICovCnBhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmNlcnQuYXBtLmJhc2VsaW5lLmJhc2VsaW5lLnBhcnRzOwoKLy8gU3RhcnQgb2YgdXNlciBjb2RlIGZvciBpbXBvcnRzCmltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKCmltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWVmLnJ1bnRpbWUudWkud2lkZ2V0cy5yZWZlcmVuY2VzdGFibGUuUmVmZXJlbmNlc1RhYmxlU2V0dGluZ3M7CgppbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJGaWx0ZXI7CgoKLy8gRW5kIG9mIHVzZXIgY29kZQoKLyoqCiAqIAogKiAKICovCnB1YmxpYyBpbnRlcmZhY2UgQmFzZUFydGVmYWN0Q29tcGxpYW5jZU1hcFByb3BlcnRpZXNFZGl0aW9uUGFydCB7CgoKCgkvKioKCSAqIEluaXQgdGhlIGNvbXBsaWFuY2VNYXAKCSAqIEBwYXJhbSBjdXJyZW50IHRoZSBjdXJyZW50IHZhbHVlCgkgKiBAcGFyYW0gY29udGFpbmdGZWF0dXJlIHRoZSBmZWF0dXJlIHdoZXJlIHRvIG5hdmlnYXRlIGlmIG5lY2Vzc2FyeQoJICogQHBhcmFtIGZlYXR1cmUgdGhlIGZlYXR1cmUgdG8gbWFuYWdlCgkgKi8KCXB1YmxpYyB2b2lkIGluaXRDb21wbGlhbmNlTWFwKFJlZmVyZW5jZXNUYWJsZVNldHRpbmdzIHNldHRpbmdzKTsKCgkvKioKCSAqIFVwZGF0ZSB0aGUgY29tcGxpYW5jZU1hcAoJICogQHBhcmFtIG5ld1ZhbHVlIHRoZSBjb21wbGlhbmNlTWFwIHRvIHVwZGF0ZQoJICogCgkgKi8KCXB1YmxpYyB2b2lkIHVwZGF0ZUNvbXBsaWFuY2VNYXAoKTsKCgkvKioKCSAqIEFkZHMgdGhlIGdpdmVuIGZpbHRlciB0byB0aGUgY29tcGxpYW5jZU1hcCBlZGl0aW9uIGVkaXRvci4KCSAqIAoJICogQHBhcmFtIGZpbHRlcgoJICogICAgICAgICAgICBhIHZpZXdlciBmaWx0ZXIKCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyI2FkZEZpbHRlcihWaWV3ZXJGaWx0ZXIpCgkgKiAKCSAqLwoJcHVibGljIHZvaWQgYWRkRmlsdGVyVG9Db21wbGlhbmNlTWFwKFZpZXdlckZpbHRlciBmaWx0ZXIpOwoKCS8qKgoJICogQWRkcyB0aGUgZ2l2ZW4gZmlsdGVyIHRvIHRoZSBjb21wbGlhbmNlTWFwIGVkaXRpb24gZWRpdG9yLgoJICogCgkgKiBAcGFyYW0gZmlsdGVyCgkgKiAgICAgICAgICAgIGEgdmlld2VyIGZpbHRlcgoJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXIjYWRkRmlsdGVyKFZpZXdlckZpbHRlcikKCSAqIAoJICovCglwdWJsaWMgdm9pZCBhZGRCdXNpbmVzc0ZpbHRlclRvQ29tcGxpYW5jZU1hcChWaWV3ZXJGaWx0ZXIgZmlsdGVyKTsKCgkvKioKCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBjb250YWluZWQgaW5zaWRlIHRoZSBjb21wbGlhbmNlTWFwIHRhYmxlCgkgKiAKCSAqLwoJcHVibGljIGJvb2xlYW4gaXNDb250YWluZWRJbkNvbXBsaWFuY2VNYXBUYWJsZShFT2JqZWN0IGVsZW1lbnQpOwoKCgoKCS8qKgoJICogSW5pdCB0aGUgYXJ0ZWZhY3RDb21wbGlhbmNlTWFwCgkgKiBAcGFyYW0gY3VycmVudCB0aGUgY3VycmVudCB2YWx1ZQoJICogQHBhcmFtIGNvbnRhaW5nRmVhdHVyZSB0aGUgZmVhdHVyZSB3aGVyZSB0byBuYXZpZ2F0ZSBpZiBuZWNlc3NhcnkKCSAqIEBwYXJhbSBmZWF0dXJlIHRoZSBmZWF0dXJlIHRvIG1hbmFnZQoJICovCglwdWJsaWMgdm9pZCBpbml0QXJ0ZWZhY3RDb21wbGlhbmNlTWFwKFJlZmVyZW5jZXNUYWJsZVNldHRpbmdzIHNldHRpbmdzKTsKCgkvKioKCSAqIFVwZGF0ZSB0aGUgYXJ0ZWZhY3RDb21wbGlhbmNlTWFwCgkgKiBAcGFyYW0gbmV3VmFsdWUgdGhlIGFydGVmYWN0Q29tcGxpYW5jZU1hcCB0byB1cGRhdGUKCSAqIAoJICovCglwdWJsaWMgdm9pZCB1cGRhdGVBcnRlZmFjdENvbXBsaWFuY2VNYXAoKTsKCgkvKioKCSAqIEFkZHMgdGhlIGdpdmVuIGZpbHRlciB0byB0aGUgYXJ0ZWZhY3RDb21wbGlhbmNlTWFwIGVkaXRpb24gZWRpdG9yLgoJICogCgkgKiBAcGFyYW0gZmlsdGVyCgkgKiAgICAgICAgICAgIGEgdmlld2VyIGZpbHRlcgoJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXIjYWRkRmlsdGVyKFZpZXdlckZpbHRlcikKCSAqIAoJICovCglwdWJsaWMgdm9pZCBhZGRGaWx0ZXJUb0FydGVmYWN0Q29tcGxpYW5jZU1hcChWaWV3ZXJGaWx0ZXIgZmlsdGVyKTsKCgkvKioKCSAqIEFkZHMgdGhlIGdpdmVuIGZpbHRlciB0byB0aGUgYXJ0ZWZhY3RDb21wbGlhbmNlTWFwIGVkaXRpb24gZWRpdG9yLgoJICogCgkgKiBAcGFyYW0gZmlsdGVyCgkgKiAgICAgICAgICAgIGEgdmlld2VyIGZpbHRlcgoJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXIjYWRkRmlsdGVyKFZpZXdlckZpbHRlcikKCSAqIAoJICovCglwdWJsaWMgdm9pZCBhZGRCdXNpbmVzc0ZpbHRlclRvQXJ0ZWZhY3RDb21wbGlhbmNlTWFwKFZpZXdlckZpbHRlciBmaWx0ZXIpOwoKCS8qKgoJICogQHJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbnNpZGUgdGhlIGFydGVmYWN0Q29tcGxpYW5jZU1hcCB0YWJsZQoJICogCgkgKi8KCXB1YmxpYyBib29sZWFuIGlzQ29udGFpbmVkSW5BcnRlZmFjdENvbXBsaWFuY2VNYXBUYWJsZShFT2JqZWN0IGVsZW1lbnQpOwoKCgoKCgkvKioKCSAqIFJldHVybnMgdGhlIGludGVybmF0aW9uYWxpemVkIHRpdGxlIHRleHQuCgkgKiAKCSAqIEByZXR1cm4gdGhlIGludGVybmF0aW9uYWxpemVkIHRpdGxlIHRleHQuCgkgKiAKCSAqLwoJcHVibGljIFN0cmluZyBnZXRUaXRsZSgpOwoKCS8vIFN0YXJ0IG9mIHVzZXIgY29kZSBmb3IgYWRkaXRpb25hbCBtZXRob2RzCgkKCS8vIEVuZCBvZiB1c2VyIGNvZGUKCn0K