public static FileState ParseFile(string filePath, out ChangeSet changes) { if (!IsValidRhinoFile(filePath)) { changes = null; return(null); } //opening the store, and the file and comparing the contents using (var file = File3dm.Read(filePath)) { string tetherJson = file.Strings.GetValue(RvcRhinoFileTether.RvcTetherKey); string dirPath = Path.GetDirectoryName(filePath); RvcRhinoFileTether tether; RvcVersion version = null; if (tetherJson == null) { version = new RvcVersion(); tether = new RvcRhinoFileTether(version.Id); } else { tether = JsonConvert.DeserializeObject <RvcRhinoFileTether>(tetherJson); version = RvcVersion.ReadRootVersion(Path.Combine(dirPath, RvcRhinoFileTether.RvcArchiveDirectoryName, tether.RvcId.ToString())); } RvcArchive archive = new RvcArchive(tether, version, Path.GetDirectoryName(filePath)); using (var store = new DataStore(filePath, tether.RvcId)) { return(ParseFile(file, store, version, out changes)); } } }
private static FileState ParseFile(File3dm file, DataStore store, RvcVersion version, out ChangeSet changes) { FileState state = null; List <IFileDataTable> parsedTableList = new List <IFileDataTable>(); //opening the store, and the file and comparing the contents List <Type> memberTypes; List <string> tableNames; List <IEnumerable> tables3dm = GetAllTables(file, out memberTypes, out tableNames); ChangeSet fileChanges = new ChangeSet(); for (int i = 0; i < tables3dm.Count; i++) { ChangeSet tableChanges; IFileDataTable parsedTable = TableUtil.ParseTableData(tables3dm[i], tableNames[i], memberTypes[i], version, store, out tableChanges); parsedTableList.Add(parsedTable); fileChanges = ChangeSet.Merge(fileChanges, tableChanges); } //populating the file state state = new FileState(store, version.AddDownStreamVersion(fileChanges)); foreach (var table in parsedTableList) { state.Tables.Add(table); } changes = fileChanges; return(state); }
public static IFileDataTable ParseTableData(IEnumerable table3dm, string tableName, Type dataType, RvcVersion version, DataStore store, out ChangeSet changes) { IFileDataTable refTable = version.State.GetMatchingTable(dataType, tableName); if (refTable == null) { refTable = CreateTableInstance(dataType); version.State.Tables.Add(refTable); version.State.Store = store; } changes = EvaluateDiffWith3dmData(refTable, table3dm, ref store); return(refTable.ApplyChangeSet(changes)); }
public FileState(DataStore store, RvcVersion version) : this() { Store = store; Version = version; }