LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCqAqCiAqIENvbnRyaWJ1dG9yczoKICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWw7CgppbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CmltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci8qKgogKiBSZXByZXNlbnRzIGEgc3BlY2lhbGl6ZWQgc2VydmVyIGRlbGVnYXRlIGZvciBzZXJ2ZXJzIGNhcGFibGUgb2YKICogcmVzdGFydGluZyBpbmRpdmlkdWFsIG1vZHVsZXMgd2hpbGUgdGhlIHNlcnZlciBpcyBydW5uaW5nLgogKiA8cD4KICogW2lzc3VlOiBUaGlzIHNob3VsZCBiZSBmb2xkZWQgaW4gdG8gSVNlcnZlckRlbGVnYXRlLiBJZgogKiB0aGUgc2VydmVyIGRlbGVnYXRlIGlzIHJlcHJlc2VudGVkIGFzIGFuIGFic3RyYWN0IGNsYXNzIGFzCiAqIHJlY29tbWVuZGVkIGVsc2V3aGVyZSwgYWxsIHRoZXNlIG1ldGhvZHMgY291bGQgaGF2ZSBkZWZhdWx0CiAqIGltcGxlbWVudGF0aW9ucyBhcHByb3ByaWF0ZSBmb3IgYSBzZXJ2ZXIgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IAogKiByZXN0YXJ0YWJsZSBtb2R1bGVzLiBJU2VydmVyRGVsZWdhdGUuc3VwcG9ydHNNb2R1bGVSZXN0YXJ0KCkKICogY291bGQgYW5zd2VyIHdoZXRoZXIgbW9kdWxlIHJlc3RhcnQgd2FzIHBvc3NpYmxlIGluIHBpbmNpcGxlCiAqIChmYWxzZSBieSBkZWZhdWx0KS5dCiAqIDwvcD4KICogPHA+CiAqIENvbmNyZXRlIG1vZHVsZSB0eXBlcyBhcmUgcmVwcmVzZW50ZWQgYnkgY29uY3JldGUgY2xhc3NlcwogKiBpbXBsZW1lbnRpbmcgdGhpcyBpbnRlcmZhY2UuIFRoZSBvbmx5IGxlZ2l0aW1hdGUgcmVhc29uCiAqIHRvIGRlY2xhcmUgYSBzdWJjbGFzcyBpcyB0byBpbXBsZW1lbnQgYSBtb2R1bGUgZmFjdG9yeS4KICogPC9wPgogKiA8cD4KICogPGl0PkNhdmVhdDogVGhlIHNlcnZlciBjb3JlIEFQSSBpcyBzdGlsbCBpbiBhbiBlYXJseSBmb3JtLCBhbmQgaXMKICogbGlrZWx5IHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSB0aGUgaW5pdGlhbCByZWxlYXNlLjwvaXQ+CiAqIDwvcD4KICogCiAqIEBzaW5jZSAxLjAKICovCnB1YmxpYyBpbnRlcmZhY2UgSVJlc3RhcnRhYmxlTW9kdWxlIGV4dGVuZHMgSVNlcnZlckRlbGVnYXRlIHsKCQoJLyoqCgkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIG1vZHVsZSBjYW4gYmUgcmVzdGFydGVkLgoJICogPHA+CgkgKiBbaXNzdWU6IEl0J3MgdW5jbGVhciB3aGV0aGVyIHRoaXMgb3BlcmF0aW9ucyBpcyBndWFyYW50ZWVkIHRvIGJlIGZhc3QKCSAqIG9yIHdoZXRoZXIgaXQgY291bGQgaW52b2x2ZSBjb21tdW5pY2F0aW9uIHdpdGggYW55IGFjdHVhbAoJICogc2VydmVyLiBJZiBpdCBpcyBub3QgZmFzdCwgdGhlIG1ldGhvZCBzaG91bGQgdGFrZSBhIHByb2dyZXNzCgkgKiBtb25pdG9yLl0KCSAqIDwvcD4KCSAqCgkgKiBAcGFyYW0gbW9kdWxlIHRoZSBtb2R1bGUKCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIG1vZHVsZSBjYW4gYmUKCSAqIHJlc3RhcnRlZCwgYW5kIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UgCgkgKi8KCXB1YmxpYyBib29sZWFuIGNhblJlc3RhcnRNb2R1bGUoSU1vZHVsZSBtb2R1bGUpOwoKCS8qKgoJICogQ2hlY2sgaWYgdGhlIGdpdmVuIG1vZHVsZSBpcyBpbiBzeW5jIG9uIHRoZSBzZXJ2ZXIuIEl0IHNob3VsZAoJICogcmV0dXJuIHRydWUgaWYgdGhlIG1vZHVsZSBzaG91bGQgYmUgcmVzdGFydGVkIChpcyBvdXQgb2YKCSAqIHN5bmMpIG9yIGZhbHNlIGlmIHRoZSBtb2R1bGUgZG9lcyBub3QgbmVlZCB0byBiZSByZXN0YXJ0ZWQuCgkgKgoJICogQHBhcmFtIG1vZHVsZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuSU1vZHVsZQoJICogQHJldHVybiBib29sZWFuCgkgKi8KCXB1YmxpYyBib29sZWFuIGlzTW9kdWxlUmVzdGFydE5lZWRlZChJTW9kdWxlIG1vZHVsZSk7CgoJLyoqCgkgKiBBc3luY2hyb25vdXNseSByZXN0YXJ0cyB0aGUgZ2l2ZW4gbW9kdWxlIG9uIHRoZSBzZXJ2ZXIuCgkgKiBTZWUgdGhlIHNwZWNpZmljYXRpb24gb2YgCgkgKiB7QGxpbmsgSVNlcnZlciNzeW5jaHJvbm91c01vZHVsZVJlc3RhcnQoSU1vZHVsZSwgSVByb2dyZXNzTW9uaXRvcil9CgkgKiBmb3IgZnVydGhlciBkZXRhaWxzLiAKCSAqIDxwPgoJICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSB3ZWIgc2VydmVyIGNvcmUgZnJhbWV3b3JrLAoJICogaW4gcmVzcG9uc2UgdG8gYSBjYWxsIHRvIDxjb2RlPklTZXJ2ZXIuc3luY2hyb25vdXNNb2R1bGVSZXN0YXJ0PC9jb2RlPi4KCSAqIENsaWVudHMgc2hvdWxkIG5ldmVyIGNhbGwgdGhpcyBtZXRob2QuCgkgKiA8L3A+CgkgKiA8cD4KCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgdXBkYXRlIHRoZSBtb2R1bGUgc3luYyBzdGF0ZSBhbmQgZmlyZQoJICogYW4gZXZlbnQgZm9yIHRoZSBtb2R1bGUuCgkgKiA8L3A+CgkgKiA8cD4KCSAqIFtpc3N1ZTogSXQgc2hvdWxkIHByb2JhYmx5IGJlIHNwZWMnZCB0byB0aHJvdyBhbiBleGNlcHRpb24gZXJyb3IgaWYgdGhlCgkgKiBnaXZlbiBtb2R1bGUgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCB0aGUgc2VydmVyLl0KCSAqIDwvcD4KCSAqIDxwPgoJICogW2lzc3VlOiBTaW5jZSB0aGlzIG1ldGhvZCBpcyBhc2N5bmNocm9ub3VzLCBpcyB0aGVyZQoJICogYW55IG5lZWQgZm9yIHRoZSBwcm9ncmVzcyBtb25pdG9yP10KCSAqIDwvcD4KCSAqIDxwPgoJICogW2lzc3VlOiBTaW5jZSB0aGlzIG1ldGhvZCBpcyBhc2N5bmNocm9ub3VzLCBob3cgY2FuCgkgKiBpdCByZXR1cm4gYSBtZWFuaW5nZnVsIElTdGF0dXM/IAoJICogQW5kIElTZXJ2ZXIuc3luY2hyb25vdXNNb2R1bGVSZXN0YXJ0IHRocm93cyBDb3JlRXhjZXB0aW9uCgkgKiBpZiBhbnl0aGluZyBnb2VzIHdyb25nLl0KCSAqIDwvcD4KCSAqIDxwPgoJICogW2lzc3VlOiBJZiB0aGUgbW9kdWxlIHdhcyBqdXN0IHB1Ymxpc2hlZCB0byB0aGUgc2VydmVyCgkgKiBhbmQgaGFkIG5ldmVyIGJlZW4gc3RhcnRlZCwgd291bGQgaXMgYmUgb2sgdG8gInN0YXJ0IgoJICogdGhlIG1vZHVsZSB1c2luZyB0aGlzIG1ldGhvZD9dCgkgKiA8L3A+CgkgKiAKCSAqIEBwYXJhbSBtb2R1bGUgdGhlIG1vZHVsZSB0byBiZSBzdGFydGVkCgkgKiBAcGFyYW0gbW9uaXRvciBhIHByb2dyZXNzIG1vbml0b3IsIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIHByb2dyZXNzCgkgKiAgICByZXBvcnRpbmcgYW5kIGNhbmNlbGxhdGlvbiBhcmUgbm90IGRlc2lyZWQKCSAqIEByZXR1cm4gc3RhdHVzIG9iamVjdAoJICogQGV4Y2VwdGlvbiBDb3JlRXhjZXB0aW9uIGlmIGFuIGVycm9yIG9jY3VycyB3aGlsZSB0cnlpbmcgdG8gcmVzdGFydCB0aGUgbW9kdWxlCgkgKi8KCXB1YmxpYyBJU3RhdHVzIHJlc3RhcnRNb2R1bGUoSU1vZHVsZSBtb2R1bGUsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb247Cn0=