implementation of Assign Attribute methods - worked the very first time around!
This commit is contained in:
parent
d43bb7dac5
commit
e69a5abafb
@ -186,6 +186,11 @@ namespace Mocha.Core
|
||||
public static Guid GetAttributeBySystemRoutineMethod { get; } = new Guid("{9d45eb8c-1fb5-4260-a69c-f99a8f7a70b8}");
|
||||
// GES - Get Element by System Routine Method - 67
|
||||
// US - Update by System Routine Method - 68
|
||||
/// <summary>
|
||||
/// AA - Asssign Attribute Method - 73
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static Guid AssignAttributeMethod { get; } = new Guid("{3312A789-3B7A-4478-B329-4FF781504F9C}");
|
||||
// CS - Compare Instance Sets Method - 91
|
||||
public static Guid CalculateDateMethod { get; } = new Guid("{1e58e284-56eb-42b4-88b9-e0a691559fa6}"); // 92
|
||||
// EC - Evaluate Conditions Method - 94
|
||||
|
||||
@ -134,6 +134,11 @@ namespace Mocha.Core
|
||||
public static Guid Evaluate_Boolean_Expression_Method__has_source_attribute__Method { get; } = new Guid("{45d76d56-01ed-4641-9f68-cfe0c7d0d265}");
|
||||
public static Guid Evaluate_Boolean_Expression_Method__equal_to_attribute__Method { get; } = new Guid("{0646df91-7e3e-4d59-be71-b978a22ced8e}");
|
||||
|
||||
public static Guid Assign_Attribute_Method__uses__Executable_returning_Attribute { get; } = new Guid("{9313f96e-58af-416f-852e-ef83725057fc}");
|
||||
public static Guid Executable_returning_Attribute__used_by__Assign_Attribute_Method { get; } = new Guid("{cd8fd04c-dcdd-4dc8-9d5c-e8f83d080cb8}");
|
||||
public static Guid Assign_Attribute_Method__assigns__Attribute { get; } = new Guid("{74061875-8a27-403b-9456-02e52cfd13b2}");
|
||||
public static Guid Attribute__assigned_by__Assign_Attribute_Method { get; } = new Guid("{d3b540e8-0f52-4595-bf52-1968637da59a}");
|
||||
|
||||
public static Guid Prompt_Value__has__Prompt { get; } = new Guid("{7CD62362-DDCE-4BFC-87B9-B5499B0BC141}");
|
||||
|
||||
public static Guid User__has_display_name__Translatable_Text_Constant { get; } = new Guid("{6C29856C-3B10-4F5B-A291-DD3CA4C04A2F}");
|
||||
|
||||
@ -0,0 +1,26 @@
|
||||
namespace Mocha.Core.MethodImplementations;
|
||||
|
||||
public class AssignAttributeMethodImplementation : MethodImplementation
|
||||
{
|
||||
public override Guid MethodClassGuid => KnownInstanceGuids.MethodClasses.AssignAttributeMethod;
|
||||
protected override InstanceHandle ExecuteInternal(Oms oms, OmsContext context, InstanceHandle method)
|
||||
{
|
||||
InstanceHandle irForClass = oms.GetRelatedInstance(method, oms.GetInstance(KnownRelationshipGuids.Method__for__Class));
|
||||
InstanceHandle irForInstance = (InstanceHandle) context.GetWorkData(irForClass);
|
||||
|
||||
InstanceHandle assignsAttribute = oms.GetRelatedInstance(method, oms.GetInstance(KnownRelationshipGuids.Assign_Attribute_Method__assigns__Attribute));
|
||||
|
||||
if (assignsAttribute == InstanceHandle.Empty)
|
||||
{
|
||||
throw new InvalidOperationException("no assigns Attribute specified for method");
|
||||
}
|
||||
|
||||
InstanceHandle assignsFrom = oms.GetRelatedInstance(method, oms.GetInstance(KnownRelationshipGuids.Assign_Attribute_Method__uses__Executable_returning_Attribute));
|
||||
InstanceHandle assignsFromValue = oms.Execute(context, assignsFrom);
|
||||
|
||||
// InstanceHandle forInstance = (InstanceHandle) context.GetWorkData(irForClass);
|
||||
object? value = context.GetWorkData(assignsFromValue);
|
||||
oms.SetAttributeValue(irForInstance, assignsAttribute, value);
|
||||
return InstanceHandle.Empty;
|
||||
}
|
||||
}
|
||||
@ -586,9 +586,9 @@ public abstract class Oms
|
||||
implementation.Initialize(this);
|
||||
}
|
||||
|
||||
public InstanceHandle Execute(OmsContext context, Method method)
|
||||
public InstanceHandle Execute(OmsContext context, Method method, InstanceHandle? targetInstance = null)
|
||||
{
|
||||
return Execute(context, method.Handle);
|
||||
return Execute(context, method.Handle, targetInstance);
|
||||
}
|
||||
public InstanceHandle Execute(OmsContext context, ReturnInstanceSetMethodBinding methodBinding)
|
||||
{
|
||||
@ -608,7 +608,7 @@ public abstract class Oms
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
private InstanceHandle Execute(OmsContext context, InstanceHandle methodOrMethodBinding)
|
||||
public InstanceHandle Execute(OmsContext context, InstanceHandle methodOrMethodBinding, InstanceHandle? targetInstance = null)
|
||||
{
|
||||
InstanceHandle parentClass = GetParentClass(methodOrMethodBinding);
|
||||
if (IsInstanceOf(methodOrMethodBinding, GetInstance(KnownInstanceGuids.Classes.ReturnAttributeMethodBinding))
|
||||
@ -620,6 +620,12 @@ public abstract class Oms
|
||||
{
|
||||
if (methodImplementations.ContainsKey(parentClass))
|
||||
{
|
||||
if (targetInstance != null)
|
||||
{
|
||||
InstanceHandle hh = targetInstance.GetValueOrDefault();
|
||||
InstanceHandle pclassInstance = GetParentClass(hh);
|
||||
context.SetWorkData(pclassInstance, hh);
|
||||
}
|
||||
return methodImplementations[parentClass].Execute(this, context, methodOrMethodBinding);
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,7 +14,7 @@ public class MethodsModule : MiniOmsModule
|
||||
private InstanceHandle c_Method, c_MethodBinding;
|
||||
private InstanceHandle a_Name, a_Order, a_Verb, a_Static;
|
||||
private InstanceHandle c_ReturnAttributeMethodBinding, c_ReturnInstanceSetMethodBinding;
|
||||
private InstanceHandle c_BuildAttributeMethod, c_GetAttributeMethod, c_GetSpecifiedInstancesMethod, c_GetAttributeBySystemRoutineMethod;
|
||||
private InstanceHandle c_BuildAttributeMethod, c_GetAttributeMethod, c_GetSpecifiedInstancesMethod, c_GetAttributeBySystemRoutineMethod, c_AssignAttributeMethod;
|
||||
private InstanceHandle c_AccessModifier, i_AccessModifier_Private, i_AccessModifier_Protected, i_AccessModifier_Public, i_AccessModifier_RootA2;
|
||||
private InstanceHandle c_SystemRoutine, c_SystemAttributeRoutine, c_SystemInstanceSetRoutine;
|
||||
|
||||
@ -85,6 +85,11 @@ public class MethodsModule : MiniOmsModule
|
||||
oms.CreateRelationship(c_GetAttributeBySystemRoutineMethod, "uses", c_Instance, KnownRelationshipGuids.Get_Attribute_by_System_Routine_Method__uses__System_Attribute_Routine, false, "used by", KnownRelationshipGuids.System_Attribute_Routine__used_by__Get_Attribute_by_System_Routine_Method);
|
||||
oms.AddSuperClass(c_GetAttributeBySystemRoutineMethod, c_Method);
|
||||
|
||||
c_AssignAttributeMethod = oms.CreateClass("AA - Assign Attribute Method", KnownInstanceGuids.MethodClasses.AssignAttributeMethod);
|
||||
oms.CreateRelationship(c_AssignAttributeMethod, "uses", c_Attribute, KnownRelationshipGuids.Assign_Attribute_Method__uses__Executable_returning_Attribute, true, "used by", KnownRelationshipGuids.Executable_returning_Attribute__used_by__Assign_Attribute_Method);
|
||||
oms.CreateRelationship(c_AssignAttributeMethod, "assigns", c_Attribute, KnownRelationshipGuids.Assign_Attribute_Method__assigns__Attribute, false, "assigned by", KnownRelationshipGuids.Attribute__assigned_by__Assign_Attribute_Method);
|
||||
oms.AddSuperClass(c_AssignAttributeMethod, c_Method);
|
||||
|
||||
oms.AddAttribute(c_Method, a_Name);
|
||||
oms.AddAttribute(c_Method, a_Verb);
|
||||
oms.AddAttribute(c_Method, a_Static);
|
||||
|
||||
@ -86,4 +86,16 @@ public class OmsMethodBuilder
|
||||
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Get_Attribute_by_System_Routine_Method__uses__System_Attribute_Routine), usesSystemAttributeRoutine.Handle);
|
||||
return new GetAttributeBySystemRoutineMethod(method);
|
||||
}
|
||||
|
||||
public AssignAttributeMethod CreateAssignAttributeMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, ReturnAttributeMethodBinding assignsFromExecutableReturningAttribute, InstanceHandle assignsToAttribute)
|
||||
{
|
||||
return CreateAssignAttributeMethod(forClassInstance, verb, name, accessModifier, isStatic, assignsFromExecutableReturningAttribute.Handle, assignsToAttribute);
|
||||
}
|
||||
public AssignAttributeMethod CreateAssignAttributeMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, InstanceHandle assignsFromExecutableReturningAttribute, InstanceHandle assignsToAttribute)
|
||||
{
|
||||
InstanceHandle method = CreateMethodBase(Oms.GetInstance(KnownInstanceGuids.MethodClasses.AssignAttributeMethod), forClassInstance, verb, name, accessModifier, isStatic);
|
||||
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Assign_Attribute_Method__uses__Executable_returning_Attribute), assignsFromExecutableReturningAttribute);
|
||||
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Assign_Attribute_Method__assigns__Attribute), assignsToAttribute);
|
||||
return new AssignAttributeMethod(method);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,8 @@
|
||||
|
||||
namespace Mocha.Core.Oop;
|
||||
|
||||
public class AssignAttributeMethod : Method
|
||||
{
|
||||
public override Guid MethodClassGuid => KnownInstanceGuids.MethodClasses.AssignAttributeMethod;
|
||||
public AssignAttributeMethod(InstanceHandle handle) : base(handle) { }
|
||||
}
|
||||
@ -1,4 +1,3 @@
|
||||
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using Mocha.Core.OmsImplementations.Mini;
|
||||
using Mocha.Core.Oop;
|
||||
@ -22,7 +21,7 @@ public class MethodTests : OmsTestsBase
|
||||
|
||||
OmsMethodBuilder builder = new OmsMethodBuilder(Oms);
|
||||
|
||||
BuildAttributeMethod ih_BA = builder.CreateBuildAttributeMethod(irTestClass, "build", "Test Attribute", Oms.GetInstance(KnownInstanceGuids.AccessModifiers.Public), true, Oms.GetInstance(KnownAttributeGuids.Text.Name), test_value);
|
||||
BuildAttributeMethod ih_BA = builder.CreateBuildAttributeMethod(irTestClass, "build", "Test Attribute", AccessModifier.Public, true, Oms.GetInstance(KnownAttributeGuids.Text.Name), test_value);
|
||||
|
||||
OmsContext context = Oms.CreateContext();
|
||||
InstanceHandle ih_test = Oms.Execute(context, ih_BA);
|
||||
@ -152,4 +151,32 @@ public class MethodTests : OmsTestsBase
|
||||
Assert.That((string)value, Is.EqualTo(Oms.RuntimeVersion.ToString()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AssignAttributeMethodTest()
|
||||
{
|
||||
InstanceHandle irTestClass = Oms.GetInstance(TEST_CLASS_GUID);
|
||||
InstanceHandle irTestClassInstance = Oms.CreateInstanceOf(irTestClass);
|
||||
|
||||
InstanceHandle a_Name = Oms.GetInstance(KnownAttributeGuids.Text.Name);
|
||||
Oms.AddAttribute(irTestClass, a_Name);
|
||||
|
||||
string test_value = "Jackdaws love my big sphinx of quartz.";
|
||||
|
||||
string value = Oms.GetAttributeValue<string>(irTestClassInstance, a_Name);
|
||||
Assert.That(value, Is.Not.EqualTo(test_value));
|
||||
|
||||
OmsMethodBuilder builder = new OmsMethodBuilder(Oms);
|
||||
|
||||
BuildAttributeMethod ih_BA = builder.CreateBuildAttributeMethod(irTestClass, "build", "Test Attribute", AccessModifier.Public, true, a_Name, test_value);
|
||||
ReturnAttributeMethodBinding ramb1 = builder.CreateReturnAttributeMethodBinding(ih_BA);
|
||||
|
||||
AssignAttributeMethod ih_AA = builder.CreateAssignAttributeMethod(irTestClass, "set", "Test Attribute Value to `Jackdaws...`", AccessModifier.Public, true, ramb1, a_Name);
|
||||
|
||||
OmsContext context = Oms.CreateContext();
|
||||
Oms.Execute(context, ih_AA, irTestClassInstance);
|
||||
|
||||
value = Oms.GetAttributeValue<string>(irTestClassInstance, a_Name);
|
||||
Assert.That(value, Is.EqualTo(test_value));
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user