public virtual void LoadServices()
        {
            services = new List <ServiceElement>();
            FileInfo file = XmlFile.GetFile(SERVICES_FILE_NAME);

            if (file.Exists)
            {
                XDocument doc = XDocument.Load(file.FullName);

                foreach (XElement element in doc.Element("services").Elements("service"))
                {
                    string sOid = (from attrib in element.Attributes()
                                   where attrib.Name == "oid"
                                   select attrib.Value).Single();

                    long oid = Convert.ToInt64(sOid, 16);

                    string id = (from attrib in element.Attributes()
                                 where attrib.Name == "id"
                                 select attrib.Value).Single();

                    string type = (from attrib in element.Attributes()
                                   where attrib.Name == "type"
                                   select attrib.Value).SingleOrDefault();

                    type = type ?? id;

                    var service = new ServiceElement(SerialOid.CreatePersistent(oid, type), id);
                    services.Add(service);
                }
            }
        }
        private static IQueryable <IOid> LoadInstances(string type)
        {
            FileInfo typeFile = XmlFile.GetFile(type);

            if (typeFile.Exists)
            {
                return((from instance in XDocument.Load(typeFile.FullName).Element("instances").Elements("instance")
                        let sOid = (string)instance.Attribute("id")
                                   select SerialOid.CreatePersistent(Convert.ToInt64(sOid, 16), type)).Cast <IOid>().AsQueryable());
            }
            return(new List <IOid>().AsQueryable());
        }
 private static void WriteInstanceFile(string name, IEnumerable <IOid> instances)
 {
     using (XmlWriter writer = XmlWriter.Create(XmlFile.GetFile(name).FullName, XmlFile.Settings)) {
         writer.WriteStartElement("instances");
         writer.WriteAttributeString("name", name);
         foreach (IOid instance in instances)
         {
             writer.WriteStartElement("instance");
             writer.WriteAttributeString("id", EncodedOid(instance));
             writer.WriteEndElement();
         }
         writer.WriteEndElement();
     }
 }
 public void SaveServices()
 {
     using (XmlWriter writer = XmlWriter.Create(XmlFile.GetFile(SERVICES_FILE_NAME).FullName, XmlFile.Settings)) {
         writer.WriteStartElement("services");
         foreach (ServiceElement element in services)
         {
             writer.WriteStartElement("service");
             writer.WriteAttributeString("oid", EncodedOid(element.Oid));
             writer.WriteAttributeString("id", element.Id);
             writer.WriteAttributeString("type", element.TypeName);
             writer.WriteEndElement();
         }
         writer.WriteEndElement();
     }
 }
        /// <summary>
        ///     Read in the next unique number for the object identifier
        /// </summary>
        public virtual long NextId()
        {
            string sId = null;

            if (XmlFile.GetFile("oid").Exists)
            {
                XDocument doc = XDocument.Load(XmlFile.GetFile("oid").FullName);
                sId = doc.Element("number").Value;
            }

            long longValue = string.IsNullOrEmpty(sId) ? 0 : Convert.ToInt64(sId, 16);

            long nextId = longValue + 1;

            using (XmlWriter writer = XmlWriter.Create(XmlFile.GetFile("oid").FullName, XmlFile.Settings)) {
                writer.WriteStartElement("number");
                writer.WriteValue(nextId.ToString("x"));
                writer.WriteEndElement();
            }

            return(nextId);
        }
        public virtual Data LoadData(IOid oid)
        {
            XDocument doc = XDocument.Load(XmlFile.GetFile(Filename(oid)).FullName);

            CollectionData collection = null;
            ObjectData     objectData = null;
            string         fieldName  = "";

            foreach (XElement element in doc.Descendants())
            {
                LoadNode(element, ref collection, ref objectData, ref fieldName);
            }

            if (objectData != null)
            {
                return(objectData);
            }
            if (collection != null)
            {
                return(collection);
            }
            throw new FindObjectException("No data found for " + oid + " (possible missing file)");
        }
 private static void WriteData(IOid xoid, Data data)
 {
     using (XmlWriter writer = XmlWriter.Create(XmlFile.GetFile(Filename(xoid)).FullName, XmlFile.Settings)) {
         WriteData(data, writer);
     }
 }