private void ClearAll() { _dbKatDict.Clear(); NewKats.Clear(); DelKats.Clear(); _raumDict.Clear(); UpdRaume.Clear(); DelRaume.Clear(); NewRaume.Clear(); WohnungRecords.Clear(); InvalidCategories.Clear(); ChangedRaumRecords.Clear(); NrOfChangedRaumRecords = 0; }
public void Update(List <IBlockInfo> blockInfos, List <IWohnungInfo> wohnungInfos, IProjektInfo projektInfo, IPariDatabase database) { ClearAll(); var projektId = GetProjektId(projektInfo, database); GetWohnungRecords(wohnungInfos, projektId); // Kategorien aus Datenbank GetKategoriesFromDatabase(database, projektId); // AutoCAD-Blockinfo var blockInfoDict = new Dictionary <string, IBlockInfo>(); foreach (var blockInfo in blockInfos) { blockInfoDict[blockInfo.Handle] = blockInfo; } // Räume aus Datenkbank var dbRaume = database.GetRaeume(projektId); // Ermitteln der zu löschenden Räume foreach (var raumRecord in dbRaume) { _raumDict[raumRecord.AcadHandle] = raumRecord; if (!blockInfoDict.ContainsKey(raumRecord.AcadHandle)) { DelRaume.Add(raumRecord); } } // updRaume und newRaume foreach (var blockInfo in blockInfos) { IRaumRecord raumRecord; if (_raumDict.TryGetValue(blockInfo.Handle, out raumRecord)) { UpdRaume.Add(raumRecord); var rr2 = raumRecord.ShallowCopy(); raumRecord.UpdateValuesFrom(blockInfo); if (!raumRecord.IsEqualTo(rr2)) { ChangedRaumRecords.Add(raumRecord); NrOfChangedRaumRecords++; } } else { raumRecord = _factory.CreateRaumRecord(); raumRecord.ProjektId = projektId; NewRaume.Add(raumRecord); raumRecord.UpdateValuesFrom(blockInfo); } IKategorieRecord kat; if (!_dbKatDict.TryGetValue(raumRecord.KatIdentification, out kat)) { kat = _factory.CreateKategorie(raumRecord); kat.ProjektId = projektId; NewKats.Add(kat); raumRecord.Kategorie = kat; _dbKatDict.Add(raumRecord.KatIdentification, kat); } else { if (!CompareNutzwert(raumRecord.Nutzwert, kat.Nutzwert)) { // create kat because of rnw-handling var tmpkat = _factory.CreateKategorie(raumRecord); kat.RNW = tmpkat.RNW; kat.Nutzwert = tmpkat.Nutzwert; UpdKats.Add(kat); } DelKats.Remove(kat); } raumRecord.Kategorie = kat; } CheckNutzwertPerKatOk(); }