LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDE2IEZ1bmRhY2nzbiBUZWNuYWxpYSBSZXNlYXJjaCAmIElubm92YXRpb24uCiAqCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCiAqCiAqIENvbnRyaWJ1dG9yczoKICogICBIdWFzY2FyIEVzcGlub3phIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqICAgQWxlamFuZHJhIFJ17XogLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICogICBJZG95YSBEZWwgUu1vIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqICAgTWFyaSBDYXJtZW4gUGFsYWNpb3MgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICogICBBbmdlbCBM83BleiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqCiAqIEdlbmVyYXRlZCB3aXRoIEFjY2VsZW8KICovCnBhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmNlcnQucGttLnJlZmZyYW1ld29yay5yZWZmcmFtZXdvcmsucHJvdmlkZXJzOwoKaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CgppbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmNlcnQucGttLnJlZmZyYW1ld29yay5yZWZmcmFtZXdvcmsudXRpbC5SZWZmcmFtZXdvcmtBZGFwdGVyRmFjdG9yeTsKCi8qKgogKiAKICogCiAqLwpwdWJsaWMgY2xhc3MgUmVmZnJhbWV3b3JrRUVGQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBSZWZmcmFtZXdvcmtBZGFwdGVyRmFjdG9yeSB7CgoJLyoqCgkgKiB7QGluaGVyaXREb2N9CgkgKiBAc2VlIG9yZy5lY2xpcHNlLm9wZW5jZXJ0LnBrbS5yZWZmcmFtZXdvcmsucmVmZnJhbWV3b3JrLnV0aWwuUmVmZnJhbWV3b3JrQWRhcHRlckZhY3RvcnkjY3JlYXRlUmVmRnJhbWV3b3JrQWRhcHRlcigpCgkgKiAKCSAqLwoJcHVibGljIEFkYXB0ZXIgY3JlYXRlUmVmRnJhbWV3b3JrQWRhcHRlcigpIHsKCQlyZXR1cm4gbmV3IFJlZkZyYW1ld29ya1Byb3BlcnRpZXNFZGl0aW9uUHJvdmlkZXIoKTsKCX0KCS8qKgoJICoge0Bpbmhlcml0RG9jfQoJICogQHNlZSBvcmcuZWNsaXBzZS5vcGVuY2VydC5wa20ucmVmZnJhbWV3b3JrLnJlZmZyYW1ld29yay51dGlsLlJlZmZyYW1ld29ya0FkYXB0ZXJGYWN0b3J5I2NyZWF0ZVJlZlJlcXVpcmVtZW50QWRhcHRlcigpCgkgKiAKCSAqLwoJcHVibGljIEFkYXB0ZXIgY3JlYXRlUmVmUmVxdWlyZW1lbnRBZGFwdGVyKCkgewoJCXJldHVybiBuZXcgUmVmUmVxdWlyZW1lbnRQcm9wZXJ0aWVzRWRpdGlvblByb3ZpZGVyKCk7Cgl9CgkvKioKCSAqIHtAaW5oZXJpdERvY30KCSAqIEBzZWUgb3JnLmVjbGlwc2Uub3BlbmNlcnQucGttLnJlZmZyYW1ld29yay5yZWZmcmFtZXdvcmsudXRpbC5SZWZmcmFtZXdvcmtBZGFwdGVyRmFjdG9yeSNjcmVhdGVSZWZBcnRlZmFjdEFkYXB0ZXIoKQoJICogCgkgKi8KCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlZkFydGVmYWN0QWRhcHRlcigpIHsKCQlyZXR1cm4gbmV3IFJlZkFydGVmYWN0UHJvcGVydGllc0VkaXRpb25Qcm92aWRlcigpOwoJfQoJLyoqCgkgKiB7QGluaGVyaXREb2N9CgkgKiBAc2VlIG9yZy5lY2xpcHNlLm9wZW5jZXJ0LnBrbS5yZWZmcmFtZXdvcmsucmVmZnJhbWV3b3JrLnV0aWwuUmVmZnJhbWV3b3JrQWRhcHRlckZhY3RvcnkjY3JlYXRlUmVmQWN0aXZpdHlBZGFwdGVyKCkKCSAqIAoJICovCglwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWZBY3Rpdml0eUFkYXB0ZXIoKSB7CgkJcmV0dXJuIG5ldyBSZWZBY3Rpdml0eVByb3BlcnRpZXNFZGl0aW9uUHJvdmlkZXIoKTsKCX0KCS8qKgoJICoge0Bpbmhlcml0RG9jfQoJICogQHNlZSBvcmcuZWNsaXBzZS5vcGVuY2VydC5wa20ucmVmZnJhbWV3b3JrLnJlZmZyYW1ld29yay51dGlsLlJlZmZyYW1ld29ya0FkYXB0ZXJGYWN0b3J5I2NyZWF0ZVJlZlJlcXVpcmVtZW50UmVsQWRhcHRlcigpCgkgKiAKCSAqLwoJcHVibGljIEFkYXB0ZXIgY3JlYXRlUmVmUmVxdWlyZW1lbnRSZWxBZGFwdGVyKCkgewoJCXJldHVybiBuZXcgUmVmUmVxdWlyZW1lbnRSZWxQcm9wZXJ0aWVzRWRpdGlvblByb3ZpZGVyKCk7Cgl9CgkvKioKCSAqIHtAaW5oZXJpdERvY30KCSAqIEBzZWUgb3JnLmVjbGlwc2Uub3BlbmNlcnQucGttLnJlZmZyYW1ld29yay5yZWZmcmFtZXdvcmsudXRpbC5SZWZmcmFtZXdvcmtBZGFwdGVyRmFjdG9yeSNjcmVhdGVSZWZSb2xlQWRhcHRlcigpCgkgKiAKCSAqLwoJcHVibGljIEFkYXB0ZXIgY3JlYXRlUmVmUm9sZUFkYXB0ZXIoKSB7CgkJcmV0dXJuIG5ldyBSZWZSb2xlUHJvcGVydGllc0VkaXRpb25Qcm92aWRlcigpOwoJfQoJLyoqCgkgKiB7QGluaGVyaXREb2N9CgkgKiBAc2VlIG9yZy5lY2xpcHNlLm9wZW5jZXJ0LnBrbS5yZWZmcmFtZXdvcmsucmVmZnJhbWV3b3JrLnV0aWwuUmVmZnJhbWV3b3JrQWRhcHRlckZhY3RvcnkjY3JlYXRlUmVmQXBwbGljYWJpbGl0eUxldmVsQWRhcHRlcigpCgkgKiAKCSAqLwoJcHVibGljIEFkYXB0ZXIgY3JlYXRlUmVmQXBwbGljYWJpbGl0eUxldmVsQWRhcHRlcigpIHsKCQlyZXR1cm4gbmV3IFJlZkFwcGxpY2FiaWxpdHlMZXZlbFByb3BlcnRpZXNFZGl0aW9uUHJvdmlkZXIoKTsKCX0KCS8qKgoJICoge0Bpbmhlcml0RG9jfQoJICogQHNlZSBvcmcuZWNsaXBzZS5vcGVuY2VydC5wa20ucmVmZnJhbWV3b3JrLnJlZmZyYW1ld29yay51dGlsLlJlZmZyYW1ld29ya0FkYXB0ZXJGYWN0b3J5I2NyZWF0ZVJlZkNyaXRpY2FsaXR5TGV2ZWxBZGFwdGVyKCkKCSAqIAoJICovCglwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWZDcml0aWNhbGl0eUxldmVsQWRhcHRlcigpIHsKCQlyZXR1cm4gbmV3IFJlZkNyaXRpY2FsaXR5TGV2ZWxQcm9wZXJ0aWVzRWRpdGlvblByb3ZpZGVyKCk7Cgl9CgkvKioKCSAqIHtAaW5oZXJpdERvY30KCSAqIEBzZWUgb3JnLmVjbGlwc2Uub3BlbmNlcnQucGttLnJlZmZyYW1ld29yay5yZWZmcmFtZXdvcmsudXRpbC5SZWZmcmFtZXdvcmtBZGFwdGVyRmFjdG9yeSNjcmVhdGVSZWZUZWNobmlxdWVBZGFwdGVyKCkKCSAqIAoJICovCglwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWZUZWNobmlxdWVBZGFwdGVyKCkgewoJCXJldHVybiBuZXcgUmVmVGVjaG5pcXVlUHJvcGVydGllc0VkaXRpb25Qcm92aWRlcigpOwoJfQoJLyoqCgkgKiB7QGluaGVyaXREb2N9CgkgKiBAc2VlIG9yZy5lY2xpcHNlLm9wZW5jZXJ0LnBrbS5yZWZmcmFtZXdvcmsucmVmZnJhbWV3b3JrLnV0aWwuUmVmZnJhbWV3b3JrQWRhcHRlckZhY3RvcnkjY3JlYXRlUmVmQXJ0ZWZhY3RSZWxBZGFwdGVyKCkKCSAqIAoJICovCglwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWZBcnRlZmFjdFJlbEFkYXB0ZXIoKSB7CgkJcmV0dXJuIG5ldyBSZWZBcnRlZmFjdFJlbFByb3BlcnRpZXNFZGl0aW9uUHJvdmlkZXIoKTsKCX0KCS8qKgoJICoge0Bpbmhlcml0RG9jfQoJICogQHNlZSBvcmcuZWNsaXBzZS5vcGVuY2VydC5wa20ucmVmZnJhbWV3b3JrLnJlZmZyYW1ld29yay51dGlsLlJlZmZyYW1ld29ya0FkYXB0ZXJGYWN0b3J5I2NyZWF0ZVJlZkNyaXRpY2FsaXR5QXBwbGljYWJpbGl0eUFkYXB0ZXIoKQoJICogCgkgKi8KCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlZkNyaXRpY2FsaXR5QXBwbGljYWJpbGl0eUFkYXB0ZXIoKSB7CgkJcmV0dXJuIG5ldyBSZWZDcml0aWNhbGl0eUFwcGxpY2FiaWxpdHlQcm9wZXJ0aWVzRWRpdGlvblByb3ZpZGVyKCk7Cgl9CgkvKioKCSAqIHtAaW5oZXJpdERvY30KCSAqIEBzZWUgb3JnLmVjbGlwc2Uub3BlbmNlcnQucGttLnJlZmZyYW1ld29yay5yZWZmcmFtZXdvcmsudXRpbC5SZWZmcmFtZXdvcmtBZGFwdGVyRmFjdG9yeSNjcmVhdGVSZWZBY3Rpdml0eVJlbEFkYXB0ZXIoKQoJICogCgkgKi8KCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlZkFjdGl2aXR5UmVsQWRhcHRlcigpIHsKCQlyZXR1cm4gbmV3IFJlZkFjdGl2aXR5UmVsUHJvcGVydGllc0VkaXRpb25Qcm92aWRlcigpOwoJfQoJLyoqCgkgKiB7QGluaGVyaXREb2N9CgkgKiBAc2VlIG9yZy5lY2xpcHNlLm9wZW5jZXJ0LnBrbS5yZWZmcmFtZXdvcmsucmVmZnJhbWV3b3JrLnV0aWwuUmVmZnJhbWV3b3JrQWRhcHRlckZhY3RvcnkjY3JlYXRlUmVmSW5kZXBlbmRlbmN5TGV2ZWxBZGFwdGVyKCkKCSAqIAoJICovCglwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWZJbmRlcGVuZGVuY3lMZXZlbEFkYXB0ZXIoKSB7CgkJcmV0dXJuIG5ldyBSZWZJbmRlcGVuZGVuY3lMZXZlbFByb3BlcnRpZXNFZGl0aW9uUHJvdmlkZXIoKTsKCX0KCS8qKgoJICoge0Bpbmhlcml0RG9jfQoJICogQHNlZSBvcmcuZWNsaXBzZS5vcGVuY2VydC5wa20ucmVmZnJhbWV3b3JrLnJlZmZyYW1ld29yay51dGlsLlJlZmZyYW1ld29ya0FkYXB0ZXJGYWN0b3J5I2NyZWF0ZVJlZlJlY29tbWVuZGF0aW9uTGV2ZWxBZGFwdGVyKCkKCSAqIAoJICovCglwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWZSZWNvbW1lbmRhdGlvbkxldmVsQWRhcHRlcigpIHsKCQlyZXR1cm4gbmV3IFJlZlJlY29tbWVuZGF0aW9uTGV2ZWxQcm9wZXJ0aWVzRWRpdGlvblByb3ZpZGVyKCk7Cgl9CgkvKioKCSAqIHtAaW5oZXJpdERvY30KCSAqIEBzZWUgb3JnLmVjbGlwc2Uub3BlbmNlcnQucGttLnJlZmZyYW1ld29yay5yZWZmcmFtZXdvcmsudXRpbC5SZWZmcmFtZXdvcmtBZGFwdGVyRmFjdG9yeSNjcmVhdGVSZWZDb250cm9sQ2F0ZWdvcnlBZGFwdGVyKCkKCSAqIAoJICovCglwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWZDb250cm9sQ2F0ZWdvcnlBZGFwdGVyKCkgewoJCXJldHVybiBuZXcgUmVmQ29udHJvbENhdGVnb3J5UHJvcGVydGllc0VkaXRpb25Qcm92aWRlcigpOwoJfQoJLyoqCgkgKiB7QGluaGVyaXREb2N9CgkgKiBAc2VlIG9yZy5lY2xpcHNlLm9wZW5jZXJ0LnBrbS5yZWZmcmFtZXdvcmsucmVmZnJhbWV3b3JrLnV0aWwuUmVmZnJhbWV3b3JrQWRhcHRlckZhY3RvcnkjY3JlYXRlUmVmQXBwbGljYWJpbGl0eUFkYXB0ZXIoKQoJICogCgkgKi8KCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlZkFwcGxpY2FiaWxpdHlBZGFwdGVyKCkgewoJCXJldHVybiBuZXcgUmVmQXBwbGljYWJpbGl0eVByb3BlcnRpZXNFZGl0aW9uUHJvdmlkZXIoKTsKCX0KCS8qKgoJICoge0Bpbmhlcml0RG9jfQoJICogQHNlZSBvcmcuZWNsaXBzZS5vcGVuY2VydC5wa20ucmVmZnJhbWV3b3JrLnJlZmZyYW1ld29yay51dGlsLlJlZmZyYW1ld29ya0FkYXB0ZXJGYWN0b3J5I2NyZWF0ZVJlZkFwcGxpY2FiaWxpdHlSZWxBZGFwdGVyKCkKCSAqIAoJICovCglwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWZBcHBsaWNhYmlsaXR5UmVsQWRhcHRlcigpIHsKCQlyZXR1cm4gbmV3IFJlZkFwcGxpY2FiaWxpdHlSZWxQcm9wZXJ0aWVzRWRpdGlvblByb3ZpZGVyKCk7Cgl9CgkvKioKCSAqIHtAaW5oZXJpdERvY30KCSAqIEBzZWUgb3JnLmVjbGlwc2Uub3BlbmNlcnQucGttLnJlZmZyYW1ld29yay5yZWZmcmFtZXdvcmsudXRpbC5SZWZmcmFtZXdvcmtBZGFwdGVyRmFjdG9yeSNjcmVhdGVSZWZFcXVpdmFsZW5jZU1hcEFkYXB0ZXIoKQoJICogCgkgKi8KCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlZkVxdWl2YWxlbmNlTWFwQWRhcHRlcigpIHsKCQlyZXR1cm4gbmV3IFJlZkVxdWl2YWxlbmNlTWFwUHJvcGVydGllc0VkaXRpb25Qcm92aWRlcigpOwoJfQoKfQo=