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

View File

@ -54,10 +54,27 @@ public class InvokeWebServiceMethodImplementation : MethodImplementation
{ {
new KeyValuePair<InstanceHandle, object?>(oms.GetInstance(KnownAttributeGuids.Text.Value), 404) new KeyValuePair<InstanceHandle, object?>(oms.GetInstance(KnownAttributeGuids.Text.Value), 404)
}, null, out InstanceHandle ws); }, null, out InstanceHandle ws);
return errorElement;
InstanceHandle hElement = FindElementFromExecutable(oms, errorElement);
context.SetWorkData(hElement, errorJson);
return hElement;
} }
} }
} }
return InstanceHandle.Empty; 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;
}
} }