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

Offical Documentation

Official Docs: