improvements to BEM - Build Element Method

This commit is contained in:
Michael Becker 2025-10-17 23:00:12 -04:00
parent c0b0c70785
commit ce7dd5f949
2 changed files with 57 additions and 17 deletions

View File

@ -1,8 +1,5 @@
using System.Text.Json.Nodes;
using System.Threading.Tasks.Dataflow;
using Mocha.Core.Oop;
using Mocha.Core.UI;
namespace Mocha.Core.MethodImplementations;
@ -23,16 +20,35 @@ public class BuildElementMethodImplementation : MethodImplementation
InstanceHandle bemProcess = oms.GetRelatedInstance(method, oms.GetInstance(KnownRelationshipGuids.Build_Element_Method__has__BEM_Process));
InstanceHandle loopInstanceSet = oms.GetRelatedInstance(bemProcess, oms.GetInstance(KnownRelationshipGuids.BEM_Process__uses_loop__Executable_returning_Instance_Set));
object? instanceSet = oms.Evaluate(context, loopInstanceSet, InstanceHandle.Empty);
if (instanceSet is IEnumerable<InstanceHandle> ihs)
JsonArray objECs = new JsonArray();
IEnumerable<InstanceHandle> elementContents = oms.GetRelatedInstances(element, oms.GetInstance(KnownRelationshipGuids.Element__has__Element_Content));
foreach (InstanceHandle elementContent in elementContents)
{
JsonObject obj = BuildGrid(oms, element, ihs);
context.SetWorkData(element, obj);
InstanceHandle elementContentInstance = oms.GetRelatedInstance(elementContent, oms.GetInstance(KnownRelationshipGuids.Element_Content__has__Instance));
IEnumerable<InstanceHandle> elementContentDisplayOptions = oms.GetRelatedInstances(elementContent, oms.GetInstance(KnownRelationshipGuids.Element_Content__has__Element_Content_Display_Option));
JsonObject objEC = BuildElementContent(oms, elementContentInstance, elementContent);
objECs.Add(objEC);
}
InstanceHandle loopInstanceSet = oms.GetRelatedInstance(bemProcess, oms.GetInstance(KnownRelationshipGuids.BEM_Process__uses_loop__Executable_returning_Instance_Set));
if (loopInstanceSet != InstanceHandle.Empty)
{
object? instanceSet = oms.Evaluate(context, loopInstanceSet, InstanceHandle.Empty);
if (instanceSet is IEnumerable<InstanceHandle> ihs)
{
JsonObject obj = BuildGrid(oms, element, ihs);
context.SetWorkData(element, obj);
}
}
else
{
JsonObject objR = new JsonObject();
objR.Add("children", objECs);
context.SetWorkData(element, objR);
return element;
}
return element;
}
}
private JsonObject BuildGrid(Oms oms, InstanceHandle element, IEnumerable<InstanceHandle> instances)
{
@ -66,7 +82,7 @@ public class BuildElementMethodImplementation : MethodImplementation
j = 1;
foreach (InstanceHandle ihCol in ihCols)
{
JsonObject objCell = BuildGridCell(oms, ih, ihCol);
JsonObject objCell = BuildElementContent(oms, ih, ihCol);
objCells.Add("46." + j.ToString(), objCell);
j++;
}
@ -78,9 +94,9 @@ public class BuildElementMethodImplementation : MethodImplementation
}
obj.Add("rows", aryRows);
return obj;
}
}
private JsonObject BuildGridColumn(Oms oms, InstanceHandle elementContent, int index)
private JsonObject BuildGridColumn(Oms oms, InstanceHandle elementContent, int index)
{
JsonObject objCol = new JsonObject();
objCol.Add("widget", "column");
@ -102,9 +118,9 @@ public class BuildElementMethodImplementation : MethodImplementation
objCol.Add("sortableAndFilterable", true);
// objCol.Add("propertyName", "");
return objCol;
}
}
private JsonObject BuildGridCell(Oms oms, InstanceHandle targetInstance, InstanceHandle elementContent)
private JsonObject BuildElementContent(Oms oms, InstanceHandle targetInstance, InstanceHandle elementContent)
{
JsonObject objCell = new JsonObject();
objCell.Add("ecid", oms.GetInstanceKey(elementContent).ToString());
@ -127,7 +143,14 @@ public class BuildElementMethodImplementation : MethodImplementation
if (oms.IsInstanceOf(ecInst, oms.GetInstance(KnownInstanceGuids.Classes.TextAttribute)))
{
objCell.Add("widget", "text");
objCell.Add("value", oms.GetAttributeValue<string>(targetInstance, ecInst));
if (targetInstance == InstanceHandle.Empty)
{
objCell.Add("value", oms.GetAttributeValue<string>(ecInst, oms.GetInstance(KnownAttributeGuids.Text.Value)));
}
else
{
objCell.Add("value", oms.GetAttributeValue<string>(targetInstance, ecInst));
}
}
else if (oms.IsInstanceOf(ecInst, oms.GetInstance(KnownInstanceGuids.Classes.BooleanAttribute)))
{
@ -161,5 +184,5 @@ public class BuildElementMethodImplementation : MethodImplementation
objCell.Add("widget", "monikerList");
}
return objCell;
}
}
}

View File

@ -54,10 +54,27 @@ public class InvokeWebServiceMethodImplementation : MethodImplementation
{
new KeyValuePair<InstanceHandle, object?>(oms.GetInstance(KnownAttributeGuids.Text.Value), 404)
}, null, out InstanceHandle ws);
return errorElement;
InstanceHandle hElement = FindElementFromExecutable(oms, errorElement);
context.SetWorkData(hElement, errorJson);
return hElement;
}
}
}
return InstanceHandle.Empty;
}
private InstanceHandle FindElementFromExecutable(Oms oms, InstanceHandle exec)
{
if (oms.IsInstanceOf(exec, oms.GetInstance(KnownInstanceGuids.Classes.ReturnElementMethodBinding)))
{
InstanceHandle executesMethod = oms.GetRelatedInstance(exec, oms.GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method));
return FindElementFromExecutable(oms, executesMethod);
}
else if (oms.IsInstanceOf(exec, oms.GetInstance(KnownInstanceGuids.MethodClasses.BuildElementMethod)))
{
return oms.GetRelatedInstance(exec, oms.GetInstance(KnownRelationshipGuids.Build_Element_Method__returns__Element));
}
return InstanceHandle.Empty;
}
}