in BismNormalizer/AlmToolkit/ComparisonJSInteraction.cs [188:340]
private void PopulateComparisonData(ComparisonObject comparisonObject, int level, ComparisonNode parentNode)
{
if (comparisonObject != null)
{
string nodeType = "";
switch (comparisonObject.ComparisonObjectType)
{
case ComparisonObjectType.DataSource:
nodeType = "Data Source";
break;
case ComparisonObjectType.CalculationItem:
nodeType = "Calculation Item";
break;
case ComparisonObjectType.Table:
//Check if source table has any calc item children. If yes, it's a calc group.
bool isCalcGroup = false;
foreach (ComparisonObject childComparisonObject in comparisonObject.ChildComparisonObjects)
{
if (childComparisonObject.ComparisonObjectType == ComparisonObjectType.CalculationItem && childComparisonObject.Status != ComparisonObjectStatus.MissingInSource)
{
isCalcGroup = true;
break;
}
}
nodeType = isCalcGroup ? "Calculation Group" : "Table";
break;
default:
nodeType = comparisonObject.ComparisonObjectType.ToString();
break;
}
ComparisonNode currentNode = new ComparisonNode
{
NodeType = nodeType,
SourceName = comparisonObject.SourceObjectName,
TargetName = comparisonObject.TargetObjectName,
SourceInternalName = comparisonObject.SourceObjectInternalName,
TargetInternalName = comparisonObject.TargetObjectInternalName,
SourceObjectDefinition = comparisonObject.SourceObjectDefinition,
TargetObjectDefinition = comparisonObject.TargetObjectDefinition,
ShowNode = true,
Level = level,
MergeAction = comparisonObject.MergeAction.ToString(),
DisableMessage = "",
DropdownDisabled = false
};
if (parentNode != null)
{
currentNode.ParentId = parentNode.Id;
parentNode.ChildNodes.Add(currentNode.Id);
}
switch (comparisonObject.Status)
{
case ComparisonObjectStatus.MissingInTarget:
currentNode.Status = "Missing in Target";
break;
case ComparisonObjectStatus.MissingInSource:
currentNode.Status = "Missing in Source";
break;
case ComparisonObjectStatus.SameDefinition:
currentNode.Status = "Same Definition";
break;
case ComparisonObjectStatus.DifferentDefinitions:
currentNode.Status = "Different Definitions";
break;
default:
break;
}
comparisonList.Add(currentNode);
// Populate helper objects
AngularComposite angularComposite = new AngularComposite(currentNode, comparisonObject);
_directAccessList.Add(currentNode.Id, angularComposite);
// set drop-down to have limited members based on what is available
switch (comparisonObject.MergeAction)
{
case MergeAction.Create:
currentNode.AvailableActions = new List<string> { "Create", "Skip" };
if (parentNode != null && string.Equals(parentNode.Status, "Missing in Target") && string.Equals(parentNode.MergeAction, "Skip"))
{
comparisonObject.MergeAction = MergeAction.Skip;
currentNode.MergeAction = MergeAction.Skip.ToString();
currentNode.DropdownDisabled = true;
SetNodeTooltip(angularComposite, true);
}
break;
case MergeAction.Update:
currentNode.AvailableActions = new List<string> { "Update", "Skip" };
break;
case MergeAction.Delete:
currentNode.AvailableActions = new List<string> { "Delete", "Skip" };
//check if parent is also set to delete, in which case make this cell readonly
if (parentNode != null && string.Equals(parentNode.MergeAction, "Delete"))
{
currentNode.DropdownDisabled = true;
SetNodeTooltip(angularComposite, true);
}
break;
case MergeAction.Skip:
switch (comparisonObject.Status)
{
case ComparisonObjectStatus.MissingInTarget:
currentNode.AvailableActions = new List<string> { "Create", "Skip" };
//check if parent is also MissingInTarget and Skip, make this cell readonly
if (parentNode != null && string.Equals(parentNode.Status, "Missing in Target") && string.Equals(parentNode.MergeAction, "Skip"))
{
currentNode.DropdownDisabled = true;
SetNodeTooltip(angularComposite, true);
}
break;
case ComparisonObjectStatus.MissingInSource:
currentNode.AvailableActions = new List<string> { "Delete", "Skip" };
break;
case ComparisonObjectStatus.DifferentDefinitions:
currentNode.AvailableActions = new List<string> { "Update", "Skip" };
break;
default:
//default covers ComparisonObjectStatus.SameDefinition: which is most common case (above cases are for saved skip selections from file)
currentNode.AvailableActions = new List<string> { "Skip" };
currentNode.DropdownDisabled = true;
SetNodeTooltip(angularComposite, true);
break;
}
break;
default:
break;
};
// Add child objects if it exists
if (comparisonObject.ChildComparisonObjects != null && comparisonObject.ChildComparisonObjects.Count > 0)
{
foreach (ComparisonObject childComparisonObject in comparisonObject.ChildComparisonObjects)
{
PopulateComparisonData(childComparisonObject, level + 1, currentNode);
}
}
}
}