LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDAzIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCqAqCiAqIENvbnRyaWJ1dG9yczoKICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWw7CgppbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLio7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUucmVzb3VyY2VzLio7Ci8qKgogKiBBIHB1Ymxpc2hlciBmb3IgYSBwcm9qZWN0IHdpdGhpbiB0aGUgd29ya2JlbmNoLiBUaGlzIGNsYXNzCiAqIGtub3dzIHdoaWNoIHJlc291cmNlcyB3aXRoaW4gdGhlIHdvcmtiZW5jaCBzaG91bGQgYmUgcHVibGlzaGVkCiAqIHRvIHRoZSBzZXJ2ZXIsIGFuZCB3aGVyZSB0aGV5IGdvLiBJbiBhZGRpdGlvbiwgaXQgaGFzIHRoZQogKiBhYmlsaXR5IHRvIHB1Ymxpc2ggZmlsZXMgYW5kIGZvbGRlcnMgdG8gdGhlIHNlcnZlciwgYW5kIGRlbGV0ZQogKiB0aGVtIGFzIHdlbGwuCiAqCiAqIDxwPlRoZSBjbGFzcyBjYW4gYXNzdW1lIHRoYXQgdGhlIGRlbGV0ZSgpLCBwdWJsaXNoKCksIGFuZAogKiBnZXRSZW1vdGVSZXNvdXJjZXMoKSBtZXRob2RzIHdpbGwgb25seSBiZSBjYWxsZWQgYmV0d2VlbiBjYWxscwogKiB0byBwdWJsaXNoU3RhcnQoKSBhbmQgcHVibGlzaFN0b3AoKSBvbiB0aGUgc2VydmVyLgogKiAoaW4gb3RoZXIgd29yZHMsIHRoZXkgY2FuIG1ha2UgdXNlIG9mIGEgc2hhcmVkIGNvbm5lY3Rpb24KICogd2l0aCB0aGUgc2VydmVyKSBBbnkgb3RoZXIgbWV0aG9kcyBhcmUgdmFsaWQgdG8gYmUKICogY2FsbGVkIGF0IGFueSB0aW1lLjwvcD4KICovCnB1YmxpYyBpbnRlcmZhY2UgSVB1Ymxpc2hlciB7CgkvKioKCSAqIFJldHVybnMgdGhlIG1hcHBpbmcgb2YgdGhpcyBmaWxlIG9uIHRoZSByZW1vdGUKCSAqIHN5c3RlbS4gUmV0dXJuIG51bGwgaWYgdGhpcyBmaWxlIHNob3VsZCBub3QgYmUKCSAqIGNvcGllZCB0byB0aGUgcmVtb3RlIHNlcnZlci4KCSAqCgkgKiBAcGFyYW0gcmVzb3VyY2Ugb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnJlc291cmNlcy5JTW9kdWxlUmVzb3VyY2UKCSAqIEByZXR1cm4gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVBhdGgKCSAqLwoJcHVibGljIElQYXRoIGdldE1hcHBlZExvY2F0aW9uKElNb2R1bGVSZXNvdXJjZSByZXNvdXJjZSk7CgoJLyoqCgkgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgbWF5IGJlIGFueSBmaWxlcyBvciBmb2xkZXJzIHdpdGhpbgoJICogdGhpcyBjb250YWluZXIgdGhhdCBzaG91bGQgYmUgbWFwcGVkIHRvIHRoZSByZW1vdGUgc3lzdGVtLgoJICogUmV0dXJucyBmYWxzZSBpZiBmaWxlcyB3aXRoaW4gdGhpcyBmb2xkZXIgYXJlIG5ldmVyIGNvcGllZAoJICogdG8gdGhlIHJlbW90ZSBzeXN0ZW0uCgkgKgoJICogQHBhcmFtIGZvbGRlciBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUucmVzb3VyY2VzLklNb2R1bGVGb2xkZXIKCSAqIEByZXR1cm4gYm9vbGVhbgoJICovCglwdWJsaWMgYm9vbGVhbiBzaG91bGRNYXBNZW1iZXJzKElNb2R1bGVGb2xkZXIgZm9sZGVyKTsKCgkvKioKCSAqIFJldHVybnMgYSBsaXN0IG9mIHRoZSByZW1vdGUgcmVzb3VyY2VzIGF0IHRoZSByb290IGxldmVsCgkgKiBvZiB0aGUgcmVtb3RlIGxvY2F0aW9uLiBXaGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgdGhlCgkgKiBmdWxsIHJlbW90ZSByZXNvdXJjZSB0cmVlIHNob3VsZCBiZSBidWlsdCwgd2hpY2ggY2FuIGJlCgkgKiBmb3VuZCBmcm9tIHRoZXNlIHJvb3QgcmVzb3VyY2VzLgoJICoKCSAqIDxwPlRoZSByZXNvdXJjZXMgcmV0dXJuZWQgbWF5IGJlIGZvbGRlcnMgb3IgZmlsZXMuIFRoaXMgbWV0aG9kCgkgKiBzaG91bGQgbm90IGNhY2hlIGRhdGEgYmV0d2VlbiBjYWxscy4gKGluIG90aGVyIHdvcmRzLCBlYWNoCgkgKiBjYWxsIHRvIHRoaXMgbWV0aG9kIG11c3QgcmVzdWx0IGluIG9idGFpbmluZyB0aGUgZGF0YSBmcm9tCgkgKiB0aGUgc2VydmVyKTwvcD4KCSAqCgkgKiBAcGFyYW0gbW9uaXRvciBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcgoJICogQHJldHVybiBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUucmVzb3VyY2VzLklSZW1vdGVSZXNvdXJjZVtdCgkgKi8KCXB1YmxpYyBJUmVtb3RlUmVzb3VyY2VbXSBnZXRSZW1vdGVSZXNvdXJjZXMoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbjsKCgkvKioKCSAqIERlbGV0ZSB0aGUgZm9sbG93aW5nIHJlc291cmNlcyBmcm9tIHRoZSByZW1vdGUgbWFjaGluZS4gVGhlCgkgKiByZW1vdGUgcmVzb3VyY2UgbWF5IGJlIGEgZmlsZSBvciBmb2xkZXIuIFRoaXMgbWV0aG9kIHNob3VsZAoJICogcmV0dXJuIGFuIGFycmF5IG9mIHNpbXBsZSBJU3RhdHVzIChzaG91bGQgbm90IGJlIE11bHRpU3RhdHVzKQoJICogd2l0aCB0aGUgcmVzdWx0IG9mIGV2ZXJ5IGRlbGV0aW9uIGF0dGVtcHQuCgkgKgoJICogQHBhcmFtIHJlc291cmNlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIucmVzb3VyY2VzLklSZW1vdGVSZXNvdXJjZVtdCgkgKiBAcGFyYW0gbW9uaXRvciBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcgoJICogQHJldHVybiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1c1tdCgkgKi8KCXB1YmxpYyBJU3RhdHVzW10gZGVsZXRlKElSZW1vdGVSZXNvdXJjZVtdIHJlc291cmNlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uOwoKCS8qKgoJICogUHVibGlzaCB0aGUgZ2l2ZW4gcmVzb3VyY2VzIHRvIHRoZSByZW1vdGUgbG9jYXRpb24uIElmIHRoZQoJICogcmVzb3VyY2UgaXMgYSBmb2xkZXIgKElGb2xkZXIpLCB0aGUgZm9sZGVyIHNob3VsZCBiZQoJICogcmVjcmVhdGVkIG9uIHRoZSByZW1vdGUgbWFjaGluZS4gSWYgdGhlIHJlc291cmNlIGlzIGp1c3QgYQoJICogZmlsZSwgaXQgc2hvdWxkIGJlIGNvcGllZCB0byB0aGUgcmVtb3RlIG1hY2hpbmUuICBUaGlzCgkgKiBtZXRob2Qgc2hvdWxkIHJldHVybiBhbiBhcnJheSBvZiBzaW1wbGUgSVN0YXR1cyAoc2hvdWxkCgkgKiBub3QgYmUgTXVsdGlTdGF0dXMpIHdpdGggdGhlIHJlc3VsdCBvZiBldmVyeSBwdWJsaXNoCgkgKiBhdHRlbXB0LgoJICoKCSAqIEBwYXJhbSByZXNvdXJjZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnJlc291cmNlcy5JTW9kdWxlUmVzb3VyY2VbXQoJICogQHBhcmFtIG1vbml0b3Igb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IKCSAqIEByZXR1cm4gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXNbXQoJICovCglwdWJsaWMgSVN0YXR1c1tdIHB1Ymxpc2goSU1vZHVsZVJlc291cmNlW10gcmVzb3VyY2UsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb247CgoJLyoqCgkgKiBEZWxldGUgdGhlIGVudGlyZSBtb2R1bGUgZnJvbSB0aGUgcmVtb3RlIGxvY2F0aW9uLgoJICoKCSAqIEBwYXJhbSBtb25pdG9yIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yCgkgKiBAcmV0dXJuIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzCgkgKi8KCXB1YmxpYyBJU3RhdHVzIGRlbGV0ZUFsbChJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uOwp9Cg==