public DataNode Read(XmlReader reader)
        {
            DataItem item = new DataItem ();
            reader.MoveToContent ();
            string name = reader.LocalName;
            item.Name = name;

            while (reader.MoveToNextAttribute ()) {
                DataNode data = ReadAttribute (reader.LocalName, reader.Value);
                if (data != null) item.ItemData.Add (data);
            }

            reader.MoveToElement ();
            if (reader.IsEmptyElement) {
                reader.Skip ();
                return item;
            }

            reader.ReadStartElement ();
            reader.MoveToContent ();

            string text = "";
            while (reader.NodeType != XmlNodeType.EndElement) {
                if (reader.NodeType == XmlNodeType.Element) {
                    DataNode data = ReadChild (reader, item);
                    if (data != null) item.ItemData.Add (data);
                } else if (reader.NodeType == XmlNodeType.Text) {
                    text += reader.Value;
                    reader.Skip ();
                } else {
                    reader.Skip ();
                }
            }

            reader.ReadEndElement ();

            if (!item.HasItemData && text != "")
                return new DataValue (name, text);

            return item;
        }
        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);
        }
 public void SetConfigurationItemData(SerializationContext serCtx, object obj, DataItem item)
 {
     ICustomDataItem citem = obj as ICustomDataItem;
     if (citem != null) {
         ClassTypeHandler handler = new ClassTypeHandler (serCtx, this);
         citem.Deserialize (handler, item.ItemData);
     }
     else
         Deserialize (serCtx, obj, item.ItemData);
 }
        public override DataNode Serialize(SerializationContext serCtx, object mapData, object obj)
        {
            if (obj.GetType () != ValueType) {
                DataType subtype = Context.GetConfigurationDataType (obj.GetType ());
                DataItem it = (DataItem) subtype.Serialize (serCtx, mapData, obj);
                it.ItemData.Add (new DataValue ("ctype", subtype.Name));
                it.Name = Name;
                return it;
            }

            DataItem item = new DataItem ();
            item.Name = Name;

            ICustomDataItem citem = obj as ICustomDataItem;
            if (citem != null) {
                ClassTypeHandler handler = new ClassTypeHandler (serCtx, this);
                item.ItemData = citem.Serialize (handler);
            }
            else
                item.ItemData = Serialize (serCtx, obj);
            return item;
        }
 public void Deserialize(object obj, DataItem data)
 {
     dataContext.SetConfigurationItemData (serializationContext, obj, data);
 }
 public void SetTypeInfo(DataItem item, Type type)
 {
     item.ItemData.Add (new DataValue ("ctype", GetConfigurationDataType (type).Name));
 }
 public void SetConfigurationItemData(SerializationContext serCtx, object obj, DataItem data)
 {
     ClassDataType dataType = (ClassDataType) GetConfigurationDataType (obj.GetType ());
     dataType.SetConfigurationItemData (serCtx, obj, data);
 }
        protected override void WriteChildren(XmlWriter writer, DataItem item)
        {
            base.WriteChildren (writer, item);

            writer.WriteStartElement ("Entries");
            foreach (CombineEntry entry in combine.Entries) {
                writer.WriteStartElement ("Entry");
                writer.WriteAttributeString ("filename", entry.RelativeFileName);
                writer.WriteEndElement ();
                Runtime.ProjectService.WriteFile (entry.FileName, entry, monitor);
            }
            writer.WriteEndElement ();
        }
        protected override DataNode ReadChild(XmlReader reader, DataItem parent)
        {
            if (reader.LocalName == "Entries") {
                if (reader.IsEmptyElement) { reader.Skip(); return null; }
                string basePath = Path.GetDirectoryName (combine.FileName);
                reader.ReadStartElement ();

                ArrayList files = new ArrayList ();
                while (MoveToNextElement (reader)) {
                    string nodefile = reader.GetAttribute ("filename");
                    nodefile = Runtime.FileUtilityService.RelativeToAbsolutePath (basePath, nodefile);
                    files.Add (nodefile);
                    reader.Skip ();
                }

                monitor.BeginTask (string.Format (GettextCatalog.GetString("Loading combine: {0}"), combine.FileName), files.Count);
                try {
                    foreach (string nodefile in files) {
                        combine.Entries.Add ((CombineEntry) Runtime.ProjectService.ReadFile (nodefile, monitor));
                        monitor.Step (1);
                    }
                } finally {
                    monitor.EndTask ();
                }

                reader.ReadEndElement ();
                return null;
            }

            return base.ReadChild (reader, parent);
        }
        protected override DataNode ReadChild(XmlReader reader, DataItem parent)
        {
            if (reader.LocalName == "Entries") {
                if (reader.IsEmptyElement) { reader.Skip(); return null; }
                string basePath = Path.GetDirectoryName (file);
                reader.ReadStartElement ();
                monitor.BeginTask (string.Format (GettextCatalog.GetString("Loading combine: {0}"), combine.FileName), 1);
                while (MoveToNextElement (reader)) {
                    string nodefile = reader.GetAttribute ("filename");
                    nodefile = Runtime.FileUtilityService.RelativeToAbsolutePath (basePath, nodefile);
                    combine.Entries.Add ((CombineEntry) Runtime.ProjectService.ReadFile (nodefile, monitor));
                    reader.Skip ();
                }
                monitor.EndTask ();
                reader.ReadEndElement ();
                return null;
            } else if (reader.LocalName == "Configurations") {
                DataItem item = base.ReadChild (reader, parent) as DataItem;
                foreach (DataNode data in item.ItemData) {
                    DataItem conf = data as DataItem;
                    if (conf == null) continue;
                    Runtime.ProjectService.DataContext.SetTypeInfo (conf, typeof(CombineConfiguration));
                }
                return item;
            }

            return base.ReadChild (reader, parent);
        }
 void Transform(DataItem conf)
 {
     for (int n=0; n<changes.Length; n+=3) {
         DataNode data = conf.ItemData.Extract (changes[n]);
         if (data != null) {
             data.Name = changes [n+2];
             conf.ItemData.Add (data, changes[n+1]);
         }
     }
 }
        protected override DataNode ReadChild(XmlReader reader, DataItem parent)
        {
            if (reader.LocalName == "Configurations")
            {
                ILanguageBinding binding = Runtime.Languages.GetBindingPerLanguageName (project.LanguageName);
                object confObj = binding.CreateCompilationParameters (null);
                Type confType = confObj.GetType ();
                DataContext prjContext = Runtime.ProjectService.DataContext;

                DataItem item = base.ReadChild (reader, parent) as DataItem;
                foreach (DataNode data in item.ItemData) {
                    DataItem conf = data as DataItem;
                    if (conf == null) continue;
                    prjContext.SetTypeInfo (conf, typeof(DotNetProjectConfiguration));
                    DataItem codeGeneration = conf ["CodeGeneration"] as DataItem;
                    if (codeGeneration != null)
                        prjContext.SetTypeInfo (codeGeneration, confType);
                    Transform (conf);
                }
                return item;
            }
            return base.ReadChild (reader, parent);
        }
 public override DataNode Serialize(SerializationContext serCtx, object mdata, object collection)
 {
     MapData mapData = (mdata != null) ? (MapData) mdata : GetDefaultData ();
     DataItem item = new DataItem ();
     item.Name = Name;
     item.UniqueNames = false;
     object pos = handler.GetInitialPosition (collection);
     while (handler.MoveNextItem (collection, ref pos)) {
         object val = handler.GetCurrentItem (collection, pos);
         if (val == null) continue;
         DataNode data = mapData.ItemType.Serialize (serCtx, mapData.ItemMapData, val);
         data.Name = mapData.ItemName;
         item.ItemData.Add (data);
     }
     return item;
 }
 protected virtual void WriteChildren(XmlWriter writer, DataItem item)
 {
     if (item.UniqueNames) {
         foreach (DataNode data in item.ItemData) {
             if (!(data is DataValue))
                 WriteChild (writer, data);
         }
     } else {
         foreach (DataNode data in item.ItemData)
             WriteChild (writer, data);
     }
 }
 protected virtual void WriteAttributes(XmlWriter writer, DataItem item)
 {
     if (item.UniqueNames) {
         foreach (DataNode data in item.ItemData) {
             DataValue val = data as DataValue;
             if (val != null)
                 WriteAttribute (writer, val.Name, val.Value);
         }
     }
 }
 protected virtual DataNode ReadChild(XmlReader reader, DataItem parent)
 {
     return DefaultReader.Read (reader);
 }