Exemplo n.º 1
0
        int FindData(string name, out DataCollection colec, bool buildTree)
        {
            if (name.IndexOf('/') == -1)
            {
                for (int n = 0; n < Items.Count; n++)
                {
                    DataNode data = Items [n];
                    if (data.Name == name)
                    {
                        colec = this;
                        return(n);
                    }
                }
                colec = this;
                return(-1);
            }
            else
            {
                string[] names = name.Split('/');
                int      pos   = -1;
                colec = this;
                DataNode data = null;

                for (int p = 0; p < names.Length; p++)
                {
                    if (p > 0)
                    {
                        DataItem item = data as DataItem;
                        if (item != null)
                        {
                            colec = item.ItemData;
                        }
                        else if (buildTree)
                        {
                            item      = new DataItem();
                            item.Name = names [p - 1];
                            colec.Add(item);
                            colec = item.ItemData;
                        }
                        else
                        {
                            colec = null;
                            return(-1);
                        }
                    }

                    pos = -1;
                    for (int n = 0; n < colec.Count; n++)
                    {
                        data = colec [n];
                        if (data.Name == names [p])
                        {
                            pos = n; break;
                        }
                    }
                }
                return(pos);
            }
        }
Exemplo n.º 2
0
		DataCollection ICustomDataItem.Serialize (ITypeSerializer handler)
		{
			if (policies == null)
				return null;
			
			DataCollection dc = new DataCollection ();
			foreach (KeyValuePair<PolicyKey,object> p in policies)
				dc.Add (PolicyService.DiffSerialize (p.Key.PolicyType, p.Value, p.Key.Scope));
			return dc;
		}
Exemplo n.º 3
0
        DataCollection GetNestedCollection(DataCollection col, string[] nameList, int pos)
        {
            if (pos == nameList.Length - 1)
            {
                return(col);
            }

            DataItem item = col [nameList[pos]] as DataItem;

            if (item == null)
            {
                item      = new DataItem();
                item.Name = nameList[pos];
                col.Add(item);
            }
            return(GetNestedCollection(item.ItemData, nameList, pos + 1));
        }
Exemplo n.º 4
0
        DataCollection GetNestedCollection(DataCollection col, string[] nameList, int pos, bool isDefault)
        {
            if (pos == nameList.Length - 1)
            {
                return(col);
            }

            DataItem item = col [nameList[pos]] as DataItem;

            if (item == null)
            {
                item      = new DataItem();
                item.Name = nameList[pos];
                col.Add(item);
                item.IsDefaultValue = isDefault;
            }
            if (item.IsDefaultValue && !isDefault)
            {
                item.IsDefaultValue = false;
            }
            return(GetNestedCollection(item.ItemData, nameList, pos + 1, isDefault));
        }
Exemplo n.º 5
0
		void WriteItems (ITypeSerializer handler, SolutionEntityItem item, DataCollection data)
		{
			DataItem items = new DataItem ();
			items.Name = "Items";
			foreach (object it in item.Items) {
				if (it is ProjectFile || it is ProjectReference)
					continue; // Already handled by serializer
				DataNode node = handler.SerializationContext.Serializer.Serialize (it, it.GetType ());
				items.ItemData.Add (node);
			}
			if (items.HasItemData)
				data.Add (items);
		}
Exemplo n.º 6
0
        internal DataCollection Serialize(SerializationContext serCtx, object obj)
        {
            DataCollection itemCol = new DataCollection();

            foreach (ItemProperty prop in Properties)
            {
                if (prop.ReadOnly || !prop.CanSerialize(serCtx, obj))
                {
                    continue;
                }
                object val = prop.GetValue(obj);
                if (val == null)
                {
                    continue;
                }
                if (!serCtx.IsDefaultValueSerializationForced(prop) && val.Equals(prop.DefaultValue))
                {
                    continue;
                }

                DataCollection col = itemCol;
                if (prop.IsNested)
                {
                    col = GetNestedCollection(col, prop.NameList, 0);
                }

                if (prop.ExpandedCollection)
                {
                    ICollectionHandler handler = prop.ExpandedCollectionHandler;
                    object             pos     = handler.GetInitialPosition(val);
                    while (handler.MoveNextItem(val, ref pos))
                    {
                        object item = handler.GetCurrentItem(val, pos);
                        if (item == null)
                        {
                            continue;
                        }
                        DataNode data = prop.Serialize(serCtx, obj, item);
                        data.Name = prop.SingleName;
                        col.Add(data);
                    }
                }
                else
                {
                    DataNode data = prop.Serialize(serCtx, obj, val);
                    if (data == null)
                    {
                        continue;
                    }
                    col.Add(data);
                }
            }

            if (obj is IExtendedDataItem)
            {
                // Serialize raw data which could not be deserialized
                DataItem uknData = (DataItem)((IExtendedDataItem)obj).ExtendedProperties ["__raw_data"];
                if (uknData != null)
                {
                    itemCol.Merge(uknData.ItemData);
                }
            }

            return(itemCol);
        }
		DataCollection GetNestedCollection (DataCollection col, string[] nameList, int pos)
		{
			if (pos == nameList.Length - 1) return col;

			DataItem item = col [nameList[pos]] as DataItem;
			if (item == null) {
				item = new DataItem ();
				item.Name = nameList[pos];
				col.Add (item);
			}
			return GetNestedCollection (item.ItemData, nameList, pos + 1);
		}
Exemplo n.º 8
0
		DataCollection GetNestedCollection (DataCollection col, string[] nameList, int pos, bool isDefault)
		{
			if (pos == nameList.Length - 1) return col;

			DataItem item = col [nameList[pos]] as DataItem;
			if (item == null) {
				item = new DataItem ();
				item.Name = nameList[pos];
				col.Add (item);
				item.IsDefaultValue = isDefault;
			}
			if (item.IsDefaultValue && !isDefault)
				item.IsDefaultValue = false;
			return GetNestedCollection (item.ItemData, nameList, pos + 1, isDefault);
		}
Exemplo n.º 9
0
		int FindData (string name, out DataCollection colec, bool buildTree)
		{
			if (list == null) {
				colec = null;
				return -1;
			}
			
			if (name.IndexOf ('/') == -1) {
				for (int n=0; n<list.Count; n++) {
					DataNode data = list [n];
					if (data.Name == name) {
						colec = this;
						return n;
					}
				}
				colec = this;
				return -1;
			} else {
				string[] names = name.Split ('/');
				int pos = -1;
				colec = this;
				DataNode data = null;

				for (int p=0; p<names.Length; p++)
				{
					if (p > 0) {
						DataItem item = data as DataItem;
						if (item != null) {
							colec = item.ItemData;
						} else if (buildTree) {
							item = new DataItem ();
							item.Name = names [p - 1];
							colec.Add (item);
							colec = item.ItemData;
						} else {
							colec = null;
							return -1;
						}
					}
					
					pos = -1;
					for (int n=0; n<colec.List.Count; n++) {
						data = colec.List [n];
						if (data.Name == names [p]) {
							pos = n; break;
						}
					}
				}
				return pos;
			}
		}