/// <summary> /// Returns a list of all properties within the classifier. /// Also properties from generalized classes need to be returned /// </summary> /// <param name="classifier"></param> /// <param name="legacy">true, if legacy access to the attributes shall be used. /// This means that the methods are accessed via string definitions and not via the properties</param> /// <returns></returns> public IEnumerable<string> GetPropertiesOfClassifier(IElement classifier) { if (classifier == null) throw new ArgumentNullException(nameof(classifier)); var metaLayer = Legacy ? null : _dataLayerLogic.GetMetaLayerFor(_dataLayerLogic.GetDataLayerOfObject(classifier)); var uml = Legacy ? null : _dataLayerLogic.Get<_UML>(metaLayer); var propertyOwnedAttribute = Legacy ? "ownedAttribute" : _UML._StructuredClassifiers._StructuredClassifier.ownedAttribute; var propertyGeneralization = Legacy ? "generalization" : _UML._Classification._Classifier.generalization; var propertyGeneral = Legacy ? "general" : _UML._Classification._Generalization.general; if (classifier.isSet(propertyOwnedAttribute)) { var result = classifier.get(propertyOwnedAttribute) as IEnumerable; foreach (var item in result) { yield return item.ToString(); } } // Check for generalizations if (classifier.isSet(propertyGeneralization)) { var generalizations = classifier.get(propertyGeneralization) as IEnumerable; foreach (var generalization in generalizations.Cast<IElement>()) { var general = generalization.get(propertyGeneral) as IElement; // Especially for the MOF extent, the generalizations are references in xml and are // filled out by the simple loader if (general != null) { foreach (var found in GetPropertiesOfClassifier(general)) { yield return found; } } } } }
public static object GetValue(IElement element, string property, object defaultValue = null) { return element.isSet(property) ? element.get(property) : defaultValue; }