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));
|
IEnumerable<InstanceHandle> parameterAssignments = GetRelatedInstances(methodOrMethodBinding, GetInstance(KnownRelationshipGuids.Method_Binding__has__Parameter_Assignment));
|
||||||
foreach (InstanceHandle parm in parameterAssignments)
|
AssignParameters(context, 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
InstanceHandle relatedMethod = GetRelatedInstance(methodOrMethodBinding, GetInstance<Relationship>(KnownRelationshipGuids.Method_Binding__executes__Method));
|
InstanceHandle relatedMethod = GetRelatedInstance(methodOrMethodBinding, GetInstance<Relationship>(KnownRelationshipGuids.Method_Binding__executes__Method));
|
||||||
InstanceHandle relatedMethod_for_Class = GetRelatedInstance(relatedMethod, GetInstance<Relationship>(KnownRelationshipGuids.Method__for__Class));
|
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)
|
private InstanceHandle ExecuteMethodBinding(OmsContext context, InstanceHandle methodBinding, IInstanceReference? targetInstance = null)
|
||||||
{
|
{
|
||||||
InstanceHandle method = GetRelatedInstance(methodBinding, GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method));
|
InstanceHandle method = GetRelatedInstance(methodBinding, GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method));
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user