IReadOnlyProperty IReadOnlyItem.Property(string name, string lang) { if (string.IsNullOrEmpty(name)) { throw new ArgumentNullException(name); } if (string.IsNullOrEmpty(lang)) { return(((IReadOnlyItem)this).Property(name)); } if (Exists) { var elem = _content as ILinkedElement; if (elem != null) { var prop = LinkedListOps.FindAll(elem, name) .OfType <IReadOnlyProperty>() .FirstOrDefault(p => p.Attribute("xml:lang").Value == lang); if (prop != null) { return(prop); } } var result = new Property(this, name, new Attribute("xml:lang", lang)); return(result); } return(Innovator.Client.Property.NullProp); }
IReadOnlyProperty IReadOnlyItem.Property(string name) { if (string.IsNullOrEmpty(name)) { throw new ArgumentNullException(name); } if (Exists || _parent != AmlElement.NullElem) { var elem = _content as ILinkedElement; if (elem != null) { var prop = LinkedListOps.Find(elem, name) as IReadOnlyProperty; // The first one should be in the user's language if multiple languages // exist if (prop != null && prop.Attribute("xml:lang").Exists) { prop = LinkedListOps.FindAll(elem, name) .OfType <IReadOnlyProperty>() .FirstOrDefault(p => p.Attribute("xml:lang").Value == AmlContext.LocalizationContext.LanguageCode); } if (prop != null) { return(prop); } } if (name == "generation" && (_attr & ElementAttributes.ItemDefaultGeneration) > 0) { return(Client.Property.DefaultGeneration); } if (name == "is_current" && (_attr & ElementAttributes.ItemDefaultIsCurrent) > 0) { return(Client.Property.DefaultIsCurrent); } if (name == "is_released" && (_attr & ElementAttributes.ItemDefaultIsReleased) > 0) { return(Client.Property.DefaultIsReleased); } if (name == "major_rev" && (_attr & ElementAttributes.ItemDefaultMajorRev) > 0) { return(Client.Property.DefaultMajorRev); } if (name == "new_version" && (_attr & ElementAttributes.ItemDefaultNewVersion) > 0) { return(Client.Property.DefaultNewVersion); } if (name == "not_lockable" && (_attr & ElementAttributes.ItemDefaultNotLockable) > 0) { return(Client.Property.DefaultNotLockable); } return(new Property(this, name)); } return(Innovator.Client.Property.NullProp); }
internal Element ElementByName(string name, string prefix = "") { if (_content is ILinkedElement elem) { var result = LinkedListOps.FindAll(elem, name) .Cast <Element>() .FirstOrDefault(e => e.Prefix == prefix); if (result != null) { return(result); } } return(Elements().OfType <Element>().FirstOrDefault(e => e.Name == name && e.Prefix == prefix) ?? new AmlElement(this, name)); }
/// <summary>Returns the set of relationships associated with this item</summary> public IRelationships Relationships() { if (Exists) { var elem = _content as ILinkedElement; if (elem != null) { var rel = LinkedListOps.FindAll(elem, "Relationships") .OfType <Relationships>() .OrderByDescending(r => r.Elements().OfType <IReadOnlyItem>().Count()) .FirstOrDefault(); if (rel != null) { return(rel); } } } return(new Relationships(this)); }
IReadOnlyProperty IReadOnlyItem.Property(string name, string lang) { if (string.IsNullOrEmpty(name)) { throw new ArgumentNullException(name); } if (string.IsNullOrEmpty(lang)) { return(((IReadOnlyItem)this).Property(name)); } if (Exists) { if (_content is ILinkedElement elem) { /* Current IOM functionality (This is the desired functionality): * Return the i18n element for the requested language * Do not fall back the non-i18n element * Note: An attempt was made to fall back to the non-i18n element * However this breaks when setting a corporate language (en) value when on a non-corporate connection (de). * This would result in the en value being saved as a de value */ var propsOfSameName = LinkedListOps.FindAll(elem, name) .OfType <IReadOnlyProperty>(); var prop = propsOfSameName .FirstOrDefault(p => p.Prefix == "i18n" && string.Equals(p.Attribute("xml:lang").Value, lang, StringComparison.OrdinalIgnoreCase)); if (prop != null) { return(prop); } } // Force the i18n namespace return(new Property(this, "i18n:" + name, new Attribute("xml:lang", lang))); } return(Innovator.Client.Property.NullProp); }
IReadOnlyProperty IReadOnlyItem.Property(string name) { if (string.IsNullOrEmpty(name)) { throw new ArgumentNullException(name); } if (Exists || _parent != AmlElement.NullElem) { if (_content is ILinkedElement elem) { /* Current IOM functionality: * Return the non-i18n element regardless of any xml:lang attribute * Desired functionality: * Return the non-i18n element regardless of any xml:lang attribute * If not found: * Return the i18n element that matches your current language */ var propsOfSameName = LinkedListOps.FindAll(elem, name) .OfType <IReadOnlyProperty>(); var prop = propsOfSameName.FirstOrDefault(p => string.IsNullOrEmpty(p.Prefix)); if (prop == null) { prop = propsOfSameName .FirstOrDefault(p => p.Prefix == "i18n" && string.Equals(p.Attribute("xml:lang").Value, AmlContext.LocalizationContext.LanguageCode, StringComparison.OrdinalIgnoreCase)); } if (prop != null) { return(prop); } } if (name == "generation" && (_attr & ElementAttributes.ItemDefaultGeneration) > 0) { return(Client.Property.DefaultGeneration); } if (name == "is_current" && (_attr & ElementAttributes.ItemDefaultIsCurrent) > 0) { return(Client.Property.DefaultIsCurrent); } if (name == "is_released" && (_attr & ElementAttributes.ItemDefaultIsReleased) > 0) { return(Client.Property.DefaultIsReleased); } if (name == "major_rev" && (_attr & ElementAttributes.ItemDefaultMajorRev) > 0) { return(Client.Property.DefaultMajorRev); } if (name == "new_version" && (_attr & ElementAttributes.ItemDefaultNewVersion) > 0) { return(Client.Property.DefaultNewVersion); } if (name == "not_lockable" && (_attr & ElementAttributes.ItemDefaultNotLockable) > 0) { return(Client.Property.DefaultNotLockable); } return(new Property(this, name)); } return(Innovator.Client.Property.NullProp); }