/// <summary> /// Adding a new item to a chunk /// </summary> /// <param name="filepath">Path to a chunk file</param> /// <param name="db">Database</param> public static void AddItem( string filepath, DataBase db ) { if ( db != null ) { var elem= new InnerChunkElement(); var sw = new StreamWriter( File.Open( filepath, FileMode.Append ) ); using (var json_writer = new JsonTextWriter(sw)) { elem.ElementType = InnerChunkElement.ElemType.DB; elem.ElemDB = null; elem.ElemParentName = null; elem.ElemParentHash = null; elem.ElementName = (db).Name; elem.Contents = JsonConvert.SerializeObject(db, Formatting.Indented); sw.Write(JsonConvert.SerializeObject(elem, Formatting.Indented)); } } }
/// <summary> /// Adding a new item to a chunk file in multithread mode /// </summary> /// <param name="filepath">path to a file</param> /// <param name="ds">datastructure</param> public static void AddItem( string filepath, IStructure ds ) { if ( ds != null ) { var sw = new StreamWriter( File.Open( filepath, FileMode.Append ) ); using (var json_writer = new JsonTextWriter(sw)) { var elem= new InnerChunkElement(); if ( ds is Record ) { elem.ElementType = InnerChunkElement.ElemType.RECORD; elem.ElemParentName = ((Record)ds).OwnerDC.Name; elem.ElemParentHash = ((Record)ds).OwnerDC.GetIndex().DwarfHashCode; elem.Contents = JsonConvert.SerializeObject(ds, Formatting.Indented ); } else if ( ds is DataContainer ) { elem.ElementType = InnerChunkElement.ElemType.DATACONTAINER; elem.ElemDB = ((DataContainer)ds).GetOwnerDB().Name; elem.ElemParentName = null; elem.ElemParentHash = null; elem.ElementName = ((DataContainer)ds).Name; var ds_sec = (DataContainer)ds; elem.Contents = JsonConvert.SerializeObject(ds_sec, Formatting.Indented); } elem.ElementHash = ds.GetIndex().DwarfHashCode; sw.Write(JsonConvert.SerializeObject(elem, Formatting.Indented)); } } else { Errors.Messages.DisplayError( "DataStructure object is null!", "", "", DateTime.Now); } }
private static InnerChunkElement FindItem( JsonTextReader jr, string hash ) { var item = new InnerChunkElement(); while ( jr.Read()) { item = json_serializer.Deserialize<InnerChunkElement>( jr ); if ( item.ElementHash == hash ) { return item; } } return null; }
/// <summary> /// Saving an existant item to a chunk file in multithread mode /// </summary> /// <param name="filepath">path to a file</param> /// <param name="ds">datastructure</param> public static void SaveItemContents( string filepath, IStructure ds ) { var elem= new InnerChunkElement(); if ( ds != null ) { var sw_read = new StreamReader( File.Open( filepath, FileMode.Open ) ); InnerChunkElement icm = null; using ( var json_reader = new JsonTextReader(sw_read) ) { icm = FindItem( json_reader, ds.GetIndex().DwarfHashCode ); } if ( icm == null ) { Errors.Messages.DisplayError("Can't find such item!", "Saving an item", "", DateTime.Now); return; } var sw_write = new StreamWriter( File.Open( filepath, FileMode.Append ) ); using (var json_writer = new JsonTextWriter(sw_write)) { if ( ds is Record ) { icm.Contents = JsonConvert.SerializeObject(ds, Formatting.Indented ); } else if ( ds is DataContainer ) { icm.Contents = JsonConvert.SerializeObject(ds as DataContainer, Formatting.Indented); } elem.ElementHash = ds.GetIndex().DwarfHashCode; sw_write.Write(JsonConvert.SerializeObject(elem, Formatting.Indented)); } } else { Errors.Messages.DisplayError( "DataStructure object is null!", "", "", DateTime.Now); } }
/// <summary> /// Getting all records from a chunk /// </summary> /// <param name="filepath">path to file</param> /// <param name="dc_hash">DataContainer hash</param> public static List<Record> GetRecordsInFile( string filepath, string dc_hash ) { var ret = new List<Record>(); var tmp_path = CreateTemporaryFile( filepath ); FileStream fstream = File.Open( tmp_path, FileMode.Open ); using (var json_reader = new JsonTextReader(new StreamReader(fstream))) { json_reader.SupportMultipleContent = true; var item = new InnerChunkElement(); while ( json_reader.Read() ) { item = json_serializer.Deserialize<InnerChunkElement>( json_reader ); if ( item.ElementType == InnerChunkElement.ElemType.RECORD ) { if ( item.ElemParentHash == dc_hash ) { var ret_rec = JsonConvert.DeserializeObject<Record>( item.Contents ); ret.Add(ret_rec); } } } } DeleteTemporaryFile( tmp_path ); return ret; }
/// <summary> /// Getting a DataContainer from the chunk /// </summary> /// <param name="filepath">path to file</param> /// <param name="dc_name">DC name</param> public static DataContainer GetDCInFile( string filepath, string dc_name ) { var tmp_path = CreateTemporaryFile( filepath ); using (var json_reader = new JsonTextReader(new StreamReader(File.Open( tmp_path, FileMode.Open )))) { json_reader.SupportMultipleContent = true; var item = new InnerChunkElement(); while ( json_reader.Read() ) { item = json_serializer.Deserialize<InnerChunkElement>( json_reader ); if ( item.ElementType == InnerChunkElement.ElemType.DATACONTAINER ) { if ( item.ElementName == dc_name ) { var ret_dc = JsonConvert.DeserializeObject<DataContainer>( item.Contents ); ret_dc.Name = dc_name; ret_dc.BuildIndex(); return ret_dc; } } } } DeleteTemporaryFile( tmp_path ); return null; }
public static IStructure FindItem( JsonReader json_reader, IStructure ds ) { var item = new InnerChunkElement(); while ( json_reader.Read() ) { item = json_serializer.Deserialize<InnerChunkElement>( json_reader ); if ( item.ElementHash == ds.GetIndex().DwarfHashCode ) { return ds; } } return null; }