[Groonga-commit] groonga/gcs [master] Generate XML responses by a common method

Back to archive index

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 



More information about the Groonga-commit mailing list
Back to archive index