move parameter assignment logic into separate function
This commit is contained in:
parent
2bd8ad8b0e
commit
d555ac984f
@ -1305,32 +1305,7 @@ public abstract class Oms
|
||||
*/
|
||||
{
|
||||
IEnumerable<InstanceHandle> parameterAssignments = GetRelatedInstances(methodOrMethodBinding, GetInstance(KnownRelationshipGuids.Method_Binding__has__Parameter_Assignment));
|
||||
foreach (InstanceHandle parm in parameterAssignments)
|
||||
{
|
||||
InstanceHandle assignsToParm = GetRelatedInstance(parm, GetInstance(KnownRelationshipGuids.Parameter_Assignment__assigns_to__Work_Data));
|
||||
|
||||
IInstanceReference assignsFromWorkData = GetRelatedInstance(parm, GetInstance(KnownRelationshipGuids.Parameter_Assignment__assigns_from__Executable_returning_Work_Data));
|
||||
if (assignsFromWorkData == null)
|
||||
{
|
||||
Console.Error.WriteLine("oms: error: assigns from work data not set for parameter assignment '{0}'", parm.GlobalIdentifier);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (IsInstanceOf(assignsFromWorkData, GetInstance(KnownInstanceGuids.Classes.Class)))
|
||||
{
|
||||
assignsFromWorkData = context.GetWorkData<IInstanceReference>(assignsFromWorkData);
|
||||
}
|
||||
|
||||
if (IsInstanceOf(assignsFromWorkData, GetInstance(KnownInstanceGuids.Classes.WorkSet)))
|
||||
{
|
||||
bool evaluateWorkSet = GetAttributeValue<bool>(parm, GetInstance(KnownAttributeGuids.Boolean.EvaluateWorkSet));
|
||||
if (evaluateWorkSet)
|
||||
{
|
||||
assignsFromWorkData = context.GetWorkData<InstanceHandle>(assignsFromWorkData);
|
||||
}
|
||||
}
|
||||
context.SetWorkData(assignsToParm, assignsFromWorkData);
|
||||
}
|
||||
AssignParameters(context, parameterAssignments);
|
||||
|
||||
InstanceHandle relatedMethod = GetRelatedInstance(methodOrMethodBinding, GetInstance<Relationship>(KnownRelationshipGuids.Method_Binding__executes__Method));
|
||||
InstanceHandle relatedMethod_for_Class = GetRelatedInstance(relatedMethod, GetInstance<Relationship>(KnownRelationshipGuids.Method__for__Class));
|
||||
@ -1451,6 +1426,57 @@ public abstract class Oms
|
||||
}
|
||||
}
|
||||
|
||||
private void AssignParameters(OmsContext context, IEnumerable<InstanceHandle> parameterAssignments)
|
||||
{
|
||||
foreach (InstanceHandle parm in parameterAssignments)
|
||||
{
|
||||
InstanceHandle assignsToParm = GetRelatedInstance(parm, GetInstance(KnownRelationshipGuids.Parameter_Assignment__assigns_to__Work_Data));
|
||||
IInstanceReference assignsFromWorkData = GetRelatedInstance(parm, GetInstance(KnownRelationshipGuids.Parameter_Assignment__assigns_from__Executable_returning_Work_Data));
|
||||
|
||||
if (assignsFromWorkData == null)
|
||||
{
|
||||
Console.Error.WriteLine("oms: error: assigns from work data not set for parameter assignment '{0}'", parm.GlobalIdentifier);
|
||||
continue;
|
||||
}
|
||||
|
||||
// there are several possibilities:
|
||||
|
||||
// `assigns to Parm` is a Class which is an Attribute. `assigns from Work Data` is an Attribute.
|
||||
// in this case, we should set the work data to the value of the work data pointed to by `assigns from`
|
||||
// `Token` := `User Name` -> `Token` = "testinguser"
|
||||
//
|
||||
// `assigns to Parm` is a Class. `assigns from Work Data` is a Class which is NOT an Attribute.
|
||||
// just use the ref as-is
|
||||
// `System User` := `User` -> `System User` = `User`
|
||||
//
|
||||
// `Worker who can Resign` := `Current Signed In Worker` -> `Worker who can Resign` = `Steve`
|
||||
|
||||
|
||||
if (IsInstanceOf(assignsToParm, GetInstance(KnownInstanceGuids.Classes.Attribute)) && IsInstanceOf(assignsFromWorkData, GetInstance(KnownInstanceGuids.Classes.Attribute)))
|
||||
{
|
||||
// if `assigns to Parm` is a Class which inherits from Attribute, and `assigns from Work Data` is an Attribute, then assign the underlying work data
|
||||
context.SetWorkData(assignsToParm, context.GetWorkData(assignsFromWorkData));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (IsInstanceOf(assignsFromWorkData, GetInstance(KnownInstanceGuids.Classes.Class)))
|
||||
{
|
||||
assignsFromWorkData = context.GetWorkData<IInstanceReference>(assignsFromWorkData);
|
||||
}
|
||||
|
||||
if (IsInstanceOf(assignsFromWorkData, GetInstance(KnownInstanceGuids.Classes.WorkSet)))
|
||||
{
|
||||
bool evaluateWorkSet = GetAttributeValue<bool>(parm, GetInstance(KnownAttributeGuids.Boolean.EvaluateWorkSet));
|
||||
if (evaluateWorkSet)
|
||||
{
|
||||
assignsFromWorkData = context.GetWorkData<InstanceHandle>(assignsFromWorkData);
|
||||
}
|
||||
}
|
||||
context.SetWorkData(assignsToParm, assignsFromWorkData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private InstanceHandle ExecuteMethodBinding(OmsContext context, InstanceHandle methodBinding, IInstanceReference? targetInstance = null)
|
||||
{
|
||||
InstanceHandle method = GetRelatedInstance(methodBinding, GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user