Esempio n. 1
0
        Item AddItem(IBxReferableElement val)
        {
            Item item = new Item(_items.Count, _nodeVS.CreateChildNode(BxSSL.nodeVItem + _items.Count.ToString()));

            item.Value = val;
            _items.Add(item);
            return(item);
        }
Esempio n. 2
0
        //public BxCompoundRefer(IBxCompound container, IBxElementCarrier carrier)
        //    : base(container, carrier)
        //{
        //}
        #endregion

        #region IBxElementReferSite 成员
        public virtual void ReferTo(IBxReferableElement val)
        {
            if (!(val is T))
            {
                throw new Exception("object referred must be type of " + typeof(T).Name);
            }
            if (object.ReferenceEquals(null, _value))
            {
                _value.BreakRefer(this);
            }
            _value = val as T;
            _value.AddRefer(this);
        }
Esempio n. 3
0
        public virtual void ReferTo(IBxReferableElement val)
        {
            if (!(val is T))
            {
                throw new Exception("object referred must be type of " + typeof(T).Name);
            }

            ReferToEx(val as T);
            //if (!object.ReferenceEquals(null, _value))
            //    _value.BreakRefer(this);
            //_value = val as T;
            //_value.AddRefer(this);

            //if (_value is IBxElementInit)
            //    (_value as IBxElementInit).InitCarrier(_carrier);
        }
Esempio n. 4
0
        public void Load(IBxStorageNode nodeSva)
        {
            _nodeSva = nodeSva;
            _nodeVS  = null;
            _items   = null;
            _tSaver  = null;

            IBxStorageNode nodeTS = _nodeSva.GetChildNode(BxSSL.nodeTS);

            if (nodeTS != null)
            {
                _tSaver = new BxSvaTypeSaver();
                _tSaver.Load(nodeTS);
            }

            _nodeVS = _nodeSva.GetChildNode(BxSSL.nodeVS);
            if (_nodeVS != null)
            {
                _items = new List <Item>();
                IEnumerable <IBxStorageNode> childs = _nodeVS.ChildNodes;
                int    index = 0;
                Item   temp  = null;
                string id    = null;
                Type   type  = null;
                IBxReferableElement tempVal = null;
                foreach (IBxStorageNode one in childs)
                {
                    temp = new Item(index, one);
                    index++;
                    _items.Add(temp);
                    if (one.HasElement(BxSSL.elementTypeID))
                    {
                        id         = one.GetElementValue(BxSSL.elementTypeID);
                        type       = _tSaver.Get(id);
                        tempVal    = type.GetConstructor(null).Invoke(null) as IBxReferableElement;
                        temp.Value = tempVal;
                    }
                }
            }
        }
Esempio n. 5
0
        public string SaveValue(IBxReferableElement val)
        {
            Item item = GetItem(val);

            if (item != null)
            {
                return(item.Index.ToString());
            }

            item = AddItem(val);
            IBxStorageNode node = item.Node;

            if (val is IBxPersistStorageNode)
            {
                (val as IBxPersistStorageNode).SaveStorageNode(node);
            }
            if (val.Owner == null)
            {
                string typeID = TSaver.Add(val.GetType());
                node.SetElement(BxSSL.elementTypeID, typeID);
            }
            return(item.Index.ToString());
        }
Esempio n. 6
0
        public void LoadValue(IBxReferableElement val, string id)
        {
            Item item = GetItem(id);

            if (item == null)
            {
                throw new Exception("find share value " + id.ToString() + " failed!");
            }
            if (item.Value != null)
            {
                throw new Exception("a shared value is loaded more than once!");
            }
            item.Value = val;
            (val as IBxPersistStorageNode).LoadStorageNode(item.Node);

            if (item.Refers != null)
            {
                foreach (IBxElementReferer one in item.Refers)
                {
                    one.ReferTo(val);
                }
                item.CLearRefers();
            }
        }
Esempio n. 7
0
 public Item(int index, IBxStorageNode node)
 {
     _index = index;
     _val   = null;
     _node  = node;
 }
Esempio n. 8
0
 Item GetItem(IBxReferableElement val)
 {
     return(_items.Find(x => x.Value == val));
 }