public virtual void Save(Data data) { actions.Add(data); }
private static void WriteData(Data data, XmlWriter writer) { bool isObject = data is ObjectData; string tag = isObject ? "naked-object" : "collection"; writer.WriteStartElement(tag); writer.WriteAttributeString("Type", data.ClassName); writer.WriteAttributeString("id", EncodedOid(data.Oid)); writer.WriteAttributeString("user", NakedObjectsContext.Session.UserName); string sequenceString = data.Version.AsSequence(); if (!string.IsNullOrEmpty(sequenceString)) { long sequence = Convert.ToInt64(sequenceString, 16); writer.WriteAttributeString("ver", "" + Convert.ToString(sequence, 16).ToUpper()); } if (isObject) { var objectData = (ObjectData) data; for (IEnumerator<string> fields = objectData.Fields(); fields.MoveNext();) { string field = fields.Current; object entry = objectData.GetField(field); if (entry is IOid) { var oid = entry as IOid; Assert.AssertFalse(oid.IsTransient); writer.WriteStartElement("association"); writer.WriteAttributeString("field", field); writer.WriteAttributeString("ref", EncodedOid(oid)); writer.WriteAttributeString("Type", oid.Specification.FullName); writer.WriteEndElement(); } else if (entry is IList<IOid>) { var references = (IList<IOid>) entry; if (references.Count > 0) { writer.WriteStartElement("multiple-association"); writer.WriteAttributeString("field", field); foreach (SerialOid oid in references) { Assert.AssertFalse("transient oid", oid, oid.IsTransient); writer.WriteStartElement("element"); writer.WriteAttributeString("ref", EncodedOid(oid)); writer.WriteAttributeString("Type", oid.Specification.FullName); writer.WriteEndElement(); } writer.WriteEndElement(); } } else if (entry is ObjectData) { writer.WriteStartElement("inline"); writer.WriteAttributeString("field", field); WriteData(entry as ObjectData, writer); writer.WriteEndElement(); } else { writer.WriteStartElement("value"); writer.WriteAttributeString("field", field); writer.WriteString(entry.ToString()); writer.WriteEndElement(); } } } else { var collection = (CollectionData) data; IList<IOid> refs = collection.References(); foreach (IOid oid in refs) { writer.WriteStartElement("element"); writer.WriteAttributeString("ref", EncodedOid(oid)); writer.WriteAttributeString("Type", oid.Specification.FullName); writer.WriteEndElement(); } } writer.WriteEndElement(); }
/// <summary> /// Write out the data for a new instance /// </summary> protected internal virtual void AddData(IOid oid, string type, Data data) { WriteData(oid, data); }
private static void WriteData(IOid xoid, Data data) { using (XmlWriter writer = XmlWriter.Create(XmlFile.GetFile(Filename(xoid)).FullName, XmlFile.Settings)) { WriteData(data, writer); } }
/// <summary> /// Save the data for latter retrieval /// </summary> public void Save(Data data) { WriteData(data.Oid, data); }