public void Save(Stream stream, IFileSource fileSource) { var file = new IniFile(IniOptions); var header = file.Sections.Add(HeadSectionName); header.Keys.Add("version", Version); foreach (var layer in Layers) { var handler = Handlers.Get(layer.Data); if (handler != null) { var section = file.Sections.Add(handler.SectionName); var context = new LayerHandlerContext(fileSource, layer.ExternalFiles); handler.Save(section.Keys, layer.Data, context); // save external file names foreach (var key in handler.ExternalFileKeys) { section.Keys.Add(key, layer.ExternalFiles[key]); } } } file.Save(stream); }
public void Load(Stream stream, IFileSource fileSource) { var file = new IniFile(IniOptions); file.Load(stream); var header = file.Sections[HeadSectionName]; if (header == null) { throw new ResourceException("Header section is missing"); } this.version = header.Keys.GetInt32("version", 1); this.layers.Clear(); foreach (var section in file.Sections) { var handler = Handlers.GetByName(section.Name); if (handler != null) { // get external file names to use them in the context var externalFiles = new Dictionary <string, string>(); foreach (var key in handler.ExternalFileKeys) { externalFiles[key] = section.Keys[key].Value; } var context = new LayerHandlerContext(fileSource, externalFiles); var layerData = handler.Load(section.Keys, context); var layer = new IniLayer(layerData, externalFiles); this.Layers.Add(layer); } } }
void ILayerHandler.Save(IniKeyCollection iniData, object data, LayerHandlerContext context) { Save(iniData, (T)data, context); }
object ILayerHandler.Load(IniKeyCollection iniData, LayerHandlerContext context) { return(Load(iniData, context)); }
protected abstract void Save(IniKeyCollection iniData, T data, LayerHandlerContext context);
protected abstract T Load(IniKeyCollection iniData, LayerHandlerContext context);