SHIMODA Hiroshi
null+****@clear*****
Wed Aug 15 18:02:43 JST 2012
SHIMODA Hiroshi 2012-08-15 18:02:43 +0900 (Wed, 15 Aug 2012) New Revision: dde09423992fdc55e0a24c269fb6d90b1f9e6282 https://github.com/groonga/gcs/commit/dde09423992fdc55e0a24c269fb6d90b1f9e6282 Log: Generate XML responses by a common method Modified files: lib/api/2011-02-01/configuration.js package.json test/xml-responses.js Modified: lib/api/2011-02-01/configuration.js (+80 -205) =================================================================== --- lib/api/2011-02-01/configuration.js 2012-08-15 17:23:29 +0900 (40999b1) +++ lib/api/2011-02-01/configuration.js 2012-08-15 18:02:43 +0900 (cacdaaa) @@ -4,6 +4,7 @@ var Domain = require('../../database').Domain; var dateFormat = require('dateformat'); var xmlbuilder = require('../../xmlbuilder'); var ipv4 = require('../../ipv4'); +var uuid = require('node-uuid'); exports.version = path.basename(__dirname); @@ -18,7 +19,7 @@ function createCommonErrorResponse(errorCode, error) { .element('Message').text((error.message || error).toString()).up() .up() .up() - .element('RequestID').up(); + .element('RequestID').text(uuid.v4()).up(); return doc.toString(); } @@ -46,6 +47,20 @@ function getBaseHostAndPort(config, request) { return host + ':' + port; } +function createGenericResponse(action, result) { + var doc = xmlbuilder.create(); + var root = doc.begin(action + 'Response', { version: '1.0' }) + .attribute('xmlns', XMLNS); + + var resultContainer = root.element(action + 'Result'); + if (result) resultContainer.importXMLBuilder(result); + + root.element('ResponseMetadata') + .element('RequestId').text(uuid.v4()); + + return doc.toString(); +} + function createDomainStatus(options) { var domainStatus = xmlbuilder.create(); domainStatus.begin(options.element || 'DomainStatus', { version: '1.0' }) @@ -76,29 +91,17 @@ function createDomainStatus(options) { return domainStatus; } -function createCreateDomainResponse(options) { - var doc = xmlbuilder.create(); - doc.begin('CreateDomainResponse', { version: '1.0' }) - .attribute('xmlns', XMLNS) - .element('CreateDomainResult') - .importXMLBuilder(createDomainStatus(options)) - .up() - .element('ResponseMetadata') - .element('RequestId').text(options.requestId || '').up() - .up(); - return doc.toString(); -} - handlers.CreateDomain = function(context, request, response, config) { var domain = new Domain(request.query.DomainName, context); try { domain.createSync(); + var result = createDomainStatus({ + domain: domain, + hostAndPort: getBaseHostAndPort(config, request), + created: true + }); response.contentType('application/xml'); - response.send(createCreateDomainResponse({ - domain: domain, - hostAndPort: getBaseHostAndPort(config, request), - created: true - })); + response.send(createGenericResponse('CreateDomain', result)); } catch (error) { var body = createCommonErrorResponse('InternalFailure', error); response.contentType('application/xml'); @@ -106,29 +109,17 @@ handlers.CreateDomain = function(context, request, response, config) { } }; -function createDeleteDomainResponse(options) { - var doc = xmlbuilder.create(); - doc.begin('DeleteDomainResponse', { version: '1.0' }) - .attribute('xmlns', XMLNS) - .element('DeleteDomainResult') - .importXMLBuilder(createDomainStatus(options)) - .up() - .element('ResponseMetadata') - .element('RequestId').text(options.requestId || '').up() - .up(); - return doc.toString(); -} - handlers.DeleteDomain = function(context, request, response, config) { var domain = new Domain(request.query.DomainName, context); try { domain.deleteSync(); + var result = createDomainStatus({ + domain: domain, + hostAndPort: getBaseHostAndPort(config, request), + deleted: true + }); response.contentType('application/xml'); - response.send(createDeleteDomainResponse({ - domain: domain, - hostAndPort: getBaseHostAndPort(config, request), - deleted: true - })); + response.send(createGenericResponse('DeleteDomain', result)); } catch (error) { var body = createCommonErrorResponse('InternalFailure', (error.message || error).toString()); @@ -150,19 +141,6 @@ function createDomainStatusList(options) { return doc; } -function createDescribeDomainsResponse(options) { - var doc = xmlbuilder.create(); - doc.begin('DescribeDomainsResponse', { version: '1.0' }) - .attribute('xmlns', XMLNS) - .element('DescribeDomainsResult') - .importXMLBuilder(createDomainStatusList(options)) - .up() - .element('ResponseMetadata') - .element('RequestId').text(options.requestId || '').up() - .up(); - return doc.toString(); -} - handlers.DescribeDomains = function(context, request, response, config) { try { var keys = Object.keys(request.query).filter(function(key) { @@ -176,11 +154,12 @@ handlers.DescribeDomains = function(context, request, response, config) { return new Domain(name, context); }) : Domain.getAll(context) ; + var result = createDomainStatusList({ + domains: domains, + hostAndPort: getBaseHostAndPort(config, request) + }); response.contentType('application/xml'); - response.send(createDescribeDomainsResponse({ - domains: domains, - hostAndPort: getBaseHostAndPort(config, request) - })); + response.send(createGenericResponse('DescribeDomains', result)); } catch (error) { var body = createCommonErrorResponse('InternalFailure', (error.message || error).toString()); @@ -242,19 +221,6 @@ function createIndexFieldStatus(options) { return indexFieldStatus; } -function createDefineIndexFieldResponse(options) { - var doc = xmlbuilder.create(); - doc.begin('DefineIndexFieldResponse', { version: '1.0' }) - .attribute('xmlns', XMLNS) - .element('DefineIndexFieldResult') - .importXMLBuilder(createIndexFieldStatus(options)) - .up() - .element('ResponseMetadata') - .element('RequestId').text(options.requestId || '').up() - .up(); - return doc.toString(); -} - function getFieldOption(option, request, type) { if (type == 'text') return request.query['TextOptions.' + option]; @@ -293,12 +259,13 @@ handlers.DefineIndexField = function(context, request, response, config) { else field.saveOptionsSync(); + var result = createIndexFieldStatus({ + field: field, + createdAt: createdAt, + updatedAt: createdAt + }); response.contentType('application/xml'); - response.send(createDefineIndexFieldResponse({ - field: field, - createdAt: createdAt, - updatedAt: createdAt - })); + response.send(createGenericResponse('DefineIndexField', result)); } catch (error) { var body = createCommonErrorResponse('InternalFailure', (error.message || error).toString()); @@ -307,17 +274,6 @@ handlers.DefineIndexField = function(context, request, response, config) { } }; -function createDeleteIndexFieldResponse(options) { - var doc = xmlbuilder.create(); - doc.begin('DeleteIndexFieldResponse', {version: '1.0'}) - .attribute('xmlns', XMLNS) - .element('DeleteIndexFieldResult').up() - .element('ResponseMetadata') - .element('RequestId').text(options.requestId || '').up() - .up(); - return doc.toString(); -} - handlers.DeleteIndexField = function(context, request, response, config) { var domain = new Domain(request.query.DomainName, context); @@ -326,7 +282,7 @@ handlers.DeleteIndexField = function(context, request, response, config) { try { field.deleteSync(); response.contentType('application/xml'); - response.send(createDeleteIndexFieldResponse({})); + response.send(createGenericResponse('DeleteIndexField')); } catch (error) { var body = createCommonErrorResponse('InternalFailure', (error.message || error).toString()); @@ -335,10 +291,10 @@ handlers.DeleteIndexField = function(context, request, response, config) { } }; -function createIndexFields(options) { +function createIndexFields(fields) { var doc = xmlbuilder.create(); var indexFields = doc.begin('IndexFields', {version: '1.0'}); - options.fields.forEach(function(field) { + fields.forEach(function(field) { indexFields.importXMLBuilder(createIndexFieldStatus({ field: field, element: 'member' @@ -347,19 +303,6 @@ function createIndexFields(options) { return doc; } -function createDescribeIndexFieldsResponse(options) { - var doc = xmlbuilder.create(); - doc.begin('DescribeIndexFieldsResponse', { version: '1.0' }) - .attribute('xmlns', XMLNS) - .element('DescribeIndexFieldsResult') - .importXMLBuilder(createIndexFields(options)) - .up() - .element('ResponseMetadata') - .element('RequestId').text(options.requestId || '').up() - .up(); - return doc.toString(); -} - handlers.DescribeIndexFields = function(context, request, response, config) { var domain = new Domain(request.query.DomainName, context); @@ -375,10 +318,9 @@ handlers.DescribeIndexFields = function(context, request, response, config) { return domain.getIndexField(name); }) : domain.indexFields ; + var result = createIndexFields(fields); response.contentType('application/xml'); - response.send(createDescribeIndexFieldsResponse({ - fields: fields - })); + response.send(createGenericResponse('DescribeIndexFields', result)); } catch (error) { var body = createCommonErrorResponse('InternalFailure', (error.message || error).toString()); @@ -387,14 +329,9 @@ handlers.DescribeIndexFields = function(context, request, response, config) { } }; -function createIndexDocumentsResponse(options) { - var doc = xmlbuilder.create(); - var root = doc.begin('IndexDocumentsResponse', {version: '1.0'}) - .attribute('xmlns', XMLNS); - - var fieldNames = root.element('IndexDocumentsResult') - .element('FieldNames'); - options.domain.indexFields +function createFieldNames(domain) { + var fieldNames = doc.begin('FieldNames', {version: '1.0'}); + domain.indexFields .map(function(field) { return field.name; }) @@ -405,21 +342,16 @@ function createIndexDocumentsResponse(options) { .text(fieldName); fieldNames.importXMLBuilder(member); }); - - root.element('ResponseMetadata') - .element('RequestId').text(options.requestId || ''); - - return doc.toString(); + return fieldNames; } handlers.IndexDocuments = function(context, request, response, config) { var domain = new Domain(request.query.DomainName, context); try { domain.reindexSync(); + var result = createFieldNames(domain); response.contentType('application/xml'); - response.send(createIndexDocumentsResponse({ - domain: domain - })); + response.send(createGenericResponse('IndexDocuments', result)); } catch (error) { var body = createCommonErrorResponse('InternalFailure', (error.message || error).toString()); @@ -445,19 +377,6 @@ function createSynonymOptionsStatus(options) { return synonymOptionsStatus; } -function createUpdateSynonymOptionsResponse(options) { - var doc = xmlbuilder.create(); - doc.begin('UpdateSynonymOptionsResponse', { version: '1.0' }) - .attribute('xmlns', XMLNS) - .element('UpdateSynonymOptionsResult') - .importXMLBuilder(createSynonymOptionsStatus(options)) - .up() - .element('ResponseMetadata') - .element('RequestId').text(options.requestId || '').up() - .up(); - return doc.toString(); -} - handlers.UpdateSynonymOptions = function(context, request, response, config) { var domain = new Domain(request.query.DomainName, context); try { @@ -466,11 +385,13 @@ handlers.UpdateSynonymOptions = function(context, request, response, config) { domain.updateSynonymsSync(synonymOptions.synonyms); var updatedAt = new Date(); - response.send(createUpdateSynonymOptionsResponse({ - domain: domain, - updatedAt: updatedAt, - createdAt: updatedAt - })); + var result = createSynonymOptionsStatus({ + domain: domain, + updatedAt: updatedAt, + createdAt: updatedAt + }); + response.contentType('application/xml'); + response.send(createGenericResponse('UpdateSynonymOptions', result)); } catch (error) { var body = createCommonErrorResponse('InternalFailure', (error.message || error).toString()); @@ -479,28 +400,17 @@ handlers.UpdateSynonymOptions = function(context, request, response, config) { } }; -function createDescribeSynonymOptionsResponse(options) { - var doc = xmlbuilder.create(); - doc.begin('DescribeSynonymOptionsResponse', { version: '1.0' }) - .attribute('xmlns', XMLNS) - .element('DescribeSynonymOptionsResult') - .importXMLBuilder(createSynonymOptionsStatus(options)) - .up() - .element('ResponseMetadata') - .element('RequestId').text(options.requestId || '').up() - .up(); - return doc.toString(); -} - handlers.DescribeSynonymOptions = function(context, request, response, config) { var domain = new Domain(request.query.DomainName, context); try { var updatedAt = new Date(); - response.send(createDescribeSynonymOptionsResponse({ - domain: domain, - updatedAt: updatedAt, - createdAt: updatedAt - })); + var result = createSynonymOptionsStatus({ + domain: domain, + updatedAt: updatedAt, + createdAt: updatedAt + }); + response.contentType('application/xml'); + response.send(createGenericResponse('DescribeSynonymOptions', result)); } catch (error) { var body = createCommonErrorResponse('InternalFailure', (error.message || error).toString()); @@ -518,42 +428,25 @@ function createDefaultSearchFieldStatus(options) { state: options.state, updatedAt: options.updatedAt, updateVersion: options.updateVersion, - element: options.optionStatusElement + element: 'Status' })); return defaultSearchFieldStatus; } -function createUpdateDefaultSearchFieldResponse(options) { - var doc = xmlbuilder.create(); - doc.begin('UpdateDefaultSearchFieldResponse', { version: '1.0' }) - .attribute('xmlns', XMLNS) - .element('UpdateDefaultSearchFieldResult') - .importXMLBuilder(createDefaultSearchFieldStatus({ - fieldName: options.fieldName, - createdAt: options.createdAt, - state: options.state, - updatedAt: options.updatedAt, - updateVersion: options.updateVersion, - optionStatusElement: 'Status' - })) - .up() - .element('ResponseMetadata') - .element('RequestId').text(options.requestId || '').up() - .up(); - return doc.toString(); -} - handlers.UpdateDefaultSearchField = function(context, request, response, config) { var domain = new Domain(request.query.DomainName, context); try { var fieldName = request.query.DefaultSearchField; domain.defaultSearchField = fieldName; + var updatedAt = new Date(); - response.send(createUpdateDefaultSearchFieldResponse({ - fieldName: fieldName, - updatedAt: updatedAt, - createdAt: updatedAt - })); + var result = createDefaultSearchFieldStatus({ + fieldName: fieldName, + createdAt: updatedAt, + updatedAt: updatedAt + }); + response.contentType('application/xml'); + response.send(createGenericResponse('UpdateDefaultSearchField', result)); } catch (error) { var body = createCommonErrorResponse('InternalFailure', (error.message || error).toString()); @@ -562,36 +455,18 @@ handlers.UpdateDefaultSearchField = function(context, request, response, config) } }; -function createDescribeDefaultSearchFieldResponse(options) { - var doc = xmlbuilder.create(); - doc.begin('DescribeDefaultSearchFieldResponse', { version: '1.0' }) - .attribute('xmlns', XMLNS) - .element('DescribeDefaultSearchFieldResult') - .importXMLBuilder(createDefaultSearchFieldStatus({ - fieldName: options.fieldName, - createdAt: options.createdAt, - state: options.state, - updatedAt: options.updatedAt, - updateVersion: options.updateVersion, - optionStatusElement: 'Status' - })) - .up() - .element('ResponseMetadata') - .element('RequestId').text(options.requestId || '').up() - .up(); - return doc.toString(); -} - handlers.DescribeDefaultSearchField = function(context, request, response, config) { var domain = new Domain(request.query.DomainName, context); try { var field = domain.defaultSearchField; var updatedAt = new Date(); - response.send(createDescribeDefaultSearchFieldResponse({ - fieldName: field ? field.name : '', - updatedAt: updatedAt, - createdAt: updatedAt - })); + var result = createDefaultSearchFieldStatus({ + fieldName: field ? field.name : '', + createdAt: updatedAt, + updatedAt: updatedAt + }); + response.contentType('application/xml'); + response.send(createGenericResponse('DescribeDefaultSearchField', result)); } catch (error) { var body = createCommonErrorResponse('InternalFailure', (error.message || error).toString()); Modified: package.json (+1 -0) =================================================================== --- package.json 2012-08-15 17:23:29 +0900 (a240a2b) +++ package.json 2012-08-15 18:02:43 +0900 (242bb6d) @@ -23,6 +23,7 @@ "jade": "", "jsdeferred": "", "mkdirp": "", + "node-uuid": "", "nroonga": "", "xml2js": "", "xmlbuilder": "" Modified: test/xml-responses.js (+2 -2) =================================================================== --- test/xml-responses.js 2012-08-15 17:23:29 +0900 (e3a31f0) +++ test/xml-responses.js 2012-08-15 18:02:43 +0900 (4e869b2) @@ -13,7 +13,7 @@ var SearchService = }; var ResponseMetadata = exports.ResponseMetadata = { - RequestId: {} + RequestId: '' }; var DomainStatus = exports.DomainStatus = { @@ -243,7 +243,7 @@ var COMMON_ERROR_RESPONSE = Message: '' } }, - RequestID: {} + RequestID: '' } }; -------------- next part -------------- HTML����������������������������...Download