LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIENvcHlyaWdodCAoYykgMjAxMyBDRUEgTElTVC4KICoKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKICoKICogQ29udHJpYnV0b3JzOgogKgkJUulnaXMgQ0hFVlJFTDogY2hldnJlbC5yZWdpcyA8YXQ+IGdtYWlsLmNvbQogKgkJQ0VBIExJU1QgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuZGlhZ3JhbS5wYXJhbWV0cmljLnByb3ZpZGVyOwoKaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwppbXBvcnQgb3JnLmVjbGlwc2UuZ21mLnJ1bnRpbWUuZW1mLnR5cGUuY29yZS5JRWxlbWVudFR5cGU7CgovKioKICogVGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgYW4gQVBJIGZvciBhY2Nlc3NpbmcgdGhlIGxvY2FsIGdyYXBoaWNhbCB0eXBlIHJlZ2lzdHJ5LgogKiBUaGlzIHJlZ2lzdHJ5IHByb3ZpZGVzIGEgZ3JhcGhpY2FsIHR5cGUgZm9yIGV4aXN0aW5nIG1vZGVsIGVsZW1lbnRzLgogKi8KcHVibGljIGludGVyZmFjZSBJR3JhcGhpY2FsVHlwZVJlZ2lzdHJ5IHsKCgkvKiogQ29uc3RhbnQgZm9yIHVuZGVmaW5lZCBncmFwaGljYWwgdHlwZSAqLwoJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVU5ERUZJTkVEX1RZUEUgPSAidW5kZWZpbmVkX3R5cGUiOwoKCS8qKgoJICogR2V0IGEgdmFsaWQgZWRnZSBncmFwaGljYWwgdHlwZSBmb3IgdGhlIGRvbWFpbiBlbGVtZW50LgoJICoKCSAqIEBwYXJhbSBkb21haW5FbGVtZW50CgkgKiAgICAgICAgICAgIHRoZSBkb21haW4gZWxlbWVudC4KCSAqIEByZXR1cm4gdGhlIGRvbWFpbiBlbGVtZW50IGdyYXBoaWNhbCB0eXBlLgoJICovCglwdWJsaWMgU3RyaW5nIGdldEVkZ2VHcmFwaGljYWxUeXBlKEVPYmplY3QgZG9tYWluRWxlbWVudCk7CgoJLyoqCgkgKiBHZXQgYSB2YWxpZCBlZGdlIGdyYXBoaWNhbCB0eXBlIGZvciB0aGUgZWxlbWVudCB0eXBlLgoJICoKCSAqIEBwYXJhbSBlbGVtZW50VHlwZQoJICogICAgICAgICAgICB0aGUgZWxlbWVudCB0eXBlLgoJICogQHBhcmFtIGNvbnRhaW5lclR5cGUKCSAqICAgICAgICAgICAgdGhlIHR5cGUgb2YgdGhlIGdyYXBoaWNhbCBvd25lciBvZiB0aGUgZG9tYWluIGVsZW1lbnQuCgkgKiBAcmV0dXJuIHRoZSBkb21haW4gZWxlbWVudCBncmFwaGljYWwgdHlwZS4KCSAqLwoJcHVibGljIFN0cmluZyBnZXRFZGdlR3JhcGhpY2FsVHlwZShJRWxlbWVudFR5cGUgZWxlbWVudFR5cGUpOwoKCS8qKgoJICogR2V0IGEgdmFsaWQgZWRnZSBncmFwaGljYWwgdHlwZSBmb3IgdGhlIHByb3Bvc2VkIHR5cGUuCgkgKgoJICogQHBhcmFtIHByb3Bvc2VkVHlwZQoJICogICAgICAgICAgICB0aGUgcHJvcG9zZWQgdHlwZS4KCSAqIEBwYXJhbSBjb250YWluZXJUeXBlCgkgKiAgICAgICAgICAgIHRoZSB0eXBlIG9mIHRoZSBncmFwaGljYWwgb3duZXIgb2YgdGhlIGRvbWFpbiBlbGVtZW50LgoJICogQHJldHVybiB0aGUgZG9tYWluIGVsZW1lbnQgZ3JhcGhpY2FsIHR5cGUuCgkgKi8KCXB1YmxpYyBTdHJpbmcgZ2V0RWRnZUdyYXBoaWNhbFR5cGUoU3RyaW5nIHByb3Bvc2VkVHlwZSk7CgoJLyoqCgkgKiBHZXQgYSB2YWxpZCBub2RlIGdyYXBoaWNhbCB0eXBlIGZvciB0aGUgZG9tYWluIGVsZW1lbnQuCgkgKgoJICogQHBhcmFtIGRvbWFpbkVsZW1lbnQKCSAqICAgICAgICAgICAgdGhlIGRvbWFpbiBlbGVtZW50LgoJICogQHBhcmFtIGNvbnRhaW5lclR5cGUKCSAqICAgICAgICAgICAgdGhlIHR5cGUgb2YgdGhlIGdyYXBoaWNhbCBvd25lciBvZiB0aGUgZG9tYWluIGVsZW1lbnQuCgkgKiBAcmV0dXJuIHRoZSBkb21haW4gZWxlbWVudCBncmFwaGljYWwgdHlwZS4KCSAqLwoJcHVibGljIFN0cmluZyBnZXROb2RlR3JhcGhpY2FsVHlwZShFT2JqZWN0IGRvbWFpbkVsZW1lbnQsIFN0cmluZyBjb250YWluZXJUeXBlKTsKCgkvKioKCSAqIEdldCBhIHZhbGlkIG5vZGUgZ3JhcGhpY2FsIHR5cGUgZm9yIHRoZSBlbGVtZW50IHR5cGUuCgkgKgoJICogQHBhcmFtIGVsZW1lbnRUeXBlCgkgKiAgICAgICAgICAgIHRoZSBlbGVtZW50IHR5cGUuCgkgKiBAcGFyYW0gY29udGFpbmVyVHlwZQoJICogICAgICAgICAgICB0aGUgdHlwZSBvZiB0aGUgZ3JhcGhpY2FsIG93bmVyIG9mIHRoZSBkb21haW4gZWxlbWVudC4KCSAqIEByZXR1cm4gdGhlIGRvbWFpbiBlbGVtZW50IGdyYXBoaWNhbCB0eXBlLgoJICovCglwdWJsaWMgU3RyaW5nIGdldE5vZGVHcmFwaGljYWxUeXBlKElFbGVtZW50VHlwZSBlbGVtZW50VHlwZSwgU3RyaW5nIGNvbnRhaW5lclR5cGUpOwoKCS8qKgoJICogR2V0IGEgdmFsaWQgbm9kZSBncmFwaGljYWwgdHlwZSBmb3IgdGhlIHByb3Bvc2VkIHR5cGUuCgkgKgoJICogQHBhcmFtIHByb3Bvc2VkVHlwZQoJICogICAgICAgICAgICB0aGUgcHJvcG9zZWQgdHlwZS4KCSAqIEBwYXJhbSBjb250YWluZXJUeXBlCgkgKiAgICAgICAgICAgIHRoZSB0eXBlIG9mIHRoZSBncmFwaGljYWwgb3duZXIgb2YgdGhlIGRvbWFpbiBlbGVtZW50LgoJICogQHJldHVybiB0aGUgZG9tYWluIGVsZW1lbnQgZ3JhcGhpY2FsIHR5cGUuCgkgKi8KCXB1YmxpYyBTdHJpbmcgZ2V0Tm9kZUdyYXBoaWNhbFR5cGUoU3RyaW5nIHByb3Bvc2VkVHlwZSwgU3RyaW5nIGNvbnRhaW5lclR5cGUpOwoKCS8qKgoJICogVGVzdCBpZiB0aGUgdHlwZSBpcyBhIGtub3duIGVkZ2UgZ3JhcGhpY2FsIHR5cGUgaW4gdGhpcyBkaWFncmFtCgkgKgoJICogQHBhcmFtIHR5cGUKCSAqICAgICAgICAgICAgdGhlIHR5cGUgdG8gdGVzdAoJICogQHJldHVybiB0cnVlIGlmIHRoZSB0eXBlIGlzIGtub3duCgkgKi8KCXB1YmxpYyBib29sZWFuIGlzS25vd25FZGdlVHlwZShTdHJpbmcgdHlwZSk7CgoJLyoqCgkgKiBUZXN0IGlmIHRoZSB0eXBlIGlzIGEga25vd24gbm9kZSBncmFwaGljYWwgdHlwZSBpbiB0aGlzIGRpYWdyYW0KCSAqCgkgKiBAcGFyYW0gdHlwZQoJICogICAgICAgICAgICB0aGUgdHlwZSB0byB0ZXN0CgkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHR5cGUgaXMga25vd24KCSAqLwoJcHVibGljIGJvb2xlYW4gaXNLbm93bk5vZGVUeXBlKFN0cmluZyB0eXBlKTsKCn0K