Name
sn_appclient.CommonUtils
Description
No description available
Script
var CommonUtils = {
getSearchType: function(searchExpression) {
return searchExpression && searchExpression.startsWith(Constants.SEARCH_FOR_EXACT_MATCH_PREFIX) ? Constants.SEARCH_FOR_EXACT_MATCH : Constants.SEARCH_FOR_CONTAINS;
},
getSearchKeyword: function(searchExpression) {
return searchExpression && (searchExpression.startsWith(Constants.SEARCH_FOR_EXACT_MATCH_PREFIX) || searchExpression.startsWith(Constants.SEARCH_FOR_CONTAINS_PREFIX)) ? searchExpression.substring(1) : searchExpression;
},
getEscapedRegExp: function(str) {
//Escaping regex -> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
},
getEncodedQueryFromExpression: function(searchExpression, columnName) {
var searchType = this.getSearchType(searchExpression);
var keyword = this.getSearchKeyword(searchExpression);
return (searchType == Constants.SEARCH_FOR_EXACT_MATCH) ? columnName + '=' + keyword : columnName + 'LIKE' + keyword;
},
appendEncodedQueryFromproductFamily: function(searchExpression, encodedQuery, productFamily) {
if (productFamily != null && productFamily.length > 0)
for (i = 0; i < productFamily.length; i++) {
if (i > 0) encodedQuery += "^OR";
else if (searchExpression) encodedQuery += "^";
encodedQuery += "family=" + productFamily[i];
}
return encodedQuery;
},
/**
* Returns array adhering to limit, and offset
* @param array
* @param queryParams
* @returns [*]
*/
getResultByParams: function(array, queryParams) {
var limit = this.getLimit(queryParams);
var offset = this.getOffset(queryParams);
return array.slice(offset, offset + limit);
},
isPaginationRequest: function(queryParams) {
return queryParams[Constants.SYSPARM_OFFSET] ? true : false;
},
isPureInteger: function(value) {
return value % 1 == 0;
},
getLimit: function(queryParams) {
var limit = (queryParams[Constants.SYSPARM_LIMIT] || gs.getProperty("sn_appclient.max_record_limit", Constants.MAX_RECORD_LIMIT)) * 1;
if (!this.isPureInteger(limit)) {
throw this.getErrorObject(ResponseMessage.getInvalidValue(Constants.SYSPARM_LIMIT),
ResponseMessage.getInvalidInteger(Constants.SYSPARM_LIMIT, queryParams[Constants.SYSPARM_LIMIT]));
}
if (limit <= 0) {
throw this.getErrorObject(ResponseMessage.getInvalidValue(Constants.SYSPARM_LIMIT),
ResponseMessage.getInvalidNaturalNumberRange(Constants.SYSPARM_LIMIT, queryParams[Constants.SYSPARM_LIMIT]));
}
return limit;
},
getOffset: function(queryParams) {
var offset = (queryParams[Constants.SYSPARM_OFFSET] || 0) * 1;
if (!this.isPureInteger(offset)) {
throw this.getErrorObject(ResponseMessage.getInvalidValue(Constants.SYSPARM_OFFSET),
ResponseMessage.getInvalidInteger(Constants.SYSPARM_OFFSET, queryParams[Constants.SYSPARM_OFFSET]));
}
if (offset < 0) {
throw this.getErrorObject(ResponseMessage.getInvalidValue(Constants.SYSPARM_OFFSET),
ResponseMessage.getInvalidWholeNumberRange(Constants.SYSPARM_OFFSET, queryParams[Constants.SYSPARM_OFFSET]));
}
return offset;
},
getBooleanParam: function(queryParams, key) {
var value = queryParams[key];
if (value && value != 'true' && value != 'false') {
throw this.getErrorObject(ResponseMessage.getInvalidValue(key),
ResponseMessage.getInvalidBooleanRange(key, queryParams[key]));
}
return value == 'true';
},
getProductSource: function(queryParams) {
var source = queryParams[Constants.SOURCE];
if (source != Constants.PLATFORM && source != Constants.STORE) {
throw this.getErrorObject(ResponseMessage.getInvalidValue(Constants.SOURCE),
ResponseMessage.getInvalidProductSource(Constants.SOURCE, queryParams[Constants.STORE]));
}
return source;
},
getErrorObject: function(message, detail, status) {
return {
errorDescription: message,
errorAction: detail,
errorCode: status || 400
};
},
getValues: function(map) {
var array = [];
for (var key in map) {
array.push(map[key]);
}
return array;
},
getUnionOfProducts: function(products, productsForFilters) {
var unique = {};
var concatArrays = [];
for (var i = 0; i < products.length; i++) {
if (!unique[products[i].productName]) {
unique[products[i].productName] = true;
concatArrays.push(products[i]);
}
}
for (var j = 0; j < productsForFilters.length; j++) {
if (!unique[productsForFilters[j].productName]) {
unique[productsForFilters[j].productName] = true;
concatArrays.push(productsForFilters[j]);
}
}
return concatArrays;
},
getCommonProducts: function(products, productsForFilters) {
var commonProducts = [];
var hashMap = {};
for (var i = 0; i < products.length; i++)
hashMap[products[i].productName] = 1;
for (i = 0; i < productsForFilters.length; i++)
if (!hashMap[productsForFilters[i].productName])
commonProducts.push(productsForFilters[i]);
return commonProducts;
},
getInstalledVersion: function(sourceAppId) {
var gr = new GlideRecord(Constants.TABLE_SYS_STORE_APP);
gr.addQuery(Constants.SYS_ID, sourceAppId);
gr.query();
return gr.next() ? gr.getValue(Constants.VERSION) : '';
},
getInstalledCustomizationVersion: function(sourceAppId) {
var gr = new GlideRecord(Constants.TABLE_SYS_APP_CUSTOMIZATION);
gr.addQuery(Constants.VENDOR_APP, sourceAppId);
gr.query();
return gr.next() ? gr.getValue(Constants.VERSION) : '';
},
addProgressTracker: function(payload, trackerPayload, appId, type, mode) {
if(!(trackerPayload && trackerPayload.trackerId)) {
gs.info('tracker id not available to track the activity')
return;
}
var gr = new GlideRecord(Constants.TABLE_PROGRESS_TRACKER);
gr.setValue("tracker_id", trackerPayload.trackerId);
gr.setValue("app_id", appId);
var name;
if(mode == Constants.UNINSTALL)
name = payload.name;
else if(type == Constants.APPLICATION)
name = this.getAppNameBySourceAppId(appId);
else if(type == Constants.PLUGIN)
name = this.getPluginNameById(appId);
else
name = payload.name;
gr.setValue('name', name);
gr.setValue("message", "Pending");
gr.setValue("type", type);
gr.setValue("mode", mode);
gr.setValue("payload", this.stringify(payload));
gr.setValue("tracker_payload", this.stringify(trackerPayload));
gr.setValue("state", "0");
gr.insert();
},
getAppNameBySourceAppId: function(sourceAppId) {
var gr = new GlideRecord(Constants.TABLE_SYS_STORE_APP);
if (gr.get(sourceAppId))
return gr.getValue('name');
gr = new GlideRecord(Constants.TABLE_SYS_REMOTE_APP);
gr.addQuery('source_app_id', sourceAppId);
gr.query();
if (gr.next())
return gr.getValue("name");
return null;
},
getPluginNameById: function(pluginId) {
gr = new GlideRecord(Constants.TABLE_V_PLUGIN);
gr.addQuery('id', pluginId);
gr.query();
if (gr.next())
return gr.getValue('name');
return null;
},
getProductNameById: function(productId) {
gr = new GlideRecord(Constants.TABLE_PRODUCT);
gr.addQuery('id', productId);
gr.query();
if (gr.next())
return gr.getValue('name');
return null;
},
parse: function(input) {
if(Object.prototype.toString.call(input)== '[object String]') return JSON.parse(input);
return input;
},
stringify: function(input) {
if(Object.prototype.toString.call(input) !== '[object String]') return JSON.stringify(input);
return input;
},
type: 'CommonUtils'
};
Sys ID
59f98e3177ee1110c918256a5b5a9981