diff --git a/mocha-dotnet/src/lib/Mocha.Core/MethodImplementations/BuildElementMethodImplementation.cs b/mocha-dotnet/src/lib/Mocha.Core/MethodImplementations/BuildElementMethodImplementation.cs index 97cc6c1..e82e7a7 100644 --- a/mocha-dotnet/src/lib/Mocha.Core/MethodImplementations/BuildElementMethodImplementation.cs +++ b/mocha-dotnet/src/lib/Mocha.Core/MethodImplementations/BuildElementMethodImplementation.cs @@ -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 ihs) + JsonArray objECs = new JsonArray(); + IEnumerable 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 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 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 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(targetInstance, ecInst)); + if (targetInstance == InstanceHandle.Empty) + { + objCell.Add("value", oms.GetAttributeValue(ecInst, oms.GetInstance(KnownAttributeGuids.Text.Value))); + } + else + { + objCell.Add("value", oms.GetAttributeValue(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; - } + } } \ No newline at end of file diff --git a/mocha-dotnet/src/lib/Mocha.Core/MethodImplementations/InvokeWebServiceMethodImplementation.cs b/mocha-dotnet/src/lib/Mocha.Core/MethodImplementations/InvokeWebServiceMethodImplementation.cs index 983f5a9..c89a627 100644 --- a/mocha-dotnet/src/lib/Mocha.Core/MethodImplementations/InvokeWebServiceMethodImplementation.cs +++ b/mocha-dotnet/src/lib/Mocha.Core/MethodImplementations/InvokeWebServiceMethodImplementation.cs @@ -54,10 +54,27 @@ public class InvokeWebServiceMethodImplementation : MethodImplementation { new KeyValuePair(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; + } } \ No newline at end of file