Name
sn_cmdb_int_util.CmdbIntegrationSoftwareModelUtil
Description
Utility class to cleanse Software Model
Script
var CmdbIntegrationSoftwareModelUtil = Class.create();
CmdbIntegrationSoftwareModelUtil.prototype = {
initialize: function() {},
// Company name, software name, software version
cleanseSoftwareModel: function(company, software, version) {
company = new CmdbIntegrationCompanyModelUtil().cleanseCompany(company);
software = this.mungeSoftware(software, version);
if (gs.nil(version) && software.version)
version = software.version;
version = this.mungeVersion(version);
var mm = this.makeAndModel(company, null);
return {
company: {
name: gs.nil(mm.makeAndModelJava.getManufacturerName()) ? '' : mm.makeAndModelJava.getManufacturerName().trim(),
sys_id: gs.nil(mm.getManufacturerSysID()) ? '' : mm.getManufacturerSysID()
},
software: gs.nil(software.name) ? '' : software.name.trim(),
version: gs.nil(version) || gs.nil(software.name) ? '' : version.trim()
};
},
mungeSoftware: function(name, version) {
if (gs.nil(name))
return {
name: null
};
var PAT_VERSION_IN_NAME = /^(.*) v?(\d+(?:\.\d+)*)$/; //Software v1.02
var PAT_VERSION = /\w?\d+(?:\.\d+)*$/;
name = name.trim();
var matched = name.match(PAT_VERSION);
if (gs.nil(version) && matched) {
// extract version from name
name = name.replace(PAT_VERSION_IN_NAME, "$1");
version = matched[0];
} else {
if (!gs.nil(version))
name = this.deleteTrailing(name, version.trim()).trim();
name = this.deleteTrailing(name, ",").trim();
}
return {
name: this.removeLanguage(name),
version: version
};
},
mungeVersion: function(version) {
if (gs.nil(version))
return null;
var REGEX_LEADING_ZEROES = /^0+(\d+)/; //pattern 0232 -> 232
var PAT_SURPLUS_ZEROES = /^(.*?(?:\.0)?)(?:\.0)*$/; //pattern 123.0.0.0 -> 123.0
version = version.trim().replace(REGEX_LEADING_ZEROES, "$1");
if (gs.nil(version))
return null;
return version.replace(PAT_SURPLUS_ZEROES, "$1");
},
deleteTrailing: function(str, trailing) {
if (!str || !trailing)
return str;
if (str.length <= trailing.length)
return str;
//str does not end with trailing
if (str.indexOf(trailing, str.length - trailing.length) == -1)
return str;
return str.substring(0, str.length - trailing.length);
},
makeAndModel: function(company, software) {
// this has the side effect of creating the company and software if it does not exist
// this does not handle version
return global.MakeAndModelJS.fromNames(company, software, "software");
},
removeLanguage: function(name) {
var self = this;
["(remove only)", "(english)", "[english]"].forEach(function(value) {
name = self.deleteTrailing(name, value);
});
return name;
},
// Hardware Name, Software Name, Software Version
createSoftwareInstanceName: function(hardware, software, version) {
if (gs.nil(hardware) || gs.nil(software))
return null;
var swInstanceName = '';
if (!gs.nil(version))
swInstanceName = software + ' ' + version + '-' + hardware;
else
swInstanceName = software + '-' + hardware;
return swInstanceName;
},
type: 'CmdbIntegrationSoftwareModelUtil'
};
Sys ID
ed556f92c75200109cea1197fdc260d7