public void DeleteVersion(Version removedVersion) { Debug.Assert(Versions.Contains(removedVersion)); versions.Remove(removedVersion); versionedProjects.Remove(removedVersion); Versions.InvokeCollectionChanged(); if (removedVersion.CreatedFrom != null) { Version previous = removedVersion.CreatedFrom; List <Version> branchedVersions = removedVersion.BranchedVersions.ToList(); foreach (Version branchedVersion in branchedVersions) { branchedVersion.CreatedFrom = previous; // there are some elements created in deleted removedVersion foreach (IVersionedElement createdInVersion in removedVersion.ElementsCreatedInVersion) { // I try to look up the element in all the derived removedVersion IVersionedElement derivedElement = this.LookupElementVersion(createdInVersion, branchedVersion); if (derivedElement != null) { // this derivedElement is now a first removedVersion SetAsFirstVersion(derivedElement, branchedVersion); } } } previous.BranchedVersions.Remove(removedVersion); } List <ComposedKey <IVersionedElement, Version> > toRemove = new List <ComposedKey <IVersionedElement, Version> >(); foreach (DictionaryEntry entry in versionTable) { ComposedKey <IVersionedElement, Version> key = (ComposedKey <IVersionedElement, Version>)entry.Key; IVersionedElement originalElement = key.First; Version derivedVersion = key.Second; IVersionedElement derivedElement = (IVersionedElement)entry.Value; if (derivedVersion == removedVersion) { toRemove.Add(key); } } foreach (var key in toRemove) { versionTable.Remove(key); } }
internal IVersionedElement LookupElementVersion(IVersionedElement firstVersion, Version version) { ComposedKey <IVersionedElement, Version> key = new ComposedKey <IVersionedElement, Version>(firstVersion, version); if (versionTable.ContainsKey(key)) { return((IVersionedElement)versionTable[key]); } else { return(null); } }
private void addElementVersion(IVersionedElement firstVersion, Version version, IVersionedElement newVersion) { if (firstVersion.Version == version) { throw new ArgumentException(); } if (firstVersion.GetType() != newVersion.GetType()) { throw new ArgumentException("Only constructs of the same type can be connected by version links. "); } ComposedKey <IVersionedElement, Version> key = new ComposedKey <IVersionedElement, Version>(firstVersion, version); versionTable[key] = newVersion; }
private void removeElementVersion(IVersionedElement versionedElement) { List <ComposedKey <IVersionedElement, Version> > keysToDelete = new List <ComposedKey <IVersionedElement, Version> >(); Dictionary <ComposedKey <IVersionedElement, Version>, IVersionedElement> keysToAdd = new Dictionary <ComposedKey <IVersionedElement, Version>, IVersionedElement>(); foreach (DictionaryEntry dictionaryEntry in versionTable) { ComposedKey <IVersionedElement, Version> key = (ComposedKey <IVersionedElement, Version>)dictionaryEntry.Key; IVersionedElement value = (IVersionedElement)dictionaryEntry.Value; // find all entries in version table dealing with versionedElement if (key.First.FirstVersion == versionedElement.FirstVersion) { if (value.IsFirstVersion) { keysToDelete.Add(key); } else { // not deleting first version keysToDelete.Add(key); Version ver = key.Second; IVersionedElement fv = value.GetInVersion(ver.CreatedFrom); if (fv != versionedElement.FirstVersion) { keysToAdd.Add(new ComposedKey <IVersionedElement, Version>(fv, ver), value); } } } } foreach (ComposedKey <IVersionedElement, Version> key in keysToDelete) { if (!versionTable.ContainsKey(key)) { } versionTable.Remove(key); } foreach (var de in keysToAdd) { versionTable.Add(de.Key, de.Value); } }
public bool Equals(ComposedKey <T1, T2> other) { return(base.Equals(other)); }