LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDAzIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCqAqCiAqIENvbnRyaWJ1dG9yczoKICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmU7CgppbXBvcnQgamF2YS51dGlsLkxpc3Q7CgppbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuKjsKLyoqCiAqIElSZXNvdXJjZU1hbmFnZXIgaGFuZGxlcyB0aGUgbWFwcGluZ3MgYmV0d2VlbiByZXNvdXJjZXMKICogYW5kIHNlcnZlcnMgb3IgY29uZmlndXJhdGlvbnMsIGFuZCBjcmVhdGVzIG5vdGlmaWNhdGlvbgogKiBvZiBzZXJ2ZXJzIG9yIGNvbmZpZ3VyYXRpb25zIGJlaW5nIGFkZGVkLCByZW1vdmVkLCBvciBtb2RpZmllZC4KICoKICogPHA+U2VydmVycyBhbmQgY29uZmlndXJhdGlvbnMgbWF5IGJlIGEgc2luZ2xlIHJlc291cmNlLCBvciB0aGV5IG1heQogKiBiZSBhIGZvbGRlciB0aGF0IGNvbnRhaW5zIGEgZ3JvdXAgb2YgZmlsZXMuRm9sZGVyLXJlc291cmNlcyBtYXkgbm90CiAqIGNvbnRhaW4gb3RoZXIgc2VydmVycyBvciBjb25maWd1cmF0aW9ucy4gKGkuZS4gdGhleSBjYW5ub3QgYmUgbmVzdGVkKTwvcD4KICoKICogPHA+Q2hhbmdlcyBtYWRlIHRvIHNlcnZlciBlbGVtZW50IHJlc291cmNlcyAoZS5nLiBhbiBlZGl0IG9yIGRlbGV0aW9uIG9mIGEKICogZmlsZSkgYXJlIHByb2Nlc3NlZCBhcyBhIHJlbG9hZCBvciBkZWxldGlvbiBvZiB0aGUgZWxlbWVudC4gTm90ZSB0aGF0IHNhdmluZwogKiBhIGZvbGRlci1iYXNlZCBzZXJ2ZXIgb3IgY29uZmlndXJhdGlvbiBtYXkgcmVzdWx0IGluIGEgc2VyaWVzIG9mIHJlbG9hZAogKiBldmVudHMuPC9wPgogKgogKiA8cD5UaGlzIGludGVyZmFjZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2xpZW50cy48L3A+CiAqLwpwdWJsaWMgaW50ZXJmYWNlIElSZXNvdXJjZU1hbmFnZXIgewoJLyoqCgkgKiBBZGRzIGEgbmV3IHNlcnZlciByZXNvdXJjZSBsaXN0ZW5lci4KCSAqCgkgKiBAcGFyYW0gbGlzdGVuZXIgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5tb2RlbC5JU2VydmVyUmVzb3VyY2VMaXN0ZW5lcgoJICovCglwdWJsaWMgdm9pZCBhZGRSZXNvdXJjZUxpc3RlbmVyKElTZXJ2ZXJSZXNvdXJjZUxpc3RlbmVyIGxpc3RlbmVyKTsKCgkvKioKCSAqIFJlbW92ZXMgYSBzZXJ2ZXIgcmVzb3VyY2UgbGlzdGVuZXIuCgkgKgoJICogQHBhcmFtIGxpc3RlbmVyIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIubW9kZWwuSVNlcnZlclJlc291cmNlTGlzdGVuZXIKCSAqLwoJcHVibGljIHZvaWQgcmVtb3ZlUmVzb3VyY2VMaXN0ZW5lcihJU2VydmVyUmVzb3VyY2VMaXN0ZW5lciBsaXN0ZW5lcik7CgoJLyoqCgkgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgcnVudGltZXMuCgkgKgoJICogQHJldHVybiBqYXZhLnV0aWwuTGlzdAoJICovCglwdWJsaWMgTGlzdCBnZXRSdW50aW1lcygpOwoJCgkvKioKCSAqIFJldHVybnMgdGhlIGRlZmF1bHQgcnVudGltZS4gVGVzdCBBUEkgLSBkbyBub3QgdXNlLgoJICoKCSAqIEByZXR1cm4gamF2YS51dGlsLkxpc3QKCSAqLwoJcHVibGljIElSdW50aW1lIGdldERlZmF1bHRSdW50aW1lKCk7CgkKCS8qKgoJICogU2V0cyB0aGUgZGVmYXVsdCBydW50aW1lLiBUZXN0IEFQSSAtIGRvIG5vdCB1c2UuCgkgKgoJICogQHJldHVybiBqYXZhLnV0aWwuTGlzdAoJICovCglwdWJsaWMgdm9pZCBzZXREZWZhdWx0UnVudGltZShJUnVudGltZSBydW50aW1lKTsKCQoJLyoqCgkgKiBSZXR1cm5zIHRoZSBydW50aW1lcyB3aXRoIHRoZSBnaXZlbiBydW50aW1lIHR5cGUuCgkgKgoJICogQHJldHVybiBqYXZhLnV0aWwuTGlzdAoJICovCglwdWJsaWMgTGlzdCBnZXRSdW50aW1lcyhJUnVudGltZVR5cGUgcnVudGltZVR5cGUpOwoJCgkvKioKCSAqIFJldHVybnMgdGhlIHJ1bnRpbWUgd2l0aCB0aGUgZ2l2ZW4gaWQuCgkgKgoJICogQHJldHVybiBJUnVudGltZQoJICovCglwdWJsaWMgSVJ1bnRpbWUgZ2V0UnVudGltZShTdHJpbmcgaWQpOwoKCS8qKgoJICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHNlcnZlcnMuCgkgKgoJICogQHJldHVybiBqYXZhLnV0aWwuTGlzdAoJICovCglwdWJsaWMgTGlzdCBnZXRTZXJ2ZXJzKCk7CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgZ2l2ZW4gaWQuCgkgKgoJICogQHJldHVybiBqYXZhLnV0aWwuTGlzdAoJICovCglwdWJsaWMgSVNlcnZlciBnZXRTZXJ2ZXIoU3RyaW5nIGlkKTsKCgkvKioKCSAqIFJldHVybnMgdGhlIHNlcnZlciB0aGF0IGNhbWUgZnJvbSB0aGUgZ2l2ZW4gZmlsZS4KCSAqCgkgKiBAcGFyYW0gZmlsZSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZQoJICogQHJldHVybiBvcmcuZWNsaXBzZS53c3Quc2VydmVyLm1vZGVsLklTZXJ2ZXIKCSAqLwoJcHVibGljIElTZXJ2ZXIgZ2V0U2VydmVyKElGaWxlIGZpbGUpOwoJCgkvKioKCSAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCBzZXJ2ZXJzLgoJICoKCSAqIEByZXR1cm4gamF2YS51dGlsLkxpc3QKCSAqLwoJcHVibGljIExpc3QgZ2V0U2VydmVycyhJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlKTsKCgkvKioKCSAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCBjdXJyZW50bHkgYWN0aXZlIHNlcnZlciBjb25maWd1cmF0aW9ucy4KCSAqCgkgKiBAcmV0dXJuIGphdmEudXRpbC5MaXN0CgkgKi8KCXB1YmxpYyBMaXN0IGdldFNlcnZlckNvbmZpZ3VyYXRpb25zKCk7CgkKCS8qKgoJICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGN1cnJlbnRseSBhY3RpdmUgc2VydmVyIGNvbmZpZ3VyYXRpb25zLgoJICoKCSAqIEByZXR1cm4gamF2YS51dGlsLkxpc3QKCSAqLwoJcHVibGljIExpc3QgZ2V0U2VydmVyQ29uZmlndXJhdGlvbnMoSVNlcnZlckNvbmZpZ3VyYXRpb25UeXBlIGNvbmZpZ1R5cGUpOwoKCS8qKgoJICogUmV0dXJucyB0aGUgc2VydmVycyB3aXRoIHRoZSBnaXZlbiBpZC4KCSAqCgkgKiBAcmV0dXJuIGphdmEudXRpbC5MaXN0CgkgKi8KCXB1YmxpYyBJU2VydmVyQ29uZmlndXJhdGlvbiBnZXRTZXJ2ZXJDb25maWd1cmF0aW9uKFN0cmluZyBpZCk7CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBzZXJ2ZXIgY29uZmlndXJhdGlvbiB0aGF0IGNhbWUgZnJvbSB0aGUKCSAqIGdpdmVuIHJlc291cmNlLgoJICoKCSAqIEBwYXJhbSByZXNvdXJjZSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UKCSAqIEByZXR1cm4gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5tb2RlbC5JU2VydmVyQ29uZmlndXJhdGlvbgoJICovCglwdWJsaWMgSVNlcnZlckNvbmZpZ3VyYXRpb24gZ2V0U2VydmVyQ29uZmlndXJhdGlvbihJRmlsZSBmaWxlKTsKCgkvKioKCSAqIEFkZHMgYSBuZXcgbW9kdWxlIGV2ZW50cyBsaXN0ZW5lci4KCSAqCgkgKiBAcGFyYW0gbGlzdGVuZXIgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5tb2RlbC5JTW9kdWxlRXZlbnRzTGlzdGVuZXIKCSAqLwoJcHVibGljIHZvaWQgYWRkTW9kdWxlRXZlbnRzTGlzdGVuZXIoSU1vZHVsZUV2ZW50c0xpc3RlbmVyIGxpc3RlbmVyKTsKCQoJLyoqCgkgKiBSZW1vdmVzIGFuIGV4aXN0aW5nIG1vZHVsZSBldmVudHMgbGlzdGVuZXIuCgkgKgoJICogQHBhcmFtIGxpc3RlbmVyIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIubW9kZWwuSU1vZHVsZUV2ZW50c0xpc3RlbmVyCgkgKi8KCXB1YmxpYyB2b2lkIHJlbW92ZU1vZHVsZUV2ZW50c0xpc3RlbmVyKElNb2R1bGVFdmVudHNMaXN0ZW5lciBsaXN0ZW5lcik7CgoJLyoqCgkgKiBBZGRzIGEgbmV3IHNlcnZlciBsaWZlY3ljbGUgZXZlbnQgaGFuZGxlciB3aXRoIHRoZSBnaXZlbiBpbmRleC4gSGFuZGxlcnMgd2l0aAoJICogbG93ZXIgaW5kZXhlcyBhcmUgYWx3YXlzIGNhbGxlZCBmaXJzdC4KCSAqCgkgKiBAcGFyYW0gaGFuZGxlciBvcmcuZWNsaXBzZS53c3Quc2VydmVyLm1vZGVsLklTZXJ2ZXJMaWZlY3ljbGVFdmVudEhhbmRsZXIKCSAqLwoJcHVibGljIHZvaWQgYWRkU2VydmVyTGlmZWN5Y2xlRXZlbnRIYW5kbGVyKGludCBpbmRleCwgSVNlcnZlckxpZmVjeWNsZUV2ZW50SGFuZGxlciBoYW5kbGVyKTsKCgkvKioKCSAqIFJlbW92ZXMgYW4gZXhpc3Rpbmcgc2VydmVyIGxpZmVjeWNsZSBldmVudCBoYW5kbGVyLgoJICoKCSAqIEBwYXJhbSBoYW5kbGVyIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIubW9kZWwuSVNlcnZlckxpZmVjeWNsZUV2ZW50SGFuZGxlcgoJICovCglwdWJsaWMgdm9pZCByZW1vdmVTZXJ2ZXJMaWZlY3ljbGVFdmVudEhhbmRsZXIoSVNlcnZlckxpZmVjeWNsZUV2ZW50SGFuZGxlciBoYW5kbGVyKTsKfQ==