[Webwork-devel] ServletDispatcher sample patch...
Brought to you by:
baldree,
rickardoberg
From: Joel P. <jp...@tr...> - 2002-05-07 17:12:15
|
SSBoYXZlIGluY2x1ZGVkIGEgcGF0Y2ggd2l0aCBhIHNhbXBsZSBhcHByb2FjaCBvZiBob3cgdG8g YnVpbGQgaW4gc3VwcG9ydCBmb3IgaGFuZGxpbmcgZXJyb3JzIGFuZCBnZW5lcmF0aW5nIHJlc3Vs dCB2aWV3cyBmcm9tIHRoZSBBY3Rpb25GYWN0b3J5IHByb3h5IGNoYWluLiAoRmlyc3QgYXMgYSBV bml4IGRpZmYgYWdhaW5zdCByZXZpc2lvbiAxLjM1IG9mIFNlcnZsZXREaXNwYXRjaGVyLmphdmEs IHRoZW4gYXMgYSBjb21wbGV0ZSBmaWxlKS4NCiANCkkgbWFkZSB0aGUgYXV0b21hdGljIHZhcmlh YmxlLCBhY3Rpb24sIG5vbi1maW5hbCBpbiB0aGlzIHBhdGNoLiBJdCBzZWVtcyB0aGF0IHNpbmNl IGFjdGlvbiBpcyBhIG1ldGhvZC1sb2NhbCB2YXJpYWJsZSwgdGhlIHByb3RlY3Rpb24gZnJvbSBy ZWFzc2lnbm1lbnQgdGhhdCBpcyBhZmZvcmRlZCBpcyBzb21ld2hhdCBtaW5pbWFsLCBidXQgYXMg SSBzYWlkIGluIG15IGZpcnN0IHBvc3QsIEkgbWlnaHQgYmUgbWlzc2luZyBzb21lIG51YW5jZSBv ZiBpdCdzIHVzZS4gUGxlYXNlIGxldCBtZSBrbm93IGlmIHlvdSB0aGluayB0aGlzIGlzIGEgcmVh c29uYWJsZSBhcHByb2FjaCwgb3IgaWYgdGhlcmUncyBhIGJldHRlciB3YXkgdG8gaGFuZGxlIGVy cm9yIGNvbmRpdGlvbnMgaW4gdGhlIGFjdGlvbiBmYWN0b3J5IGNoYWluLg0KIA0KSWYgdGhlcmUg aXMgYSBtb3JlIHByZWZlcnJlZCB3YXkgZm9yIHNlbmRpbmcgcGF0Y2hlcyB0byB0aGUgZGV2ZWxv cG1lbnQgbGlzdCwgSSBhcG9sb2dpemUuIFBsZWFzZSBsZXQgbWUga25vdyBhbmQgSSB3aWxsIHJl cG9zdC4NCiANCi1Kb2VsDQogDQovKiBTZXJ2bGV0RGlzcGF0Y2hlci5kaWZmICovDQogDQoxNTJj MTUyLDE1Mw0KPCAgICAgICBmaW5hbCBBY3Rpb24gYWN0aW9uOw0KLS0tDQo+ICAgICAgIEFjdGlv biBhY3Rpb24gPSBudWxsOw0KPiAgICAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsNCjE2N2ExNjks MTcyDQo+ICAgICAgICAgIH0gY2F0Y2goUmVzdWx0RXhjZXB0aW9uIGUpDQo+ICAgICAgICAgIHsN Cj4gICAgICAgICAgICAgLy8gU2hvdyBjaG9zZW4gdmlldw0KPiAgICAgICAgICAgICByZXN1bHQg PSAoU3RyaW5nKWUuZ2V0UmVzdWx0KCk7DQoxODMsMjA1YzE4OCwyMTMNCjwgICAgICAgICAgLy8g RXhlY3V0ZSBhY3Rpb24NCjwgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7DQo8ICAgICAg ICAgIGxvZy5kZWJ1ZygiQWN0aW9uOiIgKyBhY3Rpb25OYW1lKTsNCjwgICAgICAgICAgTkRDLnB1 c2goYWN0aW9uTmFtZSk7DQo8ICAgICAgICAgIHRyeQ0KPCAgICAgICAgICB7DQo8ICAgICAgICAg ICAgIHJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7DQo8ICAgICAgICAgIH0gY2F0Y2goU2VjdXJp dHlFeGNlcHRpb24gZSkNCjwgICAgICAgICAgew0KPCAgICAgICAgICAgICAvLyBTZWN1cml0eSBl eGNlcHRpb24gdGhyb3duDQo8ICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9u KCJZb3UncmUgbm90IGFsbG93ZWQgdG8gYWNjZXNzIHRoZSBhY3Rpb24gIithY3Rpb25OYW1lLCBl KTsNCjwgICAgICAgICAgfSBjYXRjaChSZXN1bHRFeGNlcHRpb24gZSkNCjwgICAgICAgICAgew0K PCAgICAgICAgICAgICAvLyBTaG93IGNob3NlbiB2aWV3DQo8ICAgICAgICAgICAgIHJlc3VsdCA9 IChTdHJpbmcpZS5nZXRSZXN1bHQoKTsNCjwgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkN CjwgICAgICAgICAgew0KPCAgICAgICAgICAgICBsb2cuZGVidWcoIkFjdGlvbiBleGVjdXRpb24g ZXhjZXB0aW9uIiwgZSk7DQo8ICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9u KCJTeXN0ZW0gZXJyb3Igd2hpbGUgZXhlY3V0aW5nICIgKyBhY3Rpb24uZ2V0Q2xhc3MoKSwgZSk7 DQo8ICAgICAgICAgIH0gZmluYWxseQ0KPCAgICAgICAgICB7DQo8ICAgICAgICAgICAgIE5EQy5w b3AoKTsNCjwgICAgICAgICAgfQ0KLS0tDQo+ICAgICAgICAgIC8vIElmIHRoZSBhY3Rpb24gaXMg bnVsbCwgdGhlcmUgd2FzIGEgUmVzdWx0RXhjZXB0aW9uIHJldHJpZXZpbmcgaXQNCj4gICAgICAg ICAgLy8gZnJvbSB0aGUgYWN0aW9uIGZhY3RvcnkgY2hhaW4sIHNvIHdlIHNob3VsZCBnbyBzdHJh aWdodCB0byB0aGUgdmlldy4NCj4gICAgICAgICAgaWYgKG51bGwgIT0gYWN0aW9uKQ0KPiAgICAg ICAgICB7DQo+ICAgICAgICAgICAgICAvLyBFeGVjdXRlIGFjdGlvbg0KPiAgICAgICAgICAgICAg bG9nLmRlYnVnKCJBY3Rpb246IiArIGFjdGlvbk5hbWUpOw0KPiAgICAgICAgICAgICAgTkRDLnB1 c2goYWN0aW9uTmFtZSk7DQo+ICAgICAgICAgICAgICB0cnkNCj4gICAgICAgICAgICAgIHsNCj4g ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7DQo+ICAgICAgICAgICAg ICB9IGNhdGNoKFNlY3VyaXR5RXhjZXB0aW9uIGUpDQo+ICAgICAgICAgICAgICB7DQo+ICAgICAg ICAgICAgICAgICAvLyBTZWN1cml0eSBleGNlcHRpb24gdGhyb3duDQo+ICAgICAgICAgICAgICAg ICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigiWW91J3JlIG5vdCBhbGxvd2VkIHRvIGFjY2Vz cyB0aGUgYWN0aW9uICIrYWN0aW9uTmFtZSwgZSk7DQo+ICAgICAgICAgICAgICB9IGNhdGNoKFJl c3VsdEV4Y2VwdGlvbiBlKQ0KPiAgICAgICAgICAgICAgew0KPiAgICAgICAgICAgICAgICAgLy8g U2hvdyBjaG9zZW4gdmlldw0KPiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gKFN0cmluZyllLmdl dFJlc3VsdCgpOw0KPiAgICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkNCj4gICAgICAg ICAgICAgIHsNCj4gICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiQWN0aW9uIGV4ZWN1dGlvbiBl eGNlcHRpb24iLCBlKTsNCj4gICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0 aW9uKCJTeXN0ZW0gZXJyb3Igd2hpbGUgZXhlY3V0aW5nICIgKyBhY3Rpb24uZ2V0Q2xhc3MoKSwg ZSk7DQo+ICAgICAgICAgICAgICB9IGZpbmFsbHkNCj4gICAgICAgICAgICAgIHsNCj4gICAgICAg ICAgICAgICAgIE5EQy5wb3AoKTsNCj4gICAgICAgICAgICAgIH0NCjIwN2MyMTUsMjE2DQo8ICAg ICAgICAgIGxvZy5kZWJ1ZygiUmVzdWx0OiIgKyByZXN1bHQpOw0KLS0tDQo+ICAgICAgICAgICAg ICBsb2cuZGVidWcoIlJlc3VsdDoiICsgcmVzdWx0KTsNCj4gICAgICAgICAgfQ0KDQogDQovKiBT ZXJ2bGV0RGlzcGF0Y2hlci5qYXZhICovDQovKiANCiAqIFdlYldvcmssIFdlYiBBcHBsaWNhdGlv biBGcmFtZXdvcmsgDQogKiANCiAqIERpc3RyaWJ1dGFibGUgdW5kZXIgQXBhY2hlIGxpY2Vuc2Uu IA0KICogU2VlIHRlcm1zIG9mIGxpY2Vuc2UgYXQgb3BlbnNvdXJjZS5vcmcgDQogKi8gDQpwYWNr YWdlIHdlYndvcmsuZGlzcGF0Y2hlcjsgDQoNCmltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkNhdGVn b3J5OyANCmltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLk5EQzsgDQppbXBvcnQgd2Vid29yay5hY3Rp b24uQWN0aW9uOyANCmltcG9ydCB3ZWJ3b3JrLmFjdGlvbi5SZXN1bHRFeGNlcHRpb247IA0KaW1w b3J0IHdlYndvcmsuYWN0aW9uLkFjdGlvbkNvbnRleHQ7IA0KaW1wb3J0IHdlYndvcmsuYWN0aW9u LmZhY3RvcnkuQWN0aW9uRmFjdG9yeTsgDQppbXBvcnQgd2Vid29yay5jb25maWcuQ29uZmlndXJh dGlvbjsgDQppbXBvcnQgd2Vid29yay51dGlsLlZhbHVlU3RhY2s7IA0KaW1wb3J0IHdlYndvcmsu dXRpbC5Mb2dnZXJVdGlsOyANCg0KaW1wb3J0IGphdmF4LnNlcnZsZXQuUmVxdWVzdERpc3BhdGNo ZXI7IA0KaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbmZpZzsgDQppbXBvcnQgamF2YXgu c2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uOyANCmltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0 cFNlcnZsZXQ7IA0KaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7 IA0KaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOyANCmltcG9y dCBqYXZhLmJlYW5zLkJlYW5zOyANCmltcG9ydCBqYXZhLmJlYW5zLkludHJvc3BlY3RvcjsgDQpp bXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsgDQppbXBvcnQgamF2YS5zZWN1cml0eS4qOyANCg0K LyoqIA0KICogTWFpbiBkaXNwYXRjaGVyIHNlcnZsZXQuIEl0IHdvcmtzIGluIHRocmVlIHBoYXNl czogZmlyc3QgcHJvcGFnYXRlIGFsbCANCiAqIHBhcmFtZXRlcnMgdG8gdGhlIGNvbW1hbmQgSmF2 YUJlYW4uIFNlY29uZCwgY2FsbCBleGVjdXRlKCkgdG8gbGV0IHRoZSANCiAqIEphdmFCZWFuIGNy ZWF0ZSB0aGUgcmVzdWx0IGRhdGEuIFRoaXJkLCBkZWxlZ2F0ZSB0byB0aGUgSlNQIHRoYXQgY29y cmVzcG9uZHMgdG8gDQogKiB0aGUgcmVzdWx0IHN0YXRlIHRoYXQgd2FzIGNob3NlbiBieSB0aGUg SmF2YUJlYW4uIA0KICogDQogKiBUaGUgY29tbWFuZCBKYXZhQmVhbnMgY2FuIGJlIGZvdW5kIGlu IGEgcGFja2FnZSBwcmVmaXhlZCB3aXRoIGVpdGhlciANCiAqIG9mIHRoZSBwYWNrYWdlIG5hbWVz IGluIHRoZSBjb21tYS1zZXBhcmF0ZWQgInBhY2thZ2VzIiBzZXJ2bGV0IGluaXQgcGFyYW1ldGVy LiANCiAqIA0KICogQGF1dGhvciBSaWNrYXJkIMOWYmVyZyAocmlja2FyZEBtaWRkbGV3YXJlLWNv bXBhbnkuY29tKSANCiAqIEB2ZXJzaW9uICRSZXZpc2lvbjogMS4zNSAkIA0KICovIA0KcHVibGlj IGNsYXNzIFNlcnZsZXREaXNwYXRjaGVyIA0KICBleHRlbmRzIEh0dHBTZXJ2bGV0IA0KeyANCiAg IC8vIEF0dHJpYnV0ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSANCg0KICAgLyoqIA0KICAgICogQWZ0ZXIgYSB2aWV3IGlzIHByb2Nlc3NlZCB0 aGUgdmFsdWUgb2YgdGhlIHN0YWNrJ3MgaGVhZCBpcyBwdXQgaW50byANCiAgICAqIHRoZSByZXF1 ZXN0IGF0dHJpYnV0ZXMgd2l0aCB0aGlzIGtleS4gDQogICAgKi8gDQogICBwdWJsaWMgc3RhdGlj IGZpbmFsIFN0cmluZyBTVEFDS19IRUFEID0gIndlYndvcmsudmFsdWVzdGFjay5oZWFkIjsgDQoN CiAgIHByb3RlY3RlZCBzdGF0aWMgQ2F0ZWdvcnkgbG9nID0gQ2F0ZWdvcnkuZ2V0SW5zdGFuY2Uo U2VydmxldERpc3BhdGNoZXIuY2xhc3MpOyANCg0KICAgVmlld01hcHBpbmcgbWFwcGluZzsgDQog ICBDbGFzc0xvYWRlciBjbGFzc0xvYWRlcjsgDQoNCg0KICAgLy8gSHR0cFNlcnZsZXQgb3ZlcnJp ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIA0KICAgLyoqIA0K ICAgICogSW5pdGlhbGl6ZSBkaXNwYXRjaGVyIHNlcnZsZXQgDQogICAgKiANCiAgICAqIEBwYXJh bSAgIGNvbmZpZyANCiAgICAqIEBleGNlcHRpb24gICBTZXJ2bGV0RXhjZXB0aW9uIA0KICAgICov IA0KICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgDQogICAgIHRocm93 cyBTZXJ2bGV0RXhjZXB0aW9uIA0KICAgeyANCiAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsgDQoN CiAgICAgIC8vIGluaXQgbG9nZ2VyLCBtYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgYXBw ZW5kZXIgZm9yIGxvZ2dpbmcgDQogICAgICAvLyB5b3UgbmVlZCB0byBtYWtlIHRoaXMgY2FsbCBp ZiB5b3UgZG8gYW55IGxvZ2dpbmcgYmVmb3JlIHRoZSBsb2dnZXIgaXMgY29uZmlndXJlZCANCiAg ICAgIExvZ2dlclV0aWwuaW5pdCgpOyANCg0KICAgICAgLy8gQ2xlYXIgY2FjaGVzIA0KICAgICAg Ly8gUk86IElmIG5vdCwgdGhlbiBpdCB3aWxsIGNvbnRhaW4gZ2FyYmFnZSBhZnRlciBhIGNvdXBs ZSBvZiByZWRlcGxveW1lbnRzIA0KICAgICAgSW50cm9zcGVjdG9yLmZsdXNoQ2FjaGVzKCk7IA0K DQogICAgICAvLyBDbGVhciBWYWx1ZVN0YWNrIG1ldGhvZCBjYWNoZSANCiAgICAgIC8vIFJPOiBJ ZiBub3QsIHRoZW4gaXQgd2lsbCBjb250YWluIGdhcmJhZ2UgYWZ0ZXIgYSBjb3VwbGUgb2YgcmVk ZXBsb3ltZW50cyANCiAgICAgIFZhbHVlU3RhY2suY2xlYXJNZXRob2RzKCk7IA0KDQogICAgICAv LyBDaG9vc2UgY2xhc3Nsb2FkZXIgDQogICAgICB0cnkgDQogICAgICB7IA0KICAgICAgICAgY2xh c3NMb2FkZXIgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigp OyANCiAgICAgIH0gY2F0Y2goVGhyb3dhYmxlIGUpIA0KICAgICAgeyANCiAgICAgICAgIC8vIEln bm9yZSANCiAgICAgIH0gDQogICAgICAvLyBJZiB3ZSBjb3VsZG4ndCB1c2UgdGhlIGNvbnRleHQg Y2xhc3Nsb2FkZXIsIGxldCdzIHRyeSB0aGUgbG9hZGVyIGZvciB0aGlzIHNlcnZsZXQgaW5zdGVh ZCANCiAgICAgIGlmIChjbGFzc0xvYWRlciA9PSBudWxsKSANCiAgICAgIHsgDQogICAgICAgICBs b2cuZXJyb3IoIkNvbnRleHQgY2xhc3Nsb2FkZXIgbm90IHByb3Blcmx5IHNldCIpOyANCiAgICAg ICAgIGNsYXNzTG9hZGVyID0gZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpOyANCiAgICAgIH0g DQoNCiAgICAgIC8vIGNvbmZpZ3VyZSBsb2dnZXIgDQogICAgICBMb2dnZXJVdGlsLmNvbmZpZyhj bGFzc0xvYWRlcik7IA0KDQogICAgICAvLyBJbml0aWFsaXplIHZpZXcgbWFwcGluZyANCiAgICAg IFN0cmluZyBtYXBwaW5nTmFtZTsgDQogICAgICB0cnkgDQogICAgICB7IA0KICAgICAgICAgbWFw cGluZ05hbWUgPSBDb25maWd1cmF0aW9uLmdldFN0cmluZygid2Vid29yay52aWV3bWFwcGluZyIp OyANCiAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSANCiAgICAgIHsg DQogICAgICAgICAvLyBEZWZhdWx0IA0KICAgICAgICAgbWFwcGluZ05hbWUgPSBEZWZhdWx0Vmll d01hcHBpbmcuY2xhc3MuZ2V0TmFtZSgpOyANCiAgICAgIH0gDQoNCiAgICAgIHRyeSANCiAgICAg IHsgDQogICAgICAgICBsb2cuaW5mbygiTG9hZGluZyB2aWV3IG1hcHBpbmcgIittYXBwaW5nTmFt ZSk7IA0KICAgICAgICAgbWFwcGluZyA9IChWaWV3TWFwcGluZylCZWFucy5pbnN0YW50aWF0ZShj bGFzc0xvYWRlciwgbWFwcGluZ05hbWUpOyANCiAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSAN CiAgICAgIHsgDQogICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigiQ291bGQgbm90 IGluc3RhbnRpYXRlIHZpZXcgbWFwcGluZyBpbXBsZW1lbnRhdGlvbiIsZSk7IA0KICAgICAgfSAN Cg0KICAgICAgbG9nLmluZm8oIkFjdGlvbiBkaXNwYXRjaGVyIGluaXRpYWxpemVkIik7IA0KICAg fSANCg0KICAgLyoqIA0KICAgICogU2VydmljZSBhIHJlcXVlc3QgDQogICAgKiANCiAgICAqIEBw YXJhbSAgIGFSZXF1ZXN0IA0KICAgICogQHBhcmFtICAgYVJlc3BvbnNlIA0KICAgICogQGV4Y2Vw dGlvbiAgIFNlcnZsZXRFeGNlcHRpb24gDQogICAgKi8gDQogICBwdWJsaWMgdm9pZCBzZXJ2aWNl KEh0dHBTZXJ2bGV0UmVxdWVzdCBhUmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSBhUmVzcG9u c2UpIA0KICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiANCiAgIHsgDQogICAgICAvLyBHZXQg YWN0aW9uIA0KICAgICAgU3RyaW5nIHBhdGhJbmZvID0gKFN0cmluZylhUmVxdWVzdC5nZXRBdHRy aWJ1dGUoImphdmF4LnNlcnZsZXQuaW5jbHVkZS5wYXRoX2luZm8iKTsgDQogICAgICBpZiAocGF0 aEluZm8gPT0gbnVsbCkgDQogICAgICAgICBwYXRoSW5mbyA9IGFSZXF1ZXN0LmdldFBhdGhJbmZv KCk7IA0KICAgICAgU3RyaW5nIHNlcnZsZXRQYXRoID0gKFN0cmluZylhUmVxdWVzdC5nZXRBdHRy aWJ1dGUoImphdmF4LnNlcnZsZXQuaW5jbHVkZS5zZXJ2bGV0X3BhdGgiKTsgDQogICAgICBpZiAo c2VydmxldFBhdGggPT0gbnVsbCkgDQogICAgICAgICBzZXJ2bGV0UGF0aCA9IGFSZXF1ZXN0Lmdl dFNlcnZsZXRQYXRoKCk7IA0KDQogICAgICAvLyBHZXQgYWN0aW9uIG5hbWUgKCJGb28uYWN0aW9u IiAtPiAiRm9vIiBhY3Rpb24pIA0KICAgICAgZmluYWwgU3RyaW5nIGFjdGlvbk5hbWU7IA0KICAg ICAgU3RyaW5nIGFjdGlvblBhdGggPSAiLyI7IA0KICAgICAgaW50IGlkeCA9IHNlcnZsZXRQYXRo Lmxhc3RJbmRleE9mKCIvIik7IA0KICAgICAgYWN0aW9uTmFtZSA9IHNlcnZsZXRQYXRoLnN1YnN0 cmluZyhpZHggKyAxLCBzZXJ2bGV0UGF0aC5sYXN0SW5kZXhPZigiLiIpKTsgDQoNCiAgICAgIC8v IFBhdGggaXMgYWx3YXlzIG9yaWdpbmFsIHBhdGgsIGV2ZW4gaWYgaXQgaXMgaW5jbHVkZWQgaW4g cGFnZSB3aXRoIGFub3RoZXIgcGF0aCANCiAgICAgIGFjdGlvblBhdGggPSBhUmVxdWVzdC5nZXRT ZXJ2bGV0UGF0aCgpOyANCiAgICAgIGFjdGlvblBhdGggPSBhY3Rpb25QYXRoLnN1YnN0cmluZygw LCBhY3Rpb25QYXRoLmxhc3RJbmRleE9mKCIvIikgKyAxKTsgDQoNCiAgICAgIEFjdGlvbiBhY3Rp b24gPSBudWxsOyANCiAgICAgIFN0cmluZyByZXN1bHQgPSBudWxsOyANCg0KICAgICAgLy8gU2V0 IHRocmVhZCBsb2NhbHMgc28gdGhhdCBhY3Rpb25zIGNhbiBiZSBpbml0aWFsaXplZCBwcm9wZXJs eSANCiAgICAgIEFjdGlvbkNvbnRleHQgb2xkQ29udGV4dCA9IEFjdGlvbkNvbnRleHQuZ2V0Q29u dGV4dCgpOyANCg0KICAgICAgdHJ5IHsgDQogICAgICAgICBBY3Rpb25Db250ZXh0IGNvbnRleHQg PSBuZXcgQWN0aW9uQ29udGV4dCgpOyANCiAgICAgICAgIGNvbnRleHQuc2V0TmFtZShhY3Rpb25O YW1lKTsgDQogICAgICAgICBjb250ZXh0LnNldFJlcXVlc3QoYVJlcXVlc3QpOyANCiAgICAgICAg IGNvbnRleHQuc2V0UmVzcG9uc2UoYVJlc3BvbnNlKTsgDQogICAgICAgICBjb250ZXh0LnNldFNl cnZsZXRDb250ZXh0KGdldFNlcnZsZXRDb250ZXh0KCkpOyANCiAgICAgICAgIEFjdGlvbkNvbnRl eHQuc2V0Q29udGV4dChjb250ZXh0KTsgDQoNCiAgICAgICAgIHRyeSANCiAgICAgICAgIHsgDQog ICAgICAgICAgICBhY3Rpb24gPSBBY3Rpb25GYWN0b3J5LmdldEFjdGlvbihhY3Rpb25OYW1lKTsg DQogICAgICAgICB9IGNhdGNoKFJlc3VsdEV4Y2VwdGlvbiBlKSANCiAgICAgICAgIHsgDQogICAg ICAgICAgICAvLyBTaG93IGNob3NlbiB2aWV3IA0KICAgICAgICAgICAgcmVzdWx0ID0gKFN0cmlu ZyllLmdldFJlc3VsdCgpOyANCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIA0KICAgICAg ICAgeyANCiAgICAgICAgICAgIC8vIExvZyB0aGUgZXJyb3IgDQogICAgICAgICAgICBsb2cuZXJy b3IoIkNvdWxkIG5vdCBpbnN0YW50aWF0ZSBhY3Rpb246IithY3Rpb25OYW1lLCBlKTsgDQoNCiAg ICAgICAgICAgIHRyeSANCiAgICAgICAgICAgIHsgDQogICAgICAgICAgICAgICBhUmVzcG9uc2Uu c2VuZEVycm9yKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfTk9UX0ZPVU5ELCBlLmdldE1lc3NhZ2Uo KSk7IA0KICAgICAgICAgICAgICAgcmV0dXJuOyANCiAgICAgICAgICAgIH0gY2F0Y2goSU9FeGNl cHRpb24gZXgpIA0KICAgICAgICAgICAgeyANCiAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2 bGV0RXhjZXB0aW9uKGV4KTsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgfSANCg0KICAgICAg ICAgLy8gSWYgdGhlIGFjdGlvbiBpcyBudWxsLCB0aGVyZSB3YXMgYSBSZXN1bHRFeGNlcHRpb24g cmV0cmlldmluZyBpdCANCiAgICAgICAgIC8vIGZyb20gdGhlIGFjdGlvbiBmYWN0b3J5IGNoYWlu LCBzbyB3ZSBzaG91bGQgZ28gc3RyYWlnaHQgdG8gdGhlIHZpZXcuIA0KICAgICAgICAgaWYgKG51 bGwgIT0gYWN0aW9uKSANCiAgICAgICAgIHsgDQogICAgICAgICAgICAgLy8gRXhlY3V0ZSBhY3Rp b24gDQogICAgICAgICAgICAgbG9nLmRlYnVnKCJBY3Rpb246IiArIGFjdGlvbk5hbWUpOyANCiAg ICAgICAgICAgICBOREMucHVzaChhY3Rpb25OYW1lKTsgDQogICAgICAgICAgICAgdHJ5IA0KICAg ICAgICAgICAgIHsgDQogICAgICAgICAgICAgICAgcmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsg DQogICAgICAgICAgICAgfSBjYXRjaChTZWN1cml0eUV4Y2VwdGlvbiBlKSANCiAgICAgICAgICAg ICB7IA0KICAgICAgICAgICAgICAgIC8vIFNlY3VyaXR5IGV4Y2VwdGlvbiB0aHJvd24gDQogICAg ICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIllvdSdyZSBub3QgYWxsb3dl ZCB0byBhY2Nlc3MgdGhlIGFjdGlvbiAiK2FjdGlvbk5hbWUsIGUpOyANCiAgICAgICAgICAgICB9 IGNhdGNoKFJlc3VsdEV4Y2VwdGlvbiBlKSANCiAgICAgICAgICAgICB7IA0KICAgICAgICAgICAg ICAgIC8vIFNob3cgY2hvc2VuIHZpZXcgDQogICAgICAgICAgICAgICAgcmVzdWx0ID0gKFN0cmlu ZyllLmdldFJlc3VsdCgpOyANCiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSANCiAg ICAgICAgICAgICB7IA0KICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiQWN0aW9uIGV4ZWN1dGlv biBleGNlcHRpb24iLCBlKTsgDQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNl cHRpb24oIlN5c3RlbSBlcnJvciB3aGlsZSBleGVjdXRpbmcgIiArIGFjdGlvbi5nZXRDbGFzcygp LCBlKTsgDQogICAgICAgICAgICAgfSBmaW5hbGx5IA0KICAgICAgICAgICAgIHsgDQogICAgICAg ICAgICAgICAgTkRDLnBvcCgpOyANCiAgICAgICAgICAgICB9IA0KDQogICAgICAgICAgICAgbG9n LmRlYnVnKCJSZXN1bHQ6IiArIHJlc3VsdCk7IA0KICAgICAgICAgfSANCg0KICAgICAgICAgLy8g Tm8gcmVzdWx0IA0KICAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSANCiAgICAgICAgIHsgDQog ICAgICAgICAgICBsb2cuZGVidWcoIkFjdGlvbiBoYXMgbm8gcmVzdWx0Iik7IA0KICAgICAgICAg ICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIlN5c3RlbSBlcnJvciB3aGlsZSBleGVjdXRp bmcgIiArIGFjdGlvbi5nZXRDbGFzcygpKTsgDQogICAgICAgICB9IA0KDQogICAgICAgICAvLyBH ZXQgdmlldyBjb3JyZXNwb25kaW5nIHRvIHJlc3VsdCANCiAgICAgICAgIC8vIENoZWNrIHJlcXVl c3Qgb3ZlcnJpZGUgZmlyc3QgDQogICAgICAgICBTdHJpbmcgdmlldzsgDQogICAgICAgICBpZiAo KHZpZXcgPSBhUmVxdWVzdC5nZXRQYXJhbWV0ZXIocmVzdWx0KSkgPT0gbnVsbCkgDQogICAgICAg ICB7IA0KICAgICAgICAgICAgdHJ5IA0KICAgICAgICAgICAgeyANCiAgICAgICAgICAgICAgIHZp ZXcgPSAoU3RyaW5nKW1hcHBpbmcuZ2V0VmlldyhhY3Rpb25OYW1lLCByZXN1bHQpOyANCiAgICAg ICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSANCiAgICAgICAgICAg IHsgDQogICAgICAgICAgICAgICAvLyBObyB2aWV3IGZvdW5kIA0KICAgICAgICAgICAgICAgbG9n LmRlYnVnKCJObyB2aWV3IGZvdW5kIGZvciBhY3Rpb24gIithY3Rpb25OYW1lKTsgDQogICAgICAg ICAgICB9IA0KICAgICAgICAgfSANCg0KICAgICAgICAgLy8gT25seSBzaG93IGlmIGEgdmlldyBp cyBhc3NpZ25lZCB0byB0aGlzIGFjdGlvbnMgcmVzdWx0IA0KICAgICAgICAgaWYgKHZpZXcgIT0g bnVsbCkgDQogICAgICAgICB7IA0KICAgICAgICAgICAgLy8gU2hvdyB2aWV3IA0KICAgICAgICAg ICAgaWYgKCF2aWV3LnN0YXJ0c1dpdGgoIi8iKSkgdmlldyA9IGFjdGlvblBhdGggKyB2aWV3OyAv LyBBZGQgcGF0aCBwcmVmaXggDQoNCiAgICAgICAgICAgIHRyeSANCiAgICAgICAgICAgIHsgDQog ICAgICAgICAgICAgICBsb2cuZGVidWcoIlZpZXc6IiArIHZpZXcpOyANCg0KICAgICAgICAgICAg ICAgLy8gUHVzaCB2aWV3IG5hbWUgb250byBOREMgDQogICAgICAgICAgICAgICBOREMucHVzaCh2 aWV3KTsgDQoNCg0KICAgICAgICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgZGlzcGF0Y2hlciA9 IG51bGw7IA0KICAgICAgICAgICAgICAgdHJ5IA0KICAgICAgICAgICAgICAgeyANCiAgICAgICAg ICAgICAgICAgIGRpc3BhdGNoZXIgPSBhUmVxdWVzdC5nZXRSZXF1ZXN0RGlzcGF0Y2hlcih2aWV3 KTsgDQogICAgICAgICAgICAgICB9IGNhdGNoKFRocm93YWJsZSBlKSANCiAgICAgICAgICAgICAg IHsgDQogICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgDQogICAgICAgICAgICAgICB9IA0KDQog ICAgICAgICAgICAgICBpZiAoZGlzcGF0Y2hlciA9PSBudWxsKSANCiAgICAgICAgICAgICAgICAg IHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJObyBwcmVzZW50YXRpb24gZmlsZSB3aXRoIG5h bWUgJyIgKyB2aWV3ICsgIicgZm91bmQhIik7IA0KDQogICAgICAgICAgICAgICB0cnkgDQogICAg ICAgICAgICAgICB7IA0KICAgICAgICAgICAgICAgICAgLy8gU3RvcmUgcmVzdWx0IGZvciB1c2Ug aW4gdmlldyANCiAgICAgICAgICAgICAgICAgIFZhbHVlU3RhY2suZ2V0U3RhY2soYVJlcXVlc3Qp LnB1c2hWYWx1ZShhY3Rpb24pOyANCg0KICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgaW5j bHVkZWQsIHRoZW4gaW5jbHVkZSB0aGUgdmlldyANCiAgICAgICAgICAgICAgICAgIC8vIE90aGVy d2lzZSBkbyBmb3J3YXJkIA0KICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxvdyB0aGUgcGFn ZSB0bywgZm9yIGV4YW1wbGUsIHNldCBjb250ZW50IHR5cGUgDQogICAgICAgICAgICAgICAgICBp ZiAoYVJlcXVlc3QuZ2V0QXR0cmlidXRlKCJqYXZheC5zZXJ2bGV0LmluY2x1ZGUuc2VydmxldF9w YXRoIikgPT0gbnVsbCkgDQogICAgICAgICAgICAgICAgICB7IA0KICAgICAgICAgICAgICAgICAg ICAgYVJlcXVlc3Quc2V0QXR0cmlidXRlKCJ3ZWJ3b3JrLnZpZXdfdXJpIiwgdmlldyk7IA0KICAg ICAgICAgICAgICAgICAgICAgYVJlcXVlc3Quc2V0QXR0cmlidXRlKCJ3ZWJ3b3JrLnJlcXVlc3Rf dXJpIixhUmVxdWVzdC5nZXRSZXF1ZXN0VVJJKCkpOyANCiAgICAgIC8vICAgICAgICAgICAgICAg YVJlcXVlc3Quc2V0QXR0cmlidXRlKCJ3ZWJ3b3JrLmNvbnRleHRQYXRoIixhUmVxdWVzdC5nZXRD b250ZXh0UGF0aCgpKTsgDQogICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyLmZvcndhcmQo YVJlcXVlc3QsIGFSZXNwb25zZSk7IA0KICAgICAgICAgICAgICAgICAgfSBlbHNlIA0KICAgICAg ICAgICAgICAgICAgeyANCiAgICAgIC8vICAgICAgICAgICAgICAgYVJlcXVlc3Quc2V0QXR0cmli dXRlKCJ3ZWJ3b3JrLnJlcXVlc3RfdXJpIixhUmVxdWVzdC5nZXRBdHRyaWJ1dGUoImphdmF4LnNl cnZsZXQuaW5jbHVkZS5yZXF1ZXN0X3VyaSIpKTsgDQogICAgICAvLyAgICAgICAgICAgICAgIGFS ZXF1ZXN0LnNldEF0dHJpYnV0ZSgid2Vid29yay5jb250ZXh0UGF0aCIsYVJlcXVlc3QuZ2V0QXR0 cmlidXRlKCJqYXZheC5zZXJ2bGV0LmluY2x1ZGUuY29udGV4dF9wYXRoIikpOyANCiAgICAgICAg ICAgICAgICAgICAgIGRpc3BhdGNoZXIuaW5jbHVkZShhUmVxdWVzdCwgYVJlc3BvbnNlKTsgDQog ICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgfSBjYXRjaChJT0V4Y2VwdGlvbiBl KSANCiAgICAgICAgICAgICAgIHsgDQogICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2Vydmxl dEV4Y2VwdGlvbihlKTsgDQogICAgICAgICAgICAgICB9IGZpbmFsbHkgDQogICAgICAgICAgICAg ICB7IA0KICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgcmVzdWx0IGFuZCBzdG9yZSBpbiByZXF1 ZXN0IGF0dHJpYnV0ZSBTVEFDS19IRUFEIA0KICAgICAgICAgICAgICAgICAgYVJlcXVlc3Quc2V0 QXR0cmlidXRlKFNUQUNLX0hFQUQsVmFsdWVTdGFjay5nZXRTdGFjayhhUmVxdWVzdCkucG9wVmFs dWUoKSk7IA0KICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgIH0gZmluYWxseSANCiAgICAg ICAgICAgIHsgDQogICAgICAgICAgICAgICAvLyBSZW1vdmUgdmlldyBuYW1lIGZyb20gTkRDIA0K ICAgICAgICAgICAgICAgTkRDLnBvcCgpOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICB9IA0K ICAgICAgfSBmaW5hbGx5IHsgDQogICAgICAgICAvLyBSZXNldCBjb250ZXh0LiBJbXBvcnRhbnQg aWYgdGhpcyBhY3Rpb24gd2FzIGluY2x1ZGVkIA0KICAgICAgICAgQWN0aW9uQ29udGV4dC5zZXRD b250ZXh0KG9sZENvbnRleHQpOyANCiAgICAgIH0gDQogICB9IA0KfQ0K |