@zohocrm/nodejs-sdk-2.0
Version:
Node JS SDK for Zoho CRM
901 lines (645 loc) • 26.3 kB
JavaScript
let Converter = require("./converter").Converter;
const Initializer = require("../../routes/initializer").Initializer;
const SDKException = require("../../core/com/zoho/crm/api/exception/sdk_exception").SDKException;
const DatatypeConverter = require("../util/datatype_converter").DatatypeConverter;
const path = require('path');
const Constants = require("./constants").Constants;
const Utility = require("./utility").Utility;
const Record = require("../../core/com/zoho/crm/api/record/record").Record;
const FileDetails = require("../../core/com/zoho/crm/api/record/file_details").FileDetails;
/**
* This class processes the API response to the object and an object to a JSON object, containing the request body.
*/
class JSONConverter extends Converter {
uniqueValuesMap = {};
constructor(commonAPIHandler) {
super(commonAPIHandler);
}
async appendToRequest(requestBase, requestObject) {
return JSON.stringify(requestBase.getRequestBody()) || null;
}
async formRequest(requestInstance, pack, instanceNumber, memberDetail) {
var classDetail = Initializer.jsonDetails[pack];
if (classDetail.hasOwnProperty(Constants.INTERFACE) && classDetail[Constants.INTERFACE]) {
var classes = classDetail[Constants.CLASSES];
var baseName = pack.split('/').slice(0, -1);
let className = await this.getFileName(requestInstance.constructor.name);
baseName.push(className);
let requestObjectClassName = baseName.join('/');
for (let className1 in classes) {
if (classes[className1].toLowerCase() == requestObjectClassName) {
classDetail = Initializer.jsonDetails[requestObjectClassName];
break;
}
}
}
if (requestInstance instanceof Record) {
let moduleAPIName = this.commonAPIHandler.getModuleAPIName();
let returnJSON = await this.isRecordRequest(requestInstance, classDetail, instanceNumber, memberDetail);
this.commonAPIHandler.setModuleAPIName(moduleAPIName);
return returnJSON;
}
else {
return await this.isNotRecordRequest(requestInstance, classDetail, instanceNumber, memberDetail);
}
}
async isNotRecordRequest(requestInstance, classDetail, instanceNumber, classMemberDetail) {
var requestJSON = {};
var requiredKeys = new Map();
var primaryKeys = new Map();
var requiredInUpdateKeys = new Map();
var lookUp = false;
var skipMandatory = false;
var classMemberName = null;
if (classMemberDetail != null) {
lookUp = (classMemberDetail.hasOwnProperty(Constants.LOOKUP) ? classMemberDetail[Constants.LOOKUP] : false);
skipMandatory = (classMemberDetail.hasOwnProperty(Constants.SKIP_MANDATORY) ? classMemberDetail[Constants.SKIP_MANDATORY] : false);
classMemberName = this.buildName(classMemberDetail[Constants.NAME]);
}
for (let memberName in classDetail) {
var modification = null;
var memberDetail = classDetail[memberName];
if ((memberDetail.hasOwnProperty(Constants.READ_ONLY) && memberDetail[Constants.READ_ONLY] == 'true') || !memberDetail.hasOwnProperty(Constants.NAME)) {// read only or no keyName
continue;
}
var keyName = memberDetail[Constants.NAME];
try {
modification = requestInstance.isKeyModified(keyName);
}
catch (ex) {
throw new SDKException(Constants.EXCEPTION_IS_KEY_MODIFIED, null, null, ex);
}
if (memberDetail.hasOwnProperty(Constants.REQUIRED) && memberDetail[Constants.REQUIRED] == true) {
requiredKeys.set(keyName, true);
}
if (memberDetail.hasOwnProperty(Constants.PRIMARY) && memberDetail[Constants.PRIMARY] == true && (!memberDetail.hasOwnProperty(Constants.REQUIRED_IN_UPDATE) || memberDetail[Constants.REQUIRED_IN_UPDATE] == true)) {
primaryKeys.set(keyName, true);
}
if (memberDetail.hasOwnProperty(Constants.REQUIRED_IN_UPDATE) && memberDetail[Constants.REQUIRED_IN_UPDATE] == true) {
requiredInUpdateKeys.set(keyName, true);
}
var fieldValue = null;
if (modification != null && modification != 0) {
fieldValue = Reflect.get(requestInstance, memberName);
if (await this.valueChecker(requestInstance.constructor.name, memberName, memberDetail, fieldValue, this.uniqueValuesMap, instanceNumber)) {
if (fieldValue != null) {
requiredKeys.delete(keyName);
primaryKeys.delete(keyName);
requiredInUpdateKeys.delete(keyName);
}
if (requestInstance instanceof FileDetails) {
if (fieldValue == null || fieldValue == "null") {
requestJSON[keyName.toLowerCase()] = null;
}
else {
requestJSON[keyName.toLowerCase()] = fieldValue;
}
}
else {
requestJSON[keyName] = await this.setData(memberDetail, fieldValue)
}
}
}
}
if (skipMandatory || this.checkException(classMemberName, requestInstance, instanceNumber, lookUp, requiredKeys, primaryKeys, requiredInUpdateKeys) === true) {
return requestJSON;
}
}
checkException(memberName, requestInstance, instanceNumber, lookUp, requiredKeys, primaryKeys, requiredInUpdateKeys) {
if (requiredInUpdateKeys.size > 0 && this.commonAPIHandler.getCategoryMethod() != null && this.commonAPIHandler.getCategoryMethod().toUpperCase() == Constants.REQUEST_CATEGORY_UPDATE) {
let error = {};
error.field = memberName;
error.type = requestInstance.constructor.name;
error.keys = Array.from(requiredInUpdateKeys.keys()).toString();
if (instanceNumber != null) {
error.instance_number = instanceNumber;
}
throw new SDKException(Constants.MANDATORY_VALUE_ERROR, Constants.MANDATORY_KEY_ERROR, error, null);
}
if (this.commonAPIHandler.isMandatoryChecker() != null && this.commonAPIHandler.isMandatoryChecker()) {
if (this.commonAPIHandler.getCategoryMethod().toUpperCase() == Constants.REQUEST_CATEGORY_CREATE) {
if (lookUp) {
if (primaryKeys.size > 0) {
let error = {};
error.field = memberName;
error.type = requestInstance.constructor.name;
error.keys = Array.from(primaryKeys.keys()).toString();
if (instanceNumber != null) {
error.instance_number = instanceNumber;
}
throw new SDKException(Constants.MANDATORY_VALUE_ERROR, Constants.PRIMARY_KEY_ERROR, error, null);
}
}
else if (requiredKeys.size > 0) {
let error = {};
error.field = memberName;
error.type = requestInstance.constructor.name;
error.keys = Array.from(requiredKeys.keys()).toString();
if (instanceNumber != null) {
error.instance_number = instanceNumber;
}
throw new SDKException(Constants.MANDATORY_VALUE_ERROR, Constants.MANDATORY_KEY_ERROR, error, null);
}
}
if (this.commonAPIHandler.getCategoryMethod().toUpperCase() == Constants.REQUEST_CATEGORY_UPDATE && primaryKeys.size > 0) {
let error = {};
error.field = memberName;
error.type = requestInstance.constructor.name;
error.keys = Array.from(primaryKeys.keys()).toString();
if (instanceNumber != null) {
error.instance_number = instanceNumber;
}
throw new SDKException(Constants.MANDATORY_VALUE_ERROR, Constants.PRIMARY_KEY_ERROR, error, null);
}
}
else if (lookUp && this.commonAPIHandler.getCategoryMethod().toUpperCase() == Constants.REQUEST_CATEGORY_UPDATE) {
if (primaryKeys.size > 0) {
let error = {};
error.field = memberName;
error.type = requestInstance.constructor.name;
error.keys = Array.from(primaryKeys.keys()).toString();
if (instanceNumber != null) {
error.instance_number = instanceNumber;
}
throw new SDKException(Constants.MANDATORY_VALUE_ERROR, Constants.PRIMARY_KEY_ERROR, error, null);
}
}
return true;
}
async isRecordRequest(recordInstance, classDetail, instanceNumber, classMemberDetail) {
var requestJSON = {};
var moduleDetail = {};
var lookUp = false;
var skipMandatory = false;
var classMemberName = null;
if (classMemberDetail != null) {
lookUp = (classMemberDetail.hasOwnProperty(Constants.LOOKUP) ? classMemberDetail[Constants.LOOKUP] : false);
skipMandatory = (classMemberDetail.hasOwnProperty(Constants.SKIP_MANDATORY) ? classMemberDetail[Constants.SKIP_MANDATORY] : false);
classMemberName = this.buildName(classMemberDetail[Constants.NAME]);
}
var moduleAPIName = this.commonAPIHandler.getModuleAPIName();
if (moduleAPIName != null) {// entry
this.commonAPIHandler.setModuleAPIName(null);
var fullDetail = await Utility.searchJSONDetails(moduleAPIName);// to get correct moduleapiname in proper format
if (fullDetail != null) {// from Jsondetails
moduleDetail = fullDetail[Constants.MODULEDETAILS];
}
else {// from user spec
moduleDetail = await this.getModuleDetailFromUserSpecJSON(moduleAPIName);
}
}
else {// inner case
moduleDetail = classDetail;
classDetail = Initializer.jsonDetails[Constants.RECORD_NAMESPACE];
}// class detail must contain record structure at this point
let uniqueValues = new Map();
var keyValues = Reflect.get(recordInstance, Constants.KEY_VALUES);
var keyModified = Reflect.get(recordInstance, Constants.KEY_MODIFIED);
var requiredKeys = new Map();
var primaryKeys = new Map();
if (!skipMandatory) {
for (let keyName of Object.keys(moduleDetail)) {
const keyDetail = moduleDetail[keyName];
let name = keyDetail[Constants.NAME];
if (keyDetail != null && keyDetail.hasOwnProperty(Constants.REQUIRED) && keyDetail[Constants.REQUIRED] == true) {
requiredKeys.set(name, true);
}
if (keyDetail != null && keyDetail.hasOwnProperty(Constants.PRIMARY) && keyDetail[Constants.PRIMARY] == true) {
primaryKeys.set(name, true);
}
}
for (let keyName of Object.keys(classDetail)) {
const keyDetail = classDetail[keyName];
let name = keyDetail[Constants.NAME];
if (keyDetail.hasOwnProperty(Constants.REQUIRED) && keyDetail[Constants.REQUIRED] == true) {
requiredKeys.set(name, true);
}
if (keyDetail.hasOwnProperty(Constants.PRIMARY) && keyDetail[Constants.PRIMARY] == true) {
primaryKeys.set(name, true);
}
}
}
for (let keyName of Array.from(keyModified.keys())) {
if (keyModified.get(keyName) != 1) {
continue;
}
let keyDetail = {};
let keyValue = keyValues.has(keyName) ? keyValues.get(keyName) : null;
let jsonValue = null;
if (keyValue != null) {
requiredKeys.delete(keyName);
primaryKeys.delete(keyName);
}
let memberName = this.buildName(keyName);
if (moduleDetail != null && Object.keys(moduleDetail).length > 0 && (moduleDetail.hasOwnProperty(keyName) || moduleDetail.hasOwnProperty(memberName))) {
if (moduleDetail.hasOwnProperty(keyName)) {
keyDetail = moduleDetail[keyName];// incase of user spec json
}
else {
keyDetail = moduleDetail[memberName];// json details
}
}
else if (classDetail.hasOwnProperty(memberName)) {
keyDetail = classDetail[memberName];
}
if (Object.keys(keyDetail).length > 0) {
if ((keyDetail.hasOwnProperty(Constants.READ_ONLY) && (keyDetail[Constants.READ_ONLY] == true || keyDetail[Constants.READ_ONLY] == 'true')) || !keyDetail.hasOwnProperty(Constants.NAME)) { // read only or no keyName
continue;
}
if (await this.valueChecker(recordInstance.constructor.name, keyName, keyDetail, keyValue, uniqueValues, instanceNumber)) {
jsonValue = await this.setData(keyDetail, keyValue);
}
}
else {
jsonValue = await this.redirectorForObjectToJSON(keyValue);
}
requestJSON[keyName] = jsonValue;
}
if (skipMandatory || this.checkException(classMemberName, recordInstance, instanceNumber, lookUp, requiredKeys, primaryKeys, new Map())) {
return requestJSON;
}
return requestJSON;
}
async setData(memberDetail, fieldValue) {
if (fieldValue != null) {
let type = memberDetail[Constants.TYPE].toString();
if (type.toLowerCase() == Constants.LIST_NAMESPACE.toLowerCase()) {
return await this.setJSONArray(fieldValue, memberDetail);
}
else if (type.toLowerCase() == Constants.MAP_NAMESPACE.toLowerCase()) {
return await this.setJSONObject(fieldValue, memberDetail);
}
else if (type == Constants.CHOICE_NAMESPACE || (memberDetail.hasOwnProperty(Constants.STRUCTURE_NAME) && memberDetail[Constants.STRUCTURE_NAME] == Constants.CHOICE_NAMESPACE)) {
return fieldValue.getValue();
}
else if (memberDetail.hasOwnProperty(Constants.STRUCTURE_NAME) && memberDetail.hasOwnProperty(Constants.MODULE)) {
return await this.isRecordRequest(fieldValue, await this.getModuleDetailFromUserSpecJSON(memberDetail[Constants.MODULE]), null, memberDetail);
}
else if (memberDetail.hasOwnProperty(Constants.STRUCTURE_NAME)) {
return await this.formRequest(fieldValue, memberDetail[Constants.STRUCTURE_NAME], null, memberDetail);
}
else {
return DatatypeConverter.postConvert(fieldValue, type);
}
}
return null;
}
async setJSONObject(requestObject, memberDetail) {
var jsonObject = {};
if (Array.from(requestObject.keys()).length > 0) {
if (memberDetail == null || (memberDetail != null && !memberDetail.hasOwnProperty(Constants.KEYS))) {
for (let key of Array.from(requestObject.keys())) {
jsonObject[key] = await this.redirectorForObjectToJSON(requestObject.get(key));
}
}
else {
if (memberDetail !== null && memberDetail.hasOwnProperty(Constants.KEYS)) {
var keysDetail = memberDetail[Constants.KEYS];
for (let keyIndex = 0; keyIndex < keysDetail.length; keyIndex++) {
let keyDetail = keysDetail[keyIndex];
let keyName = keyDetail[Constants.NAME];
let keyValue = null;
if (requestObject.has(keyName) && requestObject.get(keyName) != null) {
keyValue = await this.setData(keyDetail, requestObject.get(keyName));
jsonObject[keyName] = keyValue;
}
}
}
}
}
return jsonObject;
}
async setJSONArray(requestObjects, memberDetail) {
var jsonArray = [];
if (requestObjects.length > 0) {
if (memberDetail == null || (memberDetail != null && !memberDetail.hasOwnProperty(Constants.STRUCTURE_NAME))) {
for (let request of requestObjects) {
jsonArray.push(await this.redirectorForObjectToJSON(request));
}
}
else {
let pack = memberDetail[Constants.STRUCTURE_NAME].toString();
if (pack == Constants.CHOICE_NAMESPACE) {
for (let request of requestObjects) {
jsonArray.push(request.getValue());
}
}
else if (memberDetail.hasOwnProperty(Constants.MODULE) && memberDetail[Constants.MODULE] != null) {
let instanceCount = 0;
for (let request of requestObjects) {
jsonArray.push(await this.isRecordRequest(request, await this.getModuleDetailFromUserSpecJSON(memberDetail[Constants.MODULE]), instanceCount++, memberDetail));
}
}
else {
let instanceCount = 0;
for (let request of requestObjects) {
jsonArray.push(await this.formRequest(request, pack, instanceCount++, memberDetail));
}
}
}
}
return jsonArray;
}
async redirectorForObjectToJSON(request) {
if (Array.isArray(request)) {
return await this.setJSONArray(request, null);
}
else if (request instanceof Map) {
return await this.setJSONObject(request, null);
}
else {
return request;
}
}
async getWrappedResponse(response, pack) {
if (response.body.length != 0) {
var responseJson = JSON.parse(response.body);
return await this.getResponse(responseJson, pack);
}
return null;
}
async getResponse(responseJson, packageName) {
var instance = null;
if (responseJson == null || responseJson == "" || responseJson.length == 0) {
return instance;
}
var classDetail = Initializer.jsonDetails[packageName];
if (classDetail.hasOwnProperty(Constants.INTERFACE) && classDetail[Constants.INTERFACE]) {
let classes = classDetail[Constants.CLASSES];
instance = await this.findMatch(classes, responseJson);// findmatch returns instance(calls getresponse() recursively)
}
else {
let ClassName = require("../../" + packageName).MasterModel;
instance = new ClassName();
if (instance instanceof Record) {// if record -> based on response json data will be assigned to field Values
let moduleAPIName = this.commonAPIHandler.getModuleAPIName();
instance = await this.isRecordResponse(responseJson, classDetail, packageName);
this.commonAPIHandler.setModuleAPIName(moduleAPIName);
}
else {
instance = await this.notRecordResponse(instance, responseJson, classDetail);// based on json details data will be assigned
}
}
return instance;
}
async notRecordResponse(instance, responseJSON, classDetail) {
for (let memberName in classDetail) {
let keyDetail = classDetail[memberName];
let keyName = keyDetail.hasOwnProperty(Constants.NAME) ? keyDetail[Constants.NAME] : null;// api-name of the member
if (keyName != null && responseJSON.hasOwnProperty(keyName) && responseJSON[keyName] !== null) {
let keyData = responseJSON[keyName];
let memberValue = await this.getData(keyData, keyDetail);
Reflect.set(instance, memberName, memberValue);
}
}
return instance;
}
async isRecordResponse(responseJson, classDetail, pack) {
let className = require("../../" + pack).MasterModel;
let recordInstance = new className();
let moduleAPIName = this.commonAPIHandler.getModuleAPIName();
let moduleDetail = {};
if (moduleAPIName != null) { // entry
this.commonAPIHandler.setModuleAPIName(null);
let fullDetail = await Utility.searchJSONDetails(moduleAPIName);// to get correct moduleapiname in proper format
if (fullDetail != null) {// from Jsondetails
moduleDetail = fullDetail[Constants.MODULEDETAILS];
let moduleClassName = require("../../" + fullDetail[Constants.MODULEPACKAGENAME]).MasterModel;
recordInstance = new moduleClassName();
}
else { // from user spec
moduleDetail = await this.getModuleDetailFromUserSpecJSON(moduleAPIName);
}
}
for (let key in classDetail) {
moduleDetail[key] = classDetail[key];
}
var recordDetail = Initializer.jsonDetails[Constants.RECORD_NAMESPACE];
var keyValues = new Map();
for (let keyName in responseJson) {
let memberName = this.buildName(keyName);
let keyDetail = {};
if (moduleDetail != null && Object.keys(moduleDetail).length > 0 && (moduleDetail.hasOwnProperty(keyName) || moduleDetail.hasOwnProperty(memberName))) {
if (moduleDetail.hasOwnProperty(keyName)) {
keyDetail = moduleDetail[keyName];
}
else {
keyDetail = moduleDetail[memberName];
}
}
else if (recordDetail.hasOwnProperty(memberName)) {
keyDetail = recordDetail[memberName];
}
let keyValue = null;
let keyData = responseJson[keyName];
if (keyDetail != null && Object.keys(keyDetail).length > 0) {
keyName = keyDetail[Constants.NAME];
keyValue = await this.getData(keyData, keyDetail);
}
else {// if not key detail
keyValue = await this.redirectorForJSONToObject(keyData);
}
keyValues.set(keyName, keyValue);
}
Reflect.set(recordInstance, Constants.KEY_VALUES, keyValues);
return recordInstance;
}
async getData(keyData, memberDetail) {
let memberValue = null;
if (keyData != null) {
let type = memberDetail[Constants.TYPE].toString();
if (type.toLowerCase() == Constants.LIST_NAMESPACE.toLowerCase()) {
memberValue = await this.getCollectionsData(keyData, memberDetail);
}
else if (type.toLowerCase() == Constants.MAP_NAMESPACE.toLowerCase()) {
memberValue = await this.getMapData(keyData, memberDetail);
}
else if (type == Constants.CHOICE_NAMESPACE || (memberDetail.hasOwnProperty(Constants.STRUCTURE_NAME) && memberDetail[Constants.STRUCTURE_NAME] == Constants.CHOICE_NAMESPACE)) {
let Choice = require(Constants.CHOICE_PATH).MasterModel;
memberValue = new Choice(keyData);
}
else if (memberDetail.hasOwnProperty(Constants.STRUCTURE_NAME) && memberDetail.hasOwnProperty(Constants.MODULE)) {
memberValue = await this.isRecordResponse(keyData, await this.getModuleDetailFromUserSpecJSON(memberDetail[Constants.MODULE]), memberDetail[Constants.STRUCTURE_NAME]);
}
else if (memberDetail.hasOwnProperty(Constants.STRUCTURE_NAME)) {
memberValue = await this.getResponse(keyData, memberDetail[Constants.STRUCTURE_NAME]);
}
else {
memberValue = await DatatypeConverter.preConvert(keyData, type);
}
}
return memberValue;
}
async getMapData(response, memberDetail) {
var mapInstance = new Map();
if (Object.keys(response).length > 0) {
if (memberDetail == null || (memberDetail != null && !memberDetail.hasOwnProperty(Constants.KEYS))) {
for (let key in response) {
mapInstance.set(key, await this.redirectorForJSONToObject(response[key]));
}
}
else {// member must have keys
if (memberDetail.hasOwnProperty(Constants.KEYS)) {
var keysDetail = memberDetail[Constants.KEYS];
for (let keyIndex = 0; keyIndex < keysDetail.length; keyIndex++) {
var keyDetail = keysDetail[keyIndex];
var keyName = keyDetail[Constants.NAME];
var keyValue = null;
if (response.hasOwnProperty(keyName) && response[keyName] != null) {
keyValue = await this.getData(response[keyName], keyDetail);
mapInstance.set(keyName, keyValue);
}
}
}
}
}
return mapInstance;
}
async getCollectionsData(responses, memberDetail) {
var values = new Array();
if (responses.length > 0) {
if (memberDetail == null || (memberDetail != null && !memberDetail.hasOwnProperty(Constants.STRUCTURE_NAME))) {
for (let response of responses) {
values.push(await this.redirectorForJSONToObject(response));
}
}
else {// need to have structure Name in memberDetail
var pack = memberDetail[Constants.STRUCTURE_NAME];
if (pack == Constants.CHOICE_NAMESPACE) {
for (let response of responses) {
let choiceClass = require(Constants.CHOICE_PATH).MasterModel;
let choiceInstance = new choiceClass(response);
values.push(choiceInstance);
}
}
else if (memberDetail.hasOwnProperty(Constants.MODULE) && memberDetail[Constants.MODULE] != null) {
for (let response of responses) {
values.push(await this.isRecordResponse(response, await this.getModuleDetailFromUserSpecJSON(memberDetail[Constants.MODULE]), pack));
}
}
else {
for (let response of responses) {
values.push(await this.getResponse(response, pack));
}
}
}
}
return values;
}
async getModuleDetailFromUserSpecJSON(module) {
let initializer = await Initializer.getInitializer();
var recordFieldDetailsPath = path.join(initializer.getResourcePath(), Constants.FIELD_DETAILS_DIRECTORY, await this.getEncodedFileName());
var moduleDetail = await Utility.getJSONObject(Initializer.getJSON(recordFieldDetailsPath), module);
return moduleDetail;
}
async redirectorForJSONToObject(keyData) {
let type = Object.prototype.toString.call(keyData);
if (type == Constants.OBJECT_TYPE) {
return await this.getMapData(keyData, null);
}
else if (type == Constants.ARRAY_TYPE) {
return await this.getCollectionsData(keyData, null);
}
else {
return keyData;
}
}
async findMatch(classes, responseJson) {
let pack = "";
let ratio = 0;
for (let className of classes) {
var matchRatio = await this.findRatio(className, responseJson);
if (matchRatio == 1.0) {
pack = className;
ratio = 1;
break;
}
else if (matchRatio > ratio) {
ratio = matchRatio;
pack = className;
}
}
return this.getResponse(responseJson, pack);
}
findRatio(className, responseJson) {
var classDetail = Initializer.jsonDetails[className];
var totalPoints = Array.from(Object.keys(classDetail)).length;
var matches = 0;
if (totalPoints == 0) {
return 0;
}
else {
for (let memberName in classDetail) {
var memberDetail = classDetail[memberName];
var keyName = memberDetail.hasOwnProperty(Constants.NAME) ? memberDetail[Constants.NAME] : null;
if (keyName != null && responseJson.hasOwnProperty(keyName) && responseJson[keyName] != null) {// key not empty
var keyData = responseJson[keyName];
let type = Object.prototype.toString.call(keyData);
let structureName = memberDetail.hasOwnProperty(Constants.STRUCTURE_NAME) ? memberDetail[Constants.STRUCTURE_NAME] : null;
if (type == Constants.OBJECT_TYPE) {
type = Constants.MAP_TYPE;
}
if (Constants.TYPE_VS_DATATYPE.has(memberDetail[Constants.TYPE].toLowerCase()) && Constants.TYPE_VS_DATATYPE.get(memberDetail[Constants.TYPE].toLowerCase()) == type) {
matches++;
}
else if (memberDetail[Constants.TYPE] == Constants.CHOICE_NAMESPACE) {
let values = memberDetail[Constants.VALUES];
for (let value in values) {
if (keyData == values[value]) {
matches++;
break;
}
}
}
if (structureName != null && structureName == memberDetail[Constants.TYPE]) {
if (memberDetail.hasOwnProperty(Constants.VALUES)) {
let values = memberDetail[Constants.VALUES];
for (let value in values) {
if (keyData == values[value]) {
matches++;
break;
}
}
}
else {
matches++;
}
}
}
}
}
return matches / totalPoints;
}
buildName(memberName) {
let name = memberName.toLowerCase().split("_");
var index = 0;
if (name.length == 0) {
index = 1;
}
var sdkName = name[0]
sdkName = sdkName[0].toLowerCase() + sdkName.slice(1);
index = 1;
for (var nameIndex = index; nameIndex < name.length; nameIndex++) {
var fieldName = name[nameIndex];
var firstLetterUppercase = "";
if (fieldName.length > 0) {
firstLetterUppercase = fieldName[0].toUpperCase() + fieldName.slice(1);
}
sdkName = sdkName.concat(firstLetterUppercase);
}
return sdkName;
}
getFileName(name) {
let fileName = [];
let nameParts = name.split(/([A-Z][a-z]+)/).filter(function (e) { return e });
fileName.push(nameParts[0].toLowerCase());
for (let i = 1; i < nameParts.length; i++) {
fileName.push(nameParts[i].toLowerCase());
}
return fileName.join("_");
}
}
module.exports = {
MasterModel: JSONConverter,
JSONConverter: JSONConverter
}