Skip to content

Commit

Permalink
Refactor of element commands.
Browse files Browse the repository at this point in the history
  • Loading branch information
vchelaru committed Dec 6, 2023
1 parent a31235d commit 7d0c62a
Showing 1 changed file with 28 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1594,13 +1594,13 @@ private void UpdateCustomVariablesFromBaseType(IElement elementToUpdate)
}


private bool UpdateNamedObjectsFromBaseType(INamedObjectContainer namedObjectContainer, bool showPopupAboutObjectErrors)
private bool UpdateNamedObjectsFromBaseType(INamedObjectContainer derivedNamedObjectContainer, bool showPopupAboutObjectErrors)
{
bool haveChangesOccurred = false;

List<NamedObjectSave> referencedObjectsBeforeUpdate = namedObjectContainer.AllNamedObjects.Where(item => item.DefinedByBase).ToList();
List<NamedObjectSave> referencedObjectsBeforeUpdate = derivedNamedObjectContainer.AllNamedObjects.Where(item => item.DefinedByBase).ToList();

List<NamedObjectSave> namedObjectsSetByDerived = new List<NamedObjectSave>();
List<NamedObjectSave> namedObjectsInBaseSetByDerived = new List<NamedObjectSave>();
List<NamedObjectSave> namedObjectsExposedInDerived = new List<NamedObjectSave>();

List<INamedObjectContainer> baseElements = new List<INamedObjectContainer>();
Expand All @@ -1619,11 +1619,11 @@ private bool UpdateNamedObjectsFromBaseType(INamedObjectContainer namedObjectCon
// in the inheritance chain shouldn't have to define it, but before
// today it did. This caused a lot of problems including generated
// code creating the element twice.
if (namedObjectContainer is EntitySave)
if (derivedNamedObjectContainer is EntitySave)
{
if (!string.IsNullOrEmpty(namedObjectContainer.BaseObject))
if (!string.IsNullOrEmpty(derivedNamedObjectContainer.BaseObject))
{
baseElements.Add(ObjectFinder.Self.GetElement(namedObjectContainer.BaseObject));
baseElements.Add(ObjectFinder.Self.GetElement(derivedNamedObjectContainer.BaseObject));
}
//List<EntitySave> allBase = ((EntitySave)namedObjectContainer).GetAllBaseEntities();
//foreach (EntitySave baseEntitySave in allBase)
Expand All @@ -1633,9 +1633,9 @@ private bool UpdateNamedObjectsFromBaseType(INamedObjectContainer namedObjectCon
}
else
{
if (!string.IsNullOrEmpty(namedObjectContainer.BaseObject))
if (!string.IsNullOrEmpty(derivedNamedObjectContainer.BaseObject))
{
baseElements.Add(ObjectFinder.Self.GetElement(namedObjectContainer.BaseObject));
baseElements.Add(ObjectFinder.Self.GetElement(derivedNamedObjectContainer.BaseObject));
}
//List<ScreenSave> allBase = ((ScreenSave)namedObjectContainer).GetAllBaseScreens();
//foreach (ScreenSave baseScreenSave in allBase)
Expand All @@ -1650,12 +1650,11 @@ private bool UpdateNamedObjectsFromBaseType(INamedObjectContainer namedObjectCon

if (baseNamedObjectContainer != null)
{
namedObjectsSetByDerived.AddRange(baseNamedObjectContainer.GetNamedObjectsToBeSetByDerived());
namedObjectsInBaseSetByDerived.AddRange(baseNamedObjectContainer.GetNamedObjectsToBeSetByDerived());
namedObjectsExposedInDerived.AddRange(baseNamedObjectContainer.GetNamedObjectsToBeExposedInDerived());
}
}

#region See if there are any objects to be removed from the derived.

var derivedNosesToAskAbout = new List<NamedObjectSave>();

Expand All @@ -1664,7 +1663,7 @@ private bool UpdateNamedObjectsFromBaseType(INamedObjectContainer namedObjectCon
{
var atI = referencedObjectsBeforeUpdate[i];

var contains = atI.DefinedByBase && namedObjectsSetByDerived.Any(item => item.InstanceName == atI.InstanceName);
var contains = atI.DefinedByBase && namedObjectsInBaseSetByDerived.Any(item => item.InstanceName == atI.InstanceName);

if (!contains)
{
Expand All @@ -1681,6 +1680,7 @@ private bool UpdateNamedObjectsFromBaseType(INamedObjectContainer namedObjectCon
}


#region See if there are any objects to be removed from the derived.
if (derivedNosesToAskAbout.Count > 0 && showPopupAboutObjectErrors)
{
// This can happen whenever, like if a project is reloaded and data is changed on disk. However, this
Expand Down Expand Up @@ -1713,13 +1713,13 @@ private bool UpdateNamedObjectsFromBaseType(INamedObjectContainer namedObjectCon
{
foreach (var nos in derivedNosesToAskAbout)
{
if (namedObjectContainer.NamedObjects.Contains(nos))
if (derivedNamedObjectContainer.NamedObjects.Contains(nos))
{
namedObjectContainer.NamedObjects.Remove(nos);
derivedNamedObjectContainer.NamedObjects.Remove(nos);
}
else
{
namedObjectContainer.NamedObjects
derivedNamedObjectContainer.NamedObjects
.FirstOrDefault(item => item.ContainedObjects.Contains(nos))
?.ContainedObjects.Remove(nos);
}
Expand All @@ -1740,14 +1740,14 @@ private bool UpdateNamedObjectsFromBaseType(INamedObjectContainer namedObjectCon
#endregion

#region Next, see if there are any objects to be added
for (int i = 0; i < namedObjectsSetByDerived.Count; i++)
for (int i = 0; i < namedObjectsInBaseSetByDerived.Count; i++)
{
NamedObjectSave namedObjectSetByDerived = namedObjectsSetByDerived[i];
NamedObjectSave namedObjectInBase = namedObjectsInBaseSetByDerived[i];

NamedObjectSave matchingDefinedByBase = null;// contains = false;
for (int j = 0; j < referencedObjectsBeforeUpdate.Count; j++)
{
if (referencedObjectsBeforeUpdate[j].InstanceName == namedObjectSetByDerived.InstanceName &&
if (referencedObjectsBeforeUpdate[j].InstanceName == namedObjectInBase.InstanceName &&
referencedObjectsBeforeUpdate[j].DefinedByBase)
{
matchingDefinedByBase = referencedObjectsBeforeUpdate[j];
Expand All @@ -1757,11 +1757,11 @@ private bool UpdateNamedObjectsFromBaseType(INamedObjectContainer namedObjectCon

if (matchingDefinedByBase == null)
{
AddSetByDerivedNos(namedObjectContainer, namedObjectSetByDerived, false);
AddSetByDerivedNos(derivedNamedObjectContainer, namedObjectInBase, false);
}
else
{
MatchDerivedToBase(namedObjectSetByDerived, matchingDefinedByBase);
MatchDerivedToBase(namedObjectInBase, matchingDefinedByBase);
}
}

Expand All @@ -1775,7 +1775,7 @@ private bool UpdateNamedObjectsFromBaseType(INamedObjectContainer namedObjectCon

if (nosInDerived == null)
{
nosInDerived = AddSetByDerivedNos(namedObjectContainer, nosInBase, true);
nosInDerived = AddSetByDerivedNos(derivedNamedObjectContainer, nosInBase, true);
}
else
{
Expand All @@ -1790,7 +1790,7 @@ private bool UpdateNamedObjectsFromBaseType(INamedObjectContainer namedObjectCon
.FirstOrDefault(item => item.InstanceName == containedInBaseNos.InstanceName && item.DefinedByBase);
if (containedInDerived == null)
{
AddSetByDerivedNos(namedObjectContainer, containedInBaseNos, true, nosInDerived);
AddSetByDerivedNos(derivedNamedObjectContainer, containedInBaseNos, true, nosInDerived);
}
else
{
Expand All @@ -1811,10 +1811,10 @@ private static void MatchDerivedToBase(NamedObjectSave inBase, NamedObjectSave i
}

private static NamedObjectSave AddSetByDerivedNos(INamedObjectContainer namedObjectContainer,
NamedObjectSave namedObjectSetByDerived, bool instantiatedByBase, NamedObjectSave containerToAddTo = null)
NamedObjectSave namedObjectInBase, bool instantiatedByBase, NamedObjectSave containerToAddTo = null)
{
NamedObjectSave existingNamedObject = namedObjectContainer.AllNamedObjects
.FirstOrDefault(item => item.InstanceName == namedObjectSetByDerived.InstanceName);
.FirstOrDefault(item => item.InstanceName == namedObjectInBase.InstanceName);

if (existingNamedObject != null)
{
Expand All @@ -1824,12 +1824,12 @@ private static NamedObjectSave AddSetByDerivedNos(INamedObjectContainer namedObj
}
else
{
NamedObjectSave newNamedObject = namedObjectSetByDerived.Clone();
NamedObjectSave newNamedObject = namedObjectInBase.Clone();

// This code may be cloning a list with contained objects, and the
// contained objects may not SetByDerived
newNamedObject.ContainedObjects.Clear();
foreach (var containedCandidate in namedObjectSetByDerived.ContainedObjects)
foreach (var containedCandidate in namedObjectInBase.ContainedObjects)
{
if (containedCandidate.SetByDerived)
{
Expand All @@ -1845,7 +1845,9 @@ private static NamedObjectSave AddSetByDerivedNos(INamedObjectContainer namedObj

if (containerToAddTo == null)
{
namedObjectContainer.NamedObjects.Add(newNamedObject);
var indexToAddAt = namedObjectContainer.NamedObjects.Count;

namedObjectContainer.NamedObjects.Insert(indexToAddAt, newNamedObject);
}
else
{
Expand Down

0 comments on commit 7d0c62a

Please sign in to comment.