Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
 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));
 }
Example #4
0
 /// <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));
 }
Example #5
0
        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);
        }
Example #6
0
        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);
        }