Name

sn_smd.SMElement

Description

No description available

Script

var SMElement = Class.create();

SMElement.prototype = {
  /** @type IElementDefinition */
  element: null,

  /**
  *@params {IElementDefinition} element object
  *@params {?IElementDefinition} parent element if exists
  */
  initialize: function(element) {
  	this.element = element;
  },
  
  getId: function() {
  	return this.getDAO().getStableId();
  },
  
  getCiType: function() {
  	return this.getDAO().getCiType();
  },
  
  //returns IServiceDefinition object
  getContainer: function() {
  	return this.getDAO().getDefinitionLevel();
  },
  
  getParent: function() {
  	var elem = this.getDAO().getContainerElement();
  	
  	if(this.isEndpoint()) {
  		var rlns = this.getDAO().relations();
  		for (var i = 0; i < rlns.length; i++) {
  			var relType = rlns[i].getRelType();
  			if (relType == "Contains") {
  				return new SMElement(rlns[i].getSource());
  			} else if (relType == "Implement End Point To") {
  				return new SMElement(rlns[i].getTarget());
  			}	
  		}
  		return null;
  	}
  	
  	if (gs.nil(elem))
  		return null;
  	
  	return new SMElement(elem);
  },
  
  getDAO: function() {
  	if(gs.nil(this.element)) {
  		throw 'Cannot work with null model element';
  	}
  	return this.element;
  },
  
  getName: function() {
  	return this.getDAO().getName();
  },
  
  setName: function(name) {
  	this.getDAO().setName(name);
  },
  
  getRole: function() {
  	return this.getDAO().getRoleName();
  },
  
  setRole: function(role) {
  	this.getDAO().setRoleName(role);
  },
  
  getOrCreateProperty: function(name) {
  	var propertyBag = this.getPropertyBag();
  	var prop = propertyBag.getOrCreate(name);
  	return new SMElementProperty(prop);
  },
  
  getProperties: function() {
  	var props = [];
  	var propertyBag = this.getPropertyBag();
  	var names = propertyBag.keys();
  	for(var i = 0; i < names.length; i++) {
  		props.push(new SMElementProperty(propertyBag.get(names[i])));
  	}
  	return props;
  },

  getConstraints: function() {
  	return this.getDAO().constraintBindings();
  },

  getProperty: function(name) {
  	var propertyBag = this.getPropertyBag();
  	var prop = propertyBag.get(name);
  	return new SMElementProperty(prop);
  },
  
  /**
  * Initialize the properties for this element
  * @param {object} properties - {name,value,default_value}
  */
  initializeProperties: function(properties) {
  	if (gs.nil(properties))
  		return;
  	
  	var propertyBag = this.getPropertyBag();
  	properties.forEach(createProperty, this);
  	
  	function createProperty(p) {
  		var prop = this._setPropertyValueAndGetEntry(propertyBag, p);
  		prop.setFinal(false);
  	}
  },
  
  setProperties : function(properties) {
  	if (gs.nil(properties))
  		return;
  	
  	var propertyBag = this.getPropertyBag();
  	properties.forEach(setProperty, this);
  	
  	function setProperty(p) {
  		this._setPropertyValueAndGetEntry(propertyBag, p);
  	}
  },
  
  removeProperties: function(properties) {
  	if (gs.nil(properties))
  		return;
  	
  	var propertyBag = this.getPropertyBag();
  	properties.forEach(removeProperty, this);
  	
  	function removeProperty(p) {
  		var prop = propertyBag.get(p.name);
  		if (prop)
  			prop.remove();
  	}
  },
  
  _setPropertyValueAndGetEntry: function(propertyBag, property) {
  	var prop = propertyBag.getOrCreate(property.name);
  	var value = property.value || property.default_value || '';
  	prop.setValue(value);
  	return new SMElementProperty(prop);
  },
  
  remove: function() {
  	this._removeAllInnerElements();
  	this.getDAO().remove();
  },
  
  _removeAllInnerElements : function() {
  	try {
  		var childElements = this.getInnerElements();
  		for (var idx = 0; idx < childElements.length; idx++) {
  			childElements[idx].remove();
  		}
  	} catch(err) {
  		var displayMessage = gs.getMessage('Failed to delete inner elements');
  		var internalMessage = 'Error in SMElement._removeAllInnerElements';
  		throw SMErrorHelper.createScriptAPIError(displayMessage, internalMessage, err);
  	}
  	this._removeEndpoints();
  },
  
  _removeEndpoints : function() {
  	var endpoints = this.getEndpoints();
  	for (var i =0; i < endpoints.length; i++) {
  		endpoints[i].remove();
  	}
  },
  
  isBoundToAnyCluster: function() {
  	return this.getDAO().isBoundToAnyCluster();
  },
  
  getCluster: function() {
  	return this.getDAO().getCluster();
  },
  
  setCluster: function(clusterDefinition) {
  	this.getDAO().setCluster(clusterDefinition);
  },

  setClusterDefinitionOnChildren: function(clusterDefinition) {
  	var childElements = this.getInnerElements();
  	for (var i = 0; i < childElements.length; i++) {
  		// Set cluster definition on elements as well as endpoints
  		var childElem = childElements[i];
  		childElem.setCluster(clusterDefinition);			
  		childElem.setClusterDefinitionOnImplementedEndpoints(clusterDefinition);
  	}
  },
  
  setClusterDefinitionOnImplementedEndpoints: function(clusterDefinition) {
  	var endpoints = this.getDAO().getImplementedEndpoints();
  	for (var j = 0; j < endpoints.length; j++) {
  		var epElem = new SMElement(endpoints[j]);
  		epElem.setCluster(clusterDefinition);
  	}
  },
  
  getClusterCardinalityFromConstraints: function() {
  	var constraintBindings = this.getDAO().constraintBindings();			
  	var cardinality = 0;
  	for (var i = 0; i < constraintBindings.length; i++) {
  		var constraintFlavor = constraintBindings[i].getFlavor();
  		if(constraintFlavor == SMConstants.RESOURCE_GROUP)
  			cardinality += constraintBindings[i].extractResourcesInGroup().length;
  		else
  			cardinality += 1; //single resource
  	}

  	return cardinality;
  },
  
  isEndpoint: function() {
  	return this.getDAO().isEndpoint();
  },
  
  getEndpoints: function() {
  	return this._getSMElementList(this.getDAO().getImplementedEndpoints());
  },
  
  getUsedEndpoints: function() {
  	return this._getSMElementList(this.getDAO().getUsedEndpoints());
  },
  
  getInnerElements: function() {
  	var innerElems = [];
  	var source = null;
  	var relations = this.getDAO().relations();
  		for (var idx = 0; idx < relations.length; idx++) {
  			source = new SMElement(relations[idx].getSource());
  			if (source.getId() == this.getId() && relations[idx].getRelType() == "Contains") {
  				innerElems.push(relations[idx].getTarget());
  			}
  		}
  	return this._getSMElementList(innerElems);
  },
  
  _getSMElementList: function(iElemDefList) {
  	var smElems = [];
  	for(var i = 0; i < iElemDefList.length; i++) {
  		smElems.push(new SMElement(iElemDefList[i], this.versionObject, this.getDAO()));
  	}
  	return smElems;
  },
  
  getPropertyBag: function() {
  	return this.getDAO().getPropertyBag();
  },
  
  getParameterBag: function() {
  	return this.getDAO().getParameterBag();
  },
  
  setDeploymentExtension: function(extensionContainer) {
  	this.getDAO().setDeploymentExtension(extensionContainer);
  },
  
  isBoundAsQualifierToAnything: function() {
  	return this.getDAO().isBoundAsQualifierToAnything();
  },
  
  isTopLevelElement: function() {
  	var containsRlns = this.getDAO().filteredRelations("Contains", true, false);
  	if (containsRlns.length > 0) {
  		return false;
  	}
  	
  	if (this.getCiType() === sn_sra.SRAConstants.ENTRY_POINT_QUALIFIER)
  		return false;
  	
  	if (this.isEndpoint())
  		return false;
  	
  	return true;
  },	
  
  type: 'SMElement'
};

Sys ID

5eb7597cc3522200e2ddb59af3d3aec4

Offical Documentation

Official Docs: