Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        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;
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
 public bool Equals(ComposedKey <T1, T2> other)
 {
     return(base.Equals(other));
 }