示例#1
0
        // 创建一个元素
        public Element NewElement(ElementOID oid, string content)
        {
            // 查重
            {
                foreach (Element element in this._elements)
                {
                    if (element.OID == oid)
                    {
                        throw new Exception($"名为 {Element.GetOidName(oid)}, OID 为 {element.OID} 的元素已经存在,无法重复创建");
                    }
                }
            }

            string verify_result = Element.VerifyElementText(oid, content);

            if (verify_result != null)
            {
                throw new Exception($"创建元素 oid={oid},content={content} 时数据不合法: {verify_result}");
            }

            {
                Element element = new Element(-1)
                {
                    OID  = oid,
                    Text = content,
                };

                _elements.Add(element);
                // 注:此处不对 elements 排序。最后需要的时候(比如组装的阶段)再排序
                return(element);
            }
        }
示例#2
0
        void SetElementValue(string fieldName, string value)
        {
            ElementOID oid     = Element.GetOidByName(fieldName);
            Element    element = FindElement(oid);

            if (element != null && element.Locked)
            {
                throw new Exception("元素处于锁定状态,不允许修改");
            }

            if (element != null && element.Text == value)
            {
                return;
            }

            // 检查 value 是否合法
            string error = Element.VerifyElementText(oid, value);

            if (string.IsNullOrEmpty(error) == false)
            {
                throw new Exception($"值 '{value}' 不合法: {error}");
            }

            SetElement(oid, value);
            SetChanged(true);
        }
示例#3
0
文件: ChipMemory.cs 项目: renyh/dp2
 // 修改一个元素的文本。如果不存在这个元素,会自动创建
 public Element SetElement(ElementOID oid, string content)
 {
     Element element = FindElement(oid);
     if (element == null)
         return NewElement(oid, content);
     element.Text = content;
     return element;
 }
示例#4
0
文件: ChipMemory.cs 项目: renyh/dp2
        // 查找一个元素
        public Element FindElement(ElementOID oid)
        {
            foreach (Element element in this._elements)
            {
                if (element.OID == oid)
                    return element;
            }

            return null;
        }
示例#5
0
 // 根据名字得到 OID 类型
 // TODO: 用不抛出异常的方式
 public static bool TryGetOidByName(string name, out ElementOID oid)
 {
     // oid = ElementOID.PII;
     // 把 name 变为 OID
     if (Enum.TryParse <ElementOID>(name, out oid) == false)
     {
         return(false);
     }
     return(true);
 }
示例#6
0
        string GetElementValue(string fieldName)
        {
            ElementOID oid     = Element.GetOidByName(fieldName);
            Element    element = FindElement(oid);

            if (element == null)
            {
                return("");
            }
            return(element.Text);
        }
示例#7
0
文件: ChipMemory.cs 项目: zszqwe/dp2
        // 查找一个元素
        public Element FindElement(ElementOID oid)
        {
            foreach (Element element in this._elements)
            {
                if (element.OID == oid)
                {
                    return(element);
                }
            }

            return(null);
        }
示例#8
0
 public static bool TryGetOidByName(string name, out ElementOID oid)
 {
     try
     {
         oid = GetOidByName(name);
         return(true);
     }
     catch
     {
         oid = ElementOID.UII;
         return(false);
     }
 }
示例#9
0
文件: ChipMemory.cs 项目: zszqwe/dp2
        // 创建一个元素
        public Element NewElement(ElementOID oid, string content)
        {
            // 查重
            {
                foreach (Element element in this._elements)
                {
                    if (element.OID == oid)
                    {
                        throw new Exception($"名为 {Element.GetOidName(oid)}, OID 为 {element.OID} 的元素已经存在,无法重复创建");
                    }
                }
            }

            string verify_result = Element.VerifyElementText(oid, content);

            if (verify_result != null)
            {
                throw new Exception($"创建元素 oid={oid},content={content} 时数据不合法: {verify_result}");
            }

            {
                Element element = new Element(-1)
                {
                    OID  = oid,
                    Text = content,
                };

                if (element.OID == ElementOID.ContentParameter)
                {
                    // ContentParameter 的位置要特殊处理
                    if (_elements.Count > 0 &&
                        _elements[0].OID == ElementOID.PII)
                    {
                        _elements.Insert(1, element);
                    }
                    else
                    {
                        _elements.Insert(0, element);
                    }
                }
                else
                {
                    // TODO: 尽量按照 OID 序号顺序插入
                    // 注:此处不对 elements 排序。最后需要的时候(比如组装的阶段)再排序
                    _elements.Add(element);
                }

                return(element);
            }
        }
示例#10
0
        static void SetField(ChipItem item,
                             LogicChip chip,
                             string fieldName)
        {
            ElementOID oid     = Element.GetOidByName(fieldName);
            Element    element = chip.FindElement(oid);

            if (element != null)
            {
                var info = item.GetType().GetProperty(fieldName);
                info.SetValue(item, element.Text);

                item.SetLocked(fieldName, element == null ? false : element.Locked);
            }
        }
示例#11
0
        void GetField(ChipItem item,
                      string fieldName)
        {
            ElementOID oid     = Element.GetOidByName(fieldName);
            Element    element = _chip.FindElement(oid);

            if (element != null && element.Locked)
            {
                return;
            }

            var info = item.GetType().GetProperty(fieldName);

            _chip.SetElement(oid, (string)info.GetValue(item));
        }
示例#12
0
文件: Compact.cs 项目: JobsLj/dp2
        public static CompactionScheme AutoSelectCompactMethod(
            ElementOID oid,
            string text)
        {
            if (oid == ElementOID.Title)
            {
                return(CompactionScheme.Utf8String);
            }
            if (oid == ElementOID.OMF)
            {
                return(CompactionScheme.Utf8String);
            }

            return(AutoSelectCompactMethod(text));
        }
示例#13
0
文件: ChipMemory.cs 项目: renyh/dp2
        // return:
        //      非null    表示找到,并删除
        //      null   表示没有找到指定的元素
        public Element RemoveElement(ElementOID oid)
        {
            foreach (Element element in this._elements)
            {
                if (element.OID == oid)
                {
                    if (element.Locked)
                        throw new Exception("该元素被锁定,无法删除");

                    _elements.Remove(element);
                    return element;
                }
            }

            return null;
        }
示例#14
0
 // 验证输入的元素文本是否合法
 // return:
 //      null    合法
 //      其他  返回不合法的文字解释
 public static string VerifyElementText(ElementOID oid, string text)
 {
     if (oid == ElementOID.PII)
     {
         return(VerifyPII(text));
     }
     if (oid == ElementOID.OwnerInstitution)
     {
         return(VerifyOwnerInstitution(text));
     }
     if (oid == ElementOID.SetInformation)
     {
         return(VerifySetInformation(text));
     }
     if (oid == ElementOID.TypeOfUsage)
     {
         return(VerifyTypeOfUsage(text));
     }
     if (oid == ElementOID.Gs1ProductIndentifier)
     {
         return(VerifyGs1ProductIndentifier(text));
     }
     if (oid == ElementOID.MediaFormat)
     {
         return(VerifyMediaFormat(text));
     }
     if (oid == ElementOID.SupplyChainStage)
     {
         return(VerifySupplyChainStage(text));
     }
     if (oid == ElementOID.IllBorrowingInstitution)
     {
         return(VerifyIBI(text));
     }
     return(null);
 }
示例#15
0
 public static string GetOidName(ElementOID oid)
 {
     return(Enum.GetName(typeof(ElementOID), oid));
 }