implement more strongly-typed bindings for Mocha instances

This commit is contained in:
Michael Becker 2025-01-04 20:59:09 -05:00
parent 02cb89bd5b
commit 4c656d8d8b
39 changed files with 337 additions and 333 deletions

View File

@ -24,7 +24,6 @@ using MBS.Web.UI.WebControls;
using Mocha.Core;
using Mocha.Core.OmsImplementations;
using Mocha.Core.OmsImplementations.Mini;
using Mocha.ServerApplication.HardcodedPages;
namespace Mocha.ServerApplication;

View File

@ -20,7 +20,6 @@ using MBS.Core;
using MBS.Web;
using Mocha.Core;
using Mocha.Core.OmsImplementations;
using Mocha.Core.OmsImplementations.Mini;
using Mocha.Core.Oop;
using Mocha.Core.Oop.Methods;
@ -88,7 +87,7 @@ public class Program : MochaWebApplication
InstanceHandle c_Application = oms.GetInstance(KnownInstanceGuids.Classes.Application);
InstanceHandle i_Application = oms.CreateInstanceOf(c_Application, new Guid("{773f6c6e-6cef-4a04-b333-ac097c0ab705}"));
InstanceHandle c_Alerynn_Test_Class = oms.CreateClass("Alerynn Test Class", new Guid("{bb1b32ff-55fe-4de7-a0c4-2e0a9d8de63b}"));
Class c_Alerynn_Test_Class = oms.CreateClass("Alerynn Test Class", new Guid("{bb1b32ff-55fe-4de7-a0c4-2e0a9d8de63b}"));
InstanceHandle i_Alerynn_Test_Class = oms.CreateInstanceOf(c_Alerynn_Test_Class, new Guid("{d82182d5-451c-453f-9635-af07305b10ee}"));
InstanceHandle c_Tenant = oms.GetInstance(KnownInstanceGuids.Classes.Tenant);
@ -116,7 +115,7 @@ public class Program : MochaWebApplication
InstanceHandle a_Value = oms.GetInstance(KnownAttributeGuids.Text.Value);
OmsMethodBuilder mb = new OmsMethodBuilder(oms);
BuildAttributeMethod ba = mb.CreateBuildAttributeMethod(c_Alerynn_Test_Class, "get", "Welcome Message", AccessModifier.Public, true, a_Value, "This is the Super User tenant");
BuildAttributeMethod ba = mb.CreateBuildAttributeMethod(c_Alerynn_Test_Class.GetHandle(), "get", "Welcome Message", AccessModifier.Public, true, a_Value, "This is the Super User tenant");
ReturnAttributeMethodBinding ba_ramb = ba.CreateMethodBinding(oms);
@ -142,7 +141,7 @@ public class Program : MochaWebApplication
InstanceHandle ec_AlerynnWelcome1 = oms.CreateInstanceOf(c_DerivedElementContent);
oms.AssignRelationship(ec_AlerynnWelcome1, r_Element_Content__has__Instance, a_AlerynnWelcome1);
oms.AssignRelationship(el_AlerynnWelcome1, r_Element__has__Element_Content, ec_AlerynnWelcome1);
oms.AssignRelationship(ec_AlerynnWelcome1, oms.GetInstance(KnownRelationshipGuids.Derived_Element_Content__update_with__Executable_returning_Work_Data), ba_ramb.Handle);
oms.AssignRelationship(ec_AlerynnWelcome1, oms.GetInstance(KnownRelationshipGuids.Derived_Element_Content__update_with__Executable_returning_Work_Data), ba_ramb.GetHandle());
oms.AssignRelationship(ec_AlerynnWelcome1, r_Derived_Element_Content__has__Derived_EC_Display_Option, new InstanceHandle[]
{
do_WideText,
@ -169,7 +168,7 @@ public class Program : MochaWebApplication
InstanceHandle r_Route__secured_to__Domain = oms.GetInstance(KnownRelationshipGuids.Route__secured_to__Domain);
oms.AssignRelationship(route, r_Route__secured_to__Domain, [i_Domain_AuthenticatedUsers]);
oms.AssignRelationship(route, r_Route__processed_by__Control_Transaction_Method, ct.Handle);
oms.AssignRelationship(route, r_Route__processed_by__Control_Transaction_Method, ct.GetHandle());
InstanceHandle r_Tenant__has_initiating__Route = oms.GetInstance(KnownRelationshipGuids.Tenant__has_initiating__Route);
oms.AssignRelationship(i_Tenant, r_Tenant__has_initiating__Route, route);
@ -201,7 +200,7 @@ public class Program : MochaWebApplication
InstanceHandle c_Application = oms.GetInstance(KnownInstanceGuids.Classes.Application);
InstanceHandle i_Application = oms.CreateInstanceOf(c_Application, new Guid("{32582607-1198-4e11-a283-b7f56e26f164}"));
InstanceHandle c_Alerynn_Test_Class = oms.CreateClass("Alerynn Test Class", new Guid("{bb1b32ff-55fe-4de7-a0c4-2e0a9d8de63b}"));
Class c_Alerynn_Test_Class = oms.CreateClass("Alerynn Test Class", new Guid("{bb1b32ff-55fe-4de7-a0c4-2e0a9d8de63b}"));
InstanceHandle i_Alerynn_Test_Class = oms.CreateInstanceOf(c_Alerynn_Test_Class, new Guid("{d82182d5-451c-453f-9635-af07305b10ee}"));
InstanceHandle c_Tenant = oms.GetInstance(KnownInstanceGuids.Classes.Tenant);
@ -222,7 +221,7 @@ public class Program : MochaWebApplication
InstanceHandle a_Value = oms.GetInstance(KnownAttributeGuids.Text.Value);
OmsMethodBuilder mb = new OmsMethodBuilder(oms);
BuildAttributeMethod ba = mb.CreateBuildAttributeMethod(c_Alerynn_Test_Class, "get", "Welcome Message", AccessModifier.Public, true, a_Value, "Welcome to Alerynn: Infinite Universe!");
BuildAttributeMethod ba = mb.CreateBuildAttributeMethod(c_Alerynn_Test_Class.GetHandle(), "get", "Welcome Message", AccessModifier.Public, true, a_Value, "Welcome to Alerynn: Infinite Universe!");
ReturnAttributeMethodBinding ba_ramb = ba.CreateMethodBinding(oms);
@ -256,7 +255,7 @@ public class Program : MochaWebApplication
InstanceHandle ec_AlerynnWelcome1 = oms.CreateInstanceOf(c_DerivedElementContent);
oms.AssignRelationship(ec_AlerynnWelcome1, r_Element_Content__has__Instance, a_AlerynnWelcome1);
oms.AssignRelationship(el_AlerynnWelcome1, r_Element__has__Element_Content, ec_AlerynnWelcome1);
oms.AssignRelationship(ec_AlerynnWelcome1, oms.GetInstance(KnownRelationshipGuids.Derived_Element_Content__update_with__Executable_returning_Work_Data), ba_ramb.Handle);
oms.AssignRelationship(ec_AlerynnWelcome1, oms.GetInstance(KnownRelationshipGuids.Derived_Element_Content__update_with__Executable_returning_Work_Data), ba_ramb.GetHandle());
oms.AssignRelationship(ec_AlerynnWelcome1, r_Derived_Element_Content__has__Derived_EC_Display_Option, new InstanceHandle[]
{
do_WideText,
@ -283,7 +282,7 @@ public class Program : MochaWebApplication
InstanceHandle r_Route__secured_to__Domain = oms.GetInstance(KnownRelationshipGuids.Route__secured_to__Domain);
oms.AssignRelationship(route, r_Route__secured_to__Domain, [i_Domain_Anyone]);
oms.AssignRelationship(route, r_Route__processed_by__Control_Transaction_Method, ct.Handle);
oms.AssignRelationship(route, r_Route__processed_by__Control_Transaction_Method, ct.GetHandle());
InstanceHandle r_Tenant__has_initiating__Route = oms.GetInstance(KnownRelationshipGuids.Tenant__has_initiating__Route);
oms.AssignRelationship(i_Tenant, r_Tenant__has_initiating__Route, route);

View File

@ -63,10 +63,10 @@ public class SelectFromInstanceSetMethodImplementation : MethodImplementation
if (inst != null)
{
OrderableData od = new OrderableData();
od.Data = inst.Handle;
od.Data = inst.GetHandle();
if (orderAttribute != InstanceHandle.Empty)
{
InstanceHandle ihWorkData = oms.Execute(context, orderAttribute, inst.Handle);
InstanceHandle ihWorkData = oms.Execute(context, orderAttribute, inst.GetHandle());
string order = context.GetWorkData<string>(ihWorkData);
od.Order = order;

View File

@ -295,51 +295,58 @@ public abstract class Oms
}
protected abstract InstanceKey GetInstanceKeyInternal(InstanceHandle instance);
public InstanceKey GetInstanceKey(InstanceHandle instance)
public InstanceKey GetInstanceKey(IInstanceReference instance)
{
if (instance.Equals(GetInstance(KnownInstanceGuids.Classes.Class)))
{
return new InstanceKey(1, 1);
}
if (IsDerivedInstance(instance))
if (IsDerivedInstance(instance.GetHandle()))
{
InstanceHandle parent = GetParentClass(instance);
InstanceKey ikParent = GetInstanceKeyInternal(parent);
InstanceKey ik = new InstanceKey(ikParent.InstanceIndex, -1);
ik.SetDerivedData(this, instance, GetDerivedData(instance));
ik.SetDerivedData(this, instance.GetHandle(), GetDerivedData(instance.GetHandle()));
return ik;
}
return GetInstanceKeyInternal(instance);
return GetInstanceKeyInternal(instance.GetHandle());
}
protected abstract Guid GetGlobalIdentifierInternal(InstanceHandle instance);
public Guid GetGlobalIdentifier(InstanceHandle instance)
public Guid GetGlobalIdentifier(IInstanceReference wrapper)
{
return GetGlobalIdentifierInternal(instance);
}
public Guid GetGlobalIdentifier(InstanceWrapper wrapper)
{
return GetGlobalIdentifier(wrapper.Handle);
return GetGlobalIdentifierInternal(wrapper.GetHandle());
}
protected abstract void AssignRelationshipInternal(InstanceHandle source, InstanceHandle relationship, IEnumerable<InstanceHandle> targets, DateTime effectiveDate);
public void AssignRelationship(InstanceHandle source, InstanceHandle relationship, IEnumerable<InstanceHandle> targets, DateTime effectiveDate)
public void AssignRelationship(IInstanceReference source, InstanceHandle relationship, IEnumerable<InstanceHandle> targets, DateTime? effectiveDate = null)
{
ValidateConstraintsForRelationship(source, relationship, targets);
AssignRelationshipInternal(source, relationship, targets, effectiveDate);
ValidateConstraintsForRelationship(source.GetHandle(), relationship, targets);
AssignRelationshipInternal(source.GetHandle(), relationship, targets, effectiveDate.GetValueOrDefault(DateTime.Now));
}
public void AssignRelationship(InstanceHandle source, InstanceHandle relationship, IEnumerable<InstanceHandle> targets)
public void AssignRelationship(IInstanceReference source, Relationship relationship, IEnumerable<InstanceHandle> targets, DateTime? effectiveDate = null)
{
AssignRelationship(source, relationship, targets, DateTime.Now);
ValidateConstraintsForRelationship(source.GetHandle(), relationship.GetHandle(), targets);
AssignRelationshipInternal(source.GetHandle(), relationship.GetHandle(), targets, effectiveDate.GetValueOrDefault(DateTime.Now));
}
public void AssignRelationship(InstanceHandle source, InstanceHandle relationship, InstanceHandle target, DateTime effectiveDate)
public void AssignRelationship(IInstanceReference source, InstanceHandle relationship, IInstanceReference target, DateTime? effectiveDate = null)
{
AssignRelationship(source, relationship, new InstanceHandle[] { target.GetHandle() }, effectiveDate);
}
public void AssignRelationship(IInstanceReference source, Relationship relationship, IInstanceReference target, DateTime? effectiveDate = null)
{
AssignRelationship(source, relationship, new InstanceHandle[] { target.GetHandle() }, effectiveDate);
}
public void AssignRelationship(IInstanceReference source, InstanceHandle relationship, InstanceHandle target, DateTime? effectiveDate = null)
{
AssignRelationship(source, relationship, new InstanceHandle[] { target }, effectiveDate);
}
public void AssignRelationship(InstanceHandle source, InstanceHandle relationship, InstanceHandle target)
public void AssignRelationship(IInstanceReference source, Relationship relationship, InstanceHandle target, DateTime? effectiveDate = null)
{
AssignRelationship(source, relationship, new InstanceHandle[] { target }, DateTime.Now);
AssignRelationship(source, relationship, new InstanceHandle[] { target }, effectiveDate);
}
private void ValidateConstraintsForRelationship(InstanceHandle source, InstanceHandle relationship, IEnumerable<InstanceHandle> targets)
@ -458,6 +465,7 @@ public abstract class Oms
}
else
{
// !FIXME! allow inherited parent classes
throw new InvalidOperationException("cannot cast inst");
}
}
@ -490,12 +498,17 @@ public abstract class Oms
{
return CreateInstanceInternal(globalIdentifier);
}
protected T? CreateInstance<T>(Guid globalIdentifier) where T : ConcreteInstanceWrapper
{
InstanceHandle ih = CreateInstance(globalIdentifier);
return ConcreteInstanceWrapper.Wrap<T>(this, ih);
}
public InstanceHandle CreateInstanceOf(InstanceHandle ir_class)
public InstanceHandle CreateInstanceOf(IInstanceReference ir_class)
{
return CreateInstanceOf(ir_class, Guid.NewGuid());
}
public InstanceHandle CreateInstanceOf(InstanceHandle ir_class, Guid guid)
public InstanceHandle CreateInstanceOf(IInstanceReference ir_class, Guid guid)
{
if (GetParentClass(ir_class) != GetInstance(KnownInstanceGuids.Classes.Class))
{
@ -503,14 +516,19 @@ public abstract class Oms
}
InstanceHandle ir = CreateInstance(guid);
SetParentClass(ir, ir_class);
SetParentClass(ir, ir_class.GetHandle());
int ct = CountInstances(ir_class);
InstanceKey pclass_key = GetInstanceKey(ir_class);
int ct = CountInstances(ir_class.GetHandle());
InstanceKey pclass_key = GetInstanceKey(ir_class.GetHandle());
InstanceKey new_index = new InstanceKey(pclass_key.InstanceIndex, ct);
SetInstanceKey(ir, new_index);
return ir;
}
public T CreateInstanceOf<T>(IInstanceReference ir_class, Guid guid) where T : ConcreteInstanceWrapper
{
InstanceHandle ih = CreateInstanceOf(ir_class, guid);
return ConcreteInstanceWrapper.Wrap<T>(this, ih);
}
public InstanceHandle CreateFile(string name, string contentType, Stream stream)
{
@ -542,11 +560,15 @@ public abstract class Oms
/// </summary>
/// <param name="target"></param>
/// <param name="instanceKey"></param>
public void SetInstanceKey(InstanceHandle target, InstanceKey instanceKey)
public void SetInstanceKey(IInstanceReference target, InstanceKey instanceKey)
{
SetInstanceKeyInternal(target, instanceKey);
SetInstanceKeyInternal(target.GetHandle(), instanceKey);
}
protected void SetParentClass(InstanceHandle ir, Class ir_parent)
{
SetParentClass(ir, ir_parent.GetHandle());
}
protected void SetParentClass(InstanceHandle ir, InstanceHandle ir_parent)
{
ClearRelationship(ir, GetInstance(KnownRelationshipGuids.Instance__for__Class));
@ -566,10 +588,10 @@ public abstract class Oms
return irs.Count();
}
public InstanceHandle GetParentClass(InstanceHandle ir)
public InstanceHandle GetParentClass(IInstanceReference ir)
{
InstanceHandle relInstance__for__Class = GetInstance(KnownRelationshipGuids.Instance__for__Class);
IEnumerable<InstanceHandle> irs = GetRelatedInstances(ir, relInstance__for__Class);
IEnumerable<InstanceHandle> irs = GetRelatedInstances(ir.GetHandle(), relInstance__for__Class);
if (irs.Count() > 0)
{
return irs.First();
@ -588,16 +610,16 @@ public abstract class Oms
object? val = GetAttributeValueInternal(source, attribute, effectiveDate.GetValueOrDefault(DateTime.Now));
return val;
}
public bool TryGetAttributeValue<T>(InstanceHandle source, InstanceHandle attribute, out T value)
public bool TryGetAttributeValue<T>(IInstanceReference source, InstanceHandle attribute, out T value)
{
return TryGetAttributeValue<T>(source, attribute, null, out value);
}
public bool TryGetAttributeValue<T>(InstanceHandle source, InstanceHandle attribute, DateTime? effectiveDate, out T value)
public bool TryGetAttributeValue<T>(IInstanceReference source, InstanceHandle attribute, DateTime? effectiveDate, out T value)
{
DateTime dt = DateTime.Now;
// if (HasAttributeValueInternal(source, attribute, effectiveDate.GetValueOrDefault(dt)))
{
object? val = GetAttributeValueInternal(source, attribute, effectiveDate.GetValueOrDefault(dt));
object? val = GetAttributeValueInternal(source.GetHandle(), attribute, effectiveDate.GetValueOrDefault(dt));
if (val is T)
{
value = (T)val;
@ -695,20 +717,21 @@ public abstract class Oms
return defaultValue;
}
protected abstract void SetAttributeValueInternal(InstanceHandle source, InstanceHandle attribute, object value, DateTime effectiveDate);
public void SetAttributeValue(InstanceHandle source, InstanceHandle attribute, object value, DateTime? effectiveDate = null)
public void SetAttributeValue(IInstanceReference source, InstanceHandle attribute, object value, DateTime? effectiveDate = null)
{
ValidateConstraintsForAttribute(source, attribute, value);
InstanceHandle sh = source.GetHandle();
ValidateConstraintsForAttribute(sh, attribute, value);
if (IsDerivedInstance(source))
if (IsDerivedInstance(sh))
{
if (!_derivedData.ContainsKey(source))
if (!_derivedData.ContainsKey(sh))
{
_derivedData[source] = new Dictionary<InstanceHandle, object>();
_derivedData[sh] = new Dictionary<InstanceHandle, object>();
}
_derivedData[source][attribute] = value;
_derivedData[sh][attribute] = value;
return;
}
SetAttributeValueInternal(source, attribute, value, effectiveDate.GetValueOrDefault(DateTime.Now));
SetAttributeValueInternal(sh, attribute, value, effectiveDate.GetValueOrDefault(DateTime.Now));
}
private void ValidateConstraintsForAttribute(InstanceHandle source, InstanceHandle attribute, object value)
@ -895,16 +918,16 @@ public abstract class Oms
}
public InstanceHandle CreateRelationship(InstanceHandle sourceClass, string relationshipName, InstanceHandle destinationClass, Guid relationshipGuid, bool singular)
public Relationship? CreateRelationship(IInstanceReference sourceClass, string relationshipName, IInstanceReference destinationClass, Guid relationshipGuid, bool singular)
{
return CreateRelationship(sourceClass, relationshipName, destinationClass, relationshipGuid, singular, null, Guid.Empty);
}
public InstanceHandle CreateRelationship(InstanceHandle sourceClass, string relationshipName, InstanceHandle destinationClass, Guid relationshipGuid, bool singular, string siblingRelationshipName, Guid siblingRelationshipGuid)
public Relationship? CreateRelationship(IInstanceReference sourceClass, string relationshipName, IInstanceReference destinationClass, Guid relationshipGuid, bool singular, string siblingRelationshipName, Guid siblingRelationshipGuid)
{
InstanceHandle relationshipInstance = CreateRelationship(sourceClass, relationshipName, destinationClass, relationshipGuid, singular, siblingRelationshipName, siblingRelationshipGuid, out InstanceHandle siblingRelationshipInstance);
Relationship? relationshipInstance = CreateRelationship(sourceClass, relationshipName, destinationClass, relationshipGuid, singular, siblingRelationshipName, siblingRelationshipGuid, out Relationship siblingRelationshipInstance);
return relationshipInstance;
}
public InstanceHandle CreateRelationship(InstanceHandle sourceClass, string relationshipName, InstanceHandle destinationClass, Guid relationshipGuid, bool singular, string siblingRelationshipName, Guid siblingRelationshipGuid, out InstanceHandle siblingRelationshipInstance)
public Relationship? CreateRelationship(IInstanceReference sourceClass, string relationshipName, IInstanceReference destinationClass, Guid relationshipGuid, bool singular, string siblingRelationshipName, Guid siblingRelationshipGuid, out Relationship siblingRelationshipInstance)
{
InstanceHandle c_Relationship = GetInstance(KnownInstanceGuids.Classes.Relationship);
if (c_Relationship == InstanceHandle.Empty)
@ -947,7 +970,7 @@ public abstract class Oms
SetAttributeValue(irRelationship, a_Singular, singular);
AssignRelationship(irRelationship, r_Relationship__has_destination__Class, destinationClass);
siblingRelationshipInstance = InstanceHandle.Empty;
siblingRelationshipInstance = null;
if (siblingRelationshipName != null)
{
if (siblingRelationshipGuid == Guid.Empty)
@ -955,7 +978,7 @@ public abstract class Oms
siblingRelationshipGuid = Guid.NewGuid();
}
siblingRelationshipInstance = CreateInstanceOf(c_Relationship, siblingRelationshipGuid);
siblingRelationshipInstance = CreateInstanceOf<Relationship>(c_Relationship, siblingRelationshipGuid);
AssignRelationship(siblingRelationshipInstance, r_Relationship__has_source__Class, destinationClass);
SetAttributeValue(siblingRelationshipInstance, a_RelationshipType, siblingRelationshipName);
AssignRelationship(siblingRelationshipInstance, r_Relationship__has_destination__Class, sourceClass);
@ -963,9 +986,17 @@ public abstract class Oms
AssignRelationship(irRelationship, r_Relationship__has_sibling__Relationship, siblingRelationshipInstance);
AssignRelationship(siblingRelationshipInstance, r_Relationship__has_sibling__Relationship, irRelationship);
}
return irRelationship;
return ConcreteInstanceWrapper.Wrap<Relationship>(this, irRelationship);
}
public T? GetRelatedInstance<T>(InstanceHandle source, Relationship relationship) where T : ConcreteInstanceWrapper
{
return ConcreteInstanceWrapper.Wrap<T>(this, GetRelatedInstance(source, relationship));
}
public InstanceHandle GetRelatedInstance(InstanceHandle source, Relationship relationship)
{
return GetRelatedInstance(source, relationship.GetHandle());
}
public InstanceHandle GetRelatedInstance(InstanceHandle source, InstanceHandle relationship)
{
IEnumerable<InstanceHandle> irs = GetRelatedInstances(source, relationship);
@ -982,7 +1013,7 @@ public abstract class Oms
/// </summary>
/// <param name="name">The name of the new Class.</param>
/// <returns></returns>
public InstanceHandle CreateClass(string name)
public Class CreateClass(string name)
{
return CreateClass(name, Guid.NewGuid());
}
@ -992,20 +1023,20 @@ public abstract class Oms
/// <param name="name">The name of the new Class.</param>
/// <param name="globalIdentifier">The global identifier to assign the newly-created Class instance.</param>
/// <returns></returns>
public InstanceHandle CreateClass(string name, Guid globalIdentifier)
public Class? CreateClass(string name, Guid globalIdentifier)
{
InstanceHandle c_Class = GetInstance(KnownInstanceGuids.Classes.Class);
InstanceHandle c_new = CreateInstanceOf(c_Class, globalIdentifier);
SetAttributeValue(c_new, GetInstance(KnownAttributeGuids.Text.Name), name);
return c_new;
return new Class(c_new);
}
public InstanceHandle ExecuteInstanceMethod(OmsContext context, InstanceHandle instance, MethodBinding methodBinding)
{
InstanceHandle method = GetRelatedInstance(methodBinding.Handle, GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method));
InstanceHandle method = GetRelatedInstance(methodBinding.GetHandle(), GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method));
InstanceHandle forClass = GetRelatedInstance(method, GetInstance(KnownRelationshipGuids.Method__for__Class));
context.SetWorkData(forClass, instance);
return Execute(context, methodBinding.Handle);
return Execute(context, methodBinding.GetHandle());
}
public object? ExecuteInstanceMethodReturningAttribute(OmsContext context, InstanceHandle instance, MethodBinding methodBinding)
{
@ -1020,31 +1051,31 @@ public abstract class Oms
methodImplementations[methodClassId] = implementation;
}
public InstanceHandle Execute(OmsContext context, MethodBinding methodBinding, IInstanceWrapper? targetInstance = null)
public InstanceHandle Execute(OmsContext context, MethodBinding methodBinding, IInstanceReference? targetInstance = null)
{
InstanceHandle? targetInstanceHandle = null;
if (targetInstance != null)
{
targetInstanceHandle = targetInstance.Handle;
targetInstanceHandle = targetInstance.GetHandle();
}
return Execute(context, methodBinding, targetInstanceHandle);
}
public InstanceHandle Execute(OmsContext context, MethodBinding methodBinding, InstanceHandle? targetInstance = null)
{
return Execute(context, methodBinding.Handle, targetInstance);
return Execute(context, methodBinding.GetHandle(), targetInstance);
}
public InstanceHandle Execute(OmsContext context, Method method, InstanceHandle? targetInstance = null)
{
return Execute(context, method.Handle, targetInstance);
return Execute(context, method.GetHandle(), targetInstance);
}
public InstanceHandle Execute(OmsContext context, MethodBinding methodBinding)
{
return Execute(context, methodBinding.Handle);
return Execute(context, methodBinding.GetHandle());
}
public object? ExecuteReturningAttributeValue(OmsContext context, ReturnAttributeMethodBinding methodBinding)
{
InstanceHandle workData = Execute(context, methodBinding.Handle);
InstanceHandle workData = Execute(context, methodBinding.GetHandle());
return context.GetWorkData(workData);
}
public T ExecuteReturningAttributeValue<T>(OmsContext context, ReturnAttributeMethodBinding methodBinding, T defaultValue = default(T))
@ -1113,6 +1144,7 @@ public abstract class Oms
{
if (methodImplementations.ContainsKey(parentClassId))
{
if (targetInstance != null)
{
InstanceHandle hh = targetInstance.GetValueOrDefault();
@ -1153,7 +1185,7 @@ public abstract class Oms
public IEnumerable<InstanceHandle> ExecuteStaticMethodReturningInstanceSet(OmsContext context, ReturnInstanceSetMethodBinding methodBinding)
{
InstanceHandle method = GetRelatedInstance(methodBinding.Handle, GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method));
InstanceHandle method = GetRelatedInstance(methodBinding.GetHandle(), GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method));
if (TryGetAttributeValue<bool>(method, GetInstance(KnownAttributeGuids.Boolean.Static), out bool is_static))
{
if (is_static)
@ -1193,6 +1225,10 @@ public abstract class Oms
return new WorkSet(workSet);
}
public void AddAttribute(Class targetClass, InstanceHandle attributeInstance)
{
AddAttribute(targetClass.GetHandle(), attributeInstance);
}
public void AddAttribute(InstanceHandle targetInstance, InstanceHandle attributeInstance)
{
AssignRelationship(targetInstance, GetInstance(KnownRelationshipGuids.Class__has__Attribute), attributeInstance);
@ -1200,6 +1236,10 @@ public abstract class Oms
AssignRelationship(attributeInstance, GetInstance(KnownRelationshipGuids.Attribute__for__Class), targetInstance);
}
public void AddSuperClass(Class classInstance, Class inheritsFrom)
{
AddSuperClass(classInstance.GetHandle(), inheritsFrom.GetHandle());
}
public void AddSuperClass(InstanceHandle classInstance, InstanceHandle inheritsFrom)
{
AssignRelationship(classInstance, GetInstance(KnownRelationshipGuids.Class__has_super__Class), inheritsFrom);
@ -1229,11 +1269,7 @@ public abstract class Oms
return list;
}
public string GetInstanceText(InstanceWrapper inst)
{
return GetInstanceText(inst.Handle);
}
public string GetInstanceText(InstanceHandle inst)
public string GetInstanceText(IInstanceReference inst)
{
InstanceHandle parentClass = GetParentClass(inst);
InstanceHandle ihLabeledByRAMB = InstanceHandle.Empty;
@ -1254,10 +1290,11 @@ public abstract class Oms
}
// FIXME: remove when we have Class@get Instance Text implemented
return _GetInstanceTextHack(inst);
return _GetInstanceTextHack(inst.GetHandle());
}
private string _GetInstanceTextHack(InstanceHandle inst)
{
Console.Error.WriteLine("!!! HACK !!! GetInstanceTextHack !!! HACK !!!");
StringBuilder sb = new StringBuilder();
if (IsInstanceOf(inst, GetInstance(KnownInstanceGuids.Classes.Relationship)))
{
@ -1425,12 +1462,12 @@ public abstract class Oms
/// <param name="globalIdentifier">The global identifier of the resulting enumeration class.</param>
/// <param name="memberGlobalIdentifiers">The global identifiers of the instances (members) of the enumeration class.</param>
/// <returns></returns>
public InstanceHandle CreateEnumeration(Guid globalIdentifier, Guid[] memberGlobalIdentifiers)
public Class CreateEnumeration(Guid globalIdentifier, Guid[] memberGlobalIdentifiers)
{
InstanceHandle c_Enum = CreateEnumeration(globalIdentifier, memberGlobalIdentifiers, out InstanceHandle[] memberInstanceHandles);
Class c_Enum = CreateEnumeration(globalIdentifier, memberGlobalIdentifiers, out InstanceHandle[] memberInstanceHandles);
return c_Enum;
}
public InstanceHandle CreateEnumeration(Guid globalIdentifier, Guid[] memberGlobalIdentifiers, out InstanceHandle[] memberInstanceHandles)
public Class CreateEnumeration(Guid globalIdentifier, Guid[] memberGlobalIdentifiers, out InstanceHandle[] memberInstanceHandles)
{
if (!TryGetInstance(globalIdentifier, out InstanceHandle c_Enum))
{
@ -1441,7 +1478,7 @@ public abstract class Oms
{
memberInstanceHandles[i] = CreateInstanceOf(c_Enum, memberGlobalIdentifiers[i]);
}
return c_Enum;
return ConcreteInstanceWrapper.Wrap<Class>(this, c_Enum);
}
public string GetTranslationValue(InstanceHandle sourceInstance, InstanceHandle relationshipInstance, string defaultValue = "")
@ -2080,6 +2117,10 @@ public abstract class Oms
return value;
}
public InstanceHandle GetInstanceByName(Class parentClass, string name)
{
return GetInstanceByName(parentClass.GetHandle(), name);
}
public InstanceHandle GetInstanceByName(InstanceHandle parentClass, string name)
{
InstanceHandle a_Name = GetInstance(KnownAttributeGuids.Text.Name);

View File

@ -37,7 +37,7 @@ public class OmsContext
private Dictionary<InstanceHandle, object?> _GlobalData = new Dictionary<InstanceHandle, object?>();
public object? GetWorkData(WorkSet parm)
{
return GetWorkData(parm.Handle);
return GetWorkData(parm.GetHandle());
}
public object? GetWorkData(InstanceHandle parm)
{
@ -66,11 +66,7 @@ public class OmsContext
public void SetWorkData(WorkSet parm, object? value)
{
SetWorkData(parm.Handle, value);
}
public void SetWorkData(InstanceHandle parm, IInstanceWrapper value)
{
SetWorkData(parm, value.Handle);
SetWorkData(parm.GetHandle(), value);
}
public void SetWorkData(InstanceHandle parm, object? value)
{
@ -84,12 +80,12 @@ public class OmsContext
singular = false;
}
if (value is InstanceHandle)
if (value is IInstanceReference)
{
IReadOnlyCollection<InstanceHandle> irs = Oms.GetRelatedInstances(parm, Oms.GetInstance(KnownRelationshipGuids.Work_Set__has_valid__Class));
if (irs.Count > 0)
{
InstanceHandle ir = (InstanceHandle)value;
InstanceHandle ir = ((IInstanceReference)value).GetHandle();
InstanceHandle parentClass = Oms.GetParentClass(ir);
if (!irs.Contains(parentClass))
{
@ -132,7 +128,7 @@ public class OmsContext
{
foreach (InstanceWrapper iw in insts)
{
InstanceHandle ir = iw.Handle;
InstanceHandle ir = iw.GetHandle();
InstanceHandle parentClass = Oms.GetParentClass(ir);
if (!irs.Contains(parentClass))
{

View File

@ -19,6 +19,7 @@
using System;
using MBS.Core;
using Mocha.Core.Oop;
/// <summary>
/// Implements <see cref="Oms" /> completely in-memory with a bare minimum schema definition which
@ -32,8 +33,8 @@ public class HardcodedMiniOms : MemoryOms
}
private TenantHandle t_super;
private InstanceHandle c_Class, c_Attribute, c_Relationship, c_TextAttribute, c_BooleanAttribute, c_NumericAttribute, c_DateAttribute, c_WorkSet, c_Instance, c_OMS, c_File;
private InstanceHandle c_CommonText, c_CommonBoolean, c_CommonNumeric, c_CommonDate, c_CommonInstanceSet;
private Class c_Class, c_Attribute, c_Relationship, c_TextAttribute, c_BooleanAttribute, c_NumericAttribute, c_DateAttribute, c_WorkSet, c_Instance, c_OMS, c_File;
private Class c_CommonText, c_CommonBoolean, c_CommonNumeric, c_CommonDate, c_CommonInstanceSet;
private InstanceHandle r_Class__has__Instance, r_Instance__for__Class;
private InstanceHandle r_Relationship__has_source__Class, r_Relationship__has_destination__Class, r_Relationship__has_sibling__Relationship;
private InstanceHandle a_Name, a_Order, a_Value, a_ContentType, a_RelationshipType, a_Singular;
@ -61,7 +62,7 @@ public class HardcodedMiniOms : MemoryOms
{
base.InitializeTenantInternal();
c_Class = CreateInstance(KnownInstanceGuids.Classes.Class);
c_Class = CreateInstance<Class>(KnownInstanceGuids.Classes.Class);
// we need to create `Class.has Instance` and `Instance.for Class`
// before we can use CreateInstanceOf, which uses SetParentClass
@ -73,8 +74,8 @@ public class HardcodedMiniOms : MemoryOms
AssignRelationship(c_Class, r_Instance__for__Class, c_Class);
// now that we have SetParentClass, we can use CreateInstanceOf
c_Attribute = CreateInstanceOf(c_Class, KnownInstanceGuids.Classes.Attribute);
c_Relationship = CreateInstanceOf(c_Class, KnownInstanceGuids.Classes.Relationship);
c_Attribute = CreateInstanceOf<Class>(c_Class, KnownInstanceGuids.Classes.Attribute);
c_Relationship = CreateInstanceOf<Class>(c_Class, KnownInstanceGuids.Classes.Relationship);
// now that Relationship class has been defined, we can identify the relationships
SetParentClass(r_Class__has__Instance, c_Relationship);
@ -82,10 +83,10 @@ public class HardcodedMiniOms : MemoryOms
// ?============ ATTRIBUTES ============?
// and now we define attribute classes
c_TextAttribute = CreateInstanceOf(c_Class, KnownInstanceGuids.Classes.TextAttribute);
c_BooleanAttribute = CreateInstanceOf(c_Class, KnownInstanceGuids.Classes.BooleanAttribute);
c_NumericAttribute = CreateInstanceOf(c_Class, KnownInstanceGuids.Classes.NumericAttribute);
c_DateAttribute = CreateInstanceOf(c_Class, KnownInstanceGuids.Classes.DateAttribute);
c_TextAttribute = CreateInstanceOf<Class>(c_Class, KnownInstanceGuids.Classes.TextAttribute);
c_BooleanAttribute = CreateInstanceOf<Class>(c_Class, KnownInstanceGuids.Classes.BooleanAttribute);
c_NumericAttribute = CreateInstanceOf<Class>(c_Class, KnownInstanceGuids.Classes.NumericAttribute);
c_DateAttribute = CreateInstanceOf<Class>(c_Class, KnownInstanceGuids.Classes.DateAttribute);
a_Name = CreateInstanceOf(c_TextAttribute, KnownAttributeGuids.Text.Name);
a_Order = CreateInstanceOf(c_TextAttribute, KnownAttributeGuids.Text.Order);
@ -171,9 +172,9 @@ public class HardcodedMiniOms : MemoryOms
CreateClass("Work Data", KnownInstanceGuids.Classes.WorkData);
c_OMS = CreateClass("OMS", KnownInstanceGuids.Classes.OMS);
InstanceHandle c_Application = CreateClass("Application", KnownInstanceGuids.Classes.Application);
Class c_Application = CreateClass("Application", KnownInstanceGuids.Classes.Application);
InstanceHandle c_Tenant = CreateClass("Tenant", KnownInstanceGuids.Classes.Tenant);
Class c_Tenant = CreateClass("Tenant", KnownInstanceGuids.Classes.Tenant);
CreateInstanceOf(c_Tenant);
CreateRelationship(c_Tenant, "has", c_Application, KnownRelationshipGuids.Tenant__has__Application, true, "for", KnownRelationshipGuids.Application__for__Tenant);

View File

@ -15,26 +15,28 @@
// You should have received a copy of the GNU General Public License
// along with Mocha.NET. If not, see <https://www.gnu.org/licenses/>.
using Mocha.Core.Oop;
namespace Mocha.Core.OmsImplementations.Mini;
public abstract class MiniOmsModule
{
// public virtual int Priority { get; } = 0;
protected InstanceHandle c_Class, c_Attribute, c_Relationship, c_TextAttribute, c_BooleanAttribute, c_NumericAttribute, c_DateAttribute, c_WorkSet, c_Instance;
protected Class c_Class, c_Attribute, c_Relationship, c_TextAttribute, c_BooleanAttribute, c_NumericAttribute, c_DateAttribute, c_WorkSet, c_Instance;
protected abstract void BuildInternal(Oms oms);
public void Build(Oms oms)
{
c_Class = oms.GetInstance(KnownInstanceGuids.Classes.Class);
c_Attribute = oms.GetInstance(KnownInstanceGuids.Classes.Attribute);
c_Relationship = oms.GetInstance(KnownInstanceGuids.Classes.Relationship);
c_TextAttribute = oms.GetInstance(KnownInstanceGuids.Classes.TextAttribute);
c_BooleanAttribute = oms.GetInstance(KnownInstanceGuids.Classes.BooleanAttribute);
c_NumericAttribute = oms.GetInstance(KnownInstanceGuids.Classes.NumericAttribute);
c_DateAttribute = oms.GetInstance(KnownInstanceGuids.Classes.DateAttribute);
c_Instance = oms.GetInstance(KnownInstanceGuids.Classes.Instance);
c_WorkSet = oms.GetInstance(KnownInstanceGuids.Classes.WorkSet);
c_Class = oms.GetInstance<Class>(KnownInstanceGuids.Classes.Class);
c_Attribute = oms.GetInstance<Class>(KnownInstanceGuids.Classes.Attribute);
c_Relationship = oms.GetInstance<Class>(KnownInstanceGuids.Classes.Relationship);
c_TextAttribute = oms.GetInstance<Class>(KnownInstanceGuids.Classes.TextAttribute);
c_BooleanAttribute = oms.GetInstance<Class>(KnownInstanceGuids.Classes.BooleanAttribute);
c_NumericAttribute = oms.GetInstance<Class>(KnownInstanceGuids.Classes.NumericAttribute);
c_DateAttribute = oms.GetInstance<Class>(KnownInstanceGuids.Classes.DateAttribute);
c_Instance = oms.GetInstance<Class>(KnownInstanceGuids.Classes.Instance);
c_WorkSet = oms.GetInstance<Class>(KnownInstanceGuids.Classes.WorkSet);
BuildInternal(oms);
}

View File

@ -29,18 +29,19 @@ using Mocha.Core.Oop.Methods;
/// </summary>
public class MethodsModule : MiniOmsModule
{
private InstanceHandle c_WorkData, c_OMS;
private InstanceHandle c_ParameterAssignment, c_Method, c_MethodBinding;
private Class c_WorkData, c_OMS;
private Class c_ParameterAssignment, c_Method, c_MethodBinding;
private InstanceHandle a_Name, a_Order, a_Singular, a_Verb, a_Static, a_UseAnyCondition, a_Value;
private InstanceHandle c_ReturnAttributeMethodBinding, c_ReturnInstanceSetMethodBinding, c_ReturnElementMethodBinding;
private InstanceHandle c_CommonText, c_CommonBoolean, c_CommonNumeric, c_CommonDate, c_CommonInstanceSet;
private InstanceHandle c_ConditionGroup;
private InstanceHandle c_BuildAttributeMethod, c_GetAttributeMethod, c_GetSpecifiedInstancesMethod, c_GetAttributeBySystemRoutineMethod, c_GetInstanceSetBySystemRoutineMethod, c_AssignAttributeMethod, c_GetRelationshipMethod, c_GetReferencedAttributeMethod, c_SelectFromInstanceSetMethod, c_ConditionalSelectFromInstanceSetCase, c_ConditionalSelectFromInstanceSetMethod, c_ConditionalSelectAttributeMethod, c_ConditionalSelectAttributeCase, c_EvaluateBooleanExpressionMethod;
private InstanceHandle c_ExecutableReturningAttribute, c_ExecutableReturningInstanceSet, c_ExecutableReturningWorkData;
private InstanceHandle c_AccessModifier, i_AccessModifier_Private, i_AccessModifier_Protected, i_AccessModifier_Public, i_AccessModifier_RootA2;
private InstanceHandle c_SystemRoutine, c_SystemAttributeRoutine, c_SystemInstanceSetRoutine;
private InstanceHandle c_AccumulationFunction, c_SelectionFunction, c_SetFunction;
private InstanceHandle c_Element, c_ElementContent;
private Class c_ReturnAttributeMethodBinding, c_ReturnInstanceSetMethodBinding, c_ReturnElementMethodBinding;
private Class c_CommonText, c_CommonBoolean, c_CommonNumeric, c_CommonDate, c_CommonInstanceSet;
private Class c_ConditionGroup;
private Class c_BuildAttributeMethod, c_GetAttributeMethod, c_GetSpecifiedInstancesMethod, c_GetAttributeBySystemRoutineMethod, c_GetInstanceSetBySystemRoutineMethod, c_AssignAttributeMethod, c_GetRelationshipMethod, c_GetReferencedAttributeMethod, c_SelectFromInstanceSetMethod, c_ConditionalSelectFromInstanceSetCase, c_ConditionalSelectFromInstanceSetMethod, c_ConditionalSelectAttributeMethod, c_ConditionalSelectAttributeCase, c_EvaluateBooleanExpressionMethod;
private Class c_ExecutableReturningAttribute, c_ExecutableReturningInstanceSet, c_ExecutableReturningWorkData;
private Class c_AccessModifier;
private InstanceHandle i_AccessModifier_Private, i_AccessModifier_Protected, i_AccessModifier_Public, i_AccessModifier_RootA2;
private Class c_SystemRoutine, c_SystemAttributeRoutine, c_SystemInstanceSetRoutine;
private Class c_AccumulationFunction, c_SelectionFunction, c_SetFunction;
private Class c_Element, c_ElementContent;
protected override void BuildInternal(Oms oms)
{
@ -52,7 +53,7 @@ public class MethodsModule : MiniOmsModule
oms.AddSuperClass(c_Attribute, c_ExecutableReturningAttribute);
c_WorkData = oms.GetInstance(KnownInstanceGuids.Classes.WorkData);
c_WorkData = oms.GetInstance<Class>(KnownInstanceGuids.Classes.WorkData);
oms.AddSuperClass(c_WorkData, c_ExecutableReturningWorkData);
c_ParameterAssignment = oms.CreateClass("Parameter Assignment", KnownInstanceGuids.Classes.ParameterAssignment);
@ -93,7 +94,7 @@ public class MethodsModule : MiniOmsModule
a_UseAnyCondition = oms.CreateInstanceOf(oms.GetInstance(KnownInstanceGuids.Classes.BooleanAttribute), KnownAttributeGuids.Boolean.UseAnyCondition);
oms.SetAttributeValue(a_UseAnyCondition, a_Name, "Use Any Condition");
c_AccessModifier = oms.CreateInstanceOf(c_Class, KnownInstanceGuids.Classes.AccessModifier);
c_AccessModifier = oms.CreateInstanceOf<Class>(c_Class, KnownInstanceGuids.Classes.AccessModifier);
oms.AddAttribute(c_AccessModifier, a_Name);
oms.AddAttribute(c_AccessModifier, a_Order);
@ -203,8 +204,8 @@ public class MethodsModule : MiniOmsModule
oms.CreateRelationship(c_ConditionalSelectAttributeMethod, "has", c_ConditionalSelectAttributeCase, KnownRelationshipGuids.Conditional_Select_Attribute_Method__has__Conditional_Select_Attribute_Case, false, "for", KnownRelationshipGuids.Conditional_Select_Attribute_Case__for__Conditional_Select_Attribute_Method);
oms.AddSuperClass(c_ConditionalSelectAttributeMethod, c_Method);
InstanceHandle c_BooleanOperator = oms.CreateClass("Boolean Operator", KnownInstanceGuids.Classes.BooleanOperator);
InstanceHandle c_RelationalOperator = oms.CreateClass("Relational Operator", KnownInstanceGuids.Classes.RelationalOperator);
Class c_BooleanOperator = oms.CreateClass("Boolean Operator", KnownInstanceGuids.Classes.BooleanOperator);
Class c_RelationalOperator = oms.CreateClass("Relational Operator", KnownInstanceGuids.Classes.RelationalOperator);
RelationalOperator.CountEqualTo = new RelationalOperator(oms.CreateInstanceOf(c_RelationalOperator, KnownInstanceGuids.RelationalOperators.CountEqualTo));
RelationalOperator.CountGreaterThan = new RelationalOperator(oms.CreateInstanceOf(c_RelationalOperator, KnownInstanceGuids.RelationalOperators.CountGreaterThan));
@ -240,19 +241,19 @@ public class MethodsModule : MiniOmsModule
oms.AddAttribute(c_Method, a_Verb);
oms.AddAttribute(c_Method, a_Static);
c_OMS = oms.GetInstance(KnownInstanceGuids.Classes.OMS);
c_OMS = oms.GetInstance<Class>(KnownInstanceGuids.Classes.OMS);
OmsMethodBuilder mb = new OmsMethodBuilder(oms);
OmsSystemRoutineBuilder srb = new OmsSystemRoutineBuilder(oms);
SystemAttributeRoutine sr = srb.CreateSystemAttributeRoutine(KnownInstanceGuids.SystemAttributeRoutines.GetRuntimeVersion, new Func<Oms, OmsContext, object?>(delegate (Oms oms, OmsContext context) { return oms.RuntimeVersion.ToString(); }));
mb.CreateGetAttributeBySystemRoutineMethod(c_OMS, "get", "Runtime Version", null, true, KnownInstanceGuids.Methods.GetAttributeBySystemRoutine.OMS__get__Runtime_Version, oms.GetInstance(KnownAttributeGuids.Text.Value), sr);
mb.CreateGetAttributeBySystemRoutineMethod(c_OMS.GetHandle(), "get", "Runtime Version", null, true, KnownInstanceGuids.Methods.GetAttributeBySystemRoutine.OMS__get__Runtime_Version, oms.GetInstance(KnownAttributeGuids.Text.Value), sr);
mb.CreateGetRelationshipMethod(c_Instance, "get", "Parent Class", AccessModifier.Public, false, KnownInstanceGuids.Methods.GetRelationship.Instance__get__Parent_Class, oms.GetInstance(KnownRelationshipGuids.Instance__for__Class));
mb.CreateGetRelationshipMethod(c_Instance.GetHandle(), "get", "Parent Class", AccessModifier.Public, false, KnownInstanceGuids.Methods.GetRelationship.Instance__get__Parent_Class, oms.GetInstance(KnownRelationshipGuids.Instance__for__Class));
InstanceHandle a_Seed = oms.CreateInstanceOf(oms.GetInstance(KnownInstanceGuids.Classes.NumericAttribute), KnownAttributeGuids.Numeric.Seed);
oms.SetAttributeValue(a_Seed, a_Name, "Seed");
InstanceHandle a_RandomNumber = oms.CreateInstanceOf(oms.GetInstance(KnownInstanceGuids.Classes.NumericAttribute), KnownAttributeGuids.Numeric.RandomNumber);
mb.CreateGetAttributeBySystemRoutineMethod(c_CommonNumeric, "get", "Random Number", AccessModifier.Public, true, KnownInstanceGuids.Methods.GetAttributeBySystemRoutine.Common_Numeric__get__Random_Number, a_RandomNumber, srb.CreateSystemAttributeRoutine<decimal>(KnownInstanceGuids.SystemAttributeRoutines.GetRandomNumber, new Func<Oms, OmsContext, decimal>(delegate (Oms oms, OmsContext context)
mb.CreateGetAttributeBySystemRoutineMethod(c_CommonNumeric.GetHandle(), "get", "Random Number", AccessModifier.Public, true, KnownInstanceGuids.Methods.GetAttributeBySystemRoutine.Common_Numeric__get__Random_Number, a_RandomNumber, srb.CreateSystemAttributeRoutine<decimal>(KnownInstanceGuids.SystemAttributeRoutines.GetRandomNumber, new Func<Oms, OmsContext, decimal>(delegate (Oms oms, OmsContext context)
{
object? seedO = context.GetWorkData(a_Seed);
if (seedO is decimal)

View File

@ -22,8 +22,8 @@ namespace Mocha.Core.OmsImplementations.Mini.Modules;
public class SecurityModule : MiniOmsModule
{
private InstanceHandle c_User, c_UserLogin, c_Role, c_Domain;
private InstanceHandle r_User__has__Role;
private Class c_User, c_UserLogin, c_Role, c_Domain;
private Relationship r_User__has__Role;
private InstanceHandle a_Token, a_Name, a_UserName, a_PasswordHash, a_PasswordSalt, a_UserIsLoggedIn;
private MethodReturningInstanceSet m_User__get__Current_User;
@ -56,14 +56,14 @@ public class SecurityModule : MiniOmsModule
OmsSystemRoutineBuilder sr = new OmsSystemRoutineBuilder(oms);
WorkSet ws_CurrentUser = oms.CreateWorkSet("Current User");
m_User__get__Current_User = mb.CreateGetInstanceSetBySystemRoutineMethod(c_User, "get", "Current User", AccessModifier.Public, true, ws_CurrentUser, sr.CreateSystemInstanceSetRoutine(KnownInstanceGuids.SystemInstanceSetRoutines.GetCurrentUser, delegate (Oms oms, OmsContext context)
m_User__get__Current_User = mb.CreateGetInstanceSetBySystemRoutineMethod(c_User.GetHandle(), "get", "Current User", AccessModifier.Public, true, ws_CurrentUser, sr.CreateSystemInstanceSetRoutine(KnownInstanceGuids.SystemInstanceSetRoutines.GetCurrentUser, delegate (Oms oms, OmsContext context)
{
List<InstanceHandle> list = new List<InstanceHandle>();
return list;
}));
MethodBinding mb_User__get__Current_User = m_User__get__Current_User.CreateMethodBinding(oms);
EvaluateBooleanExpressionMethod m_User__is__Logged_In = mb.CreateEvaluateBooleanExpressionMethod(c_User, "is", "Logged In", AccessModifier.Public, true, a_UserIsLoggedIn, m_User__get__Current_User, RelationalOperator.IsNotEmpty);
EvaluateBooleanExpressionMethod m_User__is__Logged_In = mb.CreateEvaluateBooleanExpressionMethod(c_User.GetHandle(), "is", "Logged In", AccessModifier.Public, true, a_UserIsLoggedIn, m_User__get__Current_User, RelationalOperator.IsNotEmpty);
MethodBinding mb_User__is__Logged_In = m_User__is__Logged_In.CreateMethodBinding(oms);
c_Domain = oms.CreateClass("Domain", KnownInstanceGuids.Classes.Domain);

View File

@ -15,14 +15,16 @@
// You should have received a copy of the GNU General Public License
// along with Mocha.NET. If not, see <https://www.gnu.org/licenses/>.
using Mocha.Core.Oop;
namespace Mocha.Core.OmsImplementations.Mini.Modules;
public class TranslationModule : MiniOmsModule
{
private InstanceHandle c_Tenant, c_Translation, c_TranslationValue, c_Language;
private Class c_Tenant, c_Translation, c_TranslationValue, c_Language;
private InstanceHandle a_Name, a_Value;
private InstanceHandle r_Translation__has__Translation_Value, r_Translation_Value__has__Language;
private InstanceHandle r_Tenant__has_login_header__Translation, r_Tenant__has_login_footer__Translation;
private Relationship r_Translation__has__Translation_Value, r_Translation_Value__has__Language;
private Relationship r_Tenant__has_login_header__Translation, r_Tenant__has_login_footer__Translation;
protected override void BuildInternal(Oms oms)
{
@ -48,11 +50,11 @@ public class TranslationModule : MiniOmsModule
r_Translation__has__Translation_Value = oms.CreateRelationship(c_Translation, "has", c_TranslationValue, KnownRelationshipGuids.Translation__has__Translation_Value, false, "for", KnownRelationshipGuids.Translation_Value__for__Translation);
r_Translation_Value__has__Language = oms.CreateRelationship(c_TranslationValue, "has", c_Language, KnownRelationshipGuids.Translation_Value__has__Language, true, "for", KnownRelationshipGuids.Language__for__Translation_Value);
c_Tenant = oms.GetInstance(KnownInstanceGuids.Classes.Tenant);
c_Tenant = oms.GetInstance<Class>(KnownInstanceGuids.Classes.Tenant);
r_Tenant__has_login_header__Translation = oms.CreateRelationship(c_Tenant, "has login header", c_Translation, KnownRelationshipGuids.Tenant__has_login_header__Translation, true);
r_Tenant__has_login_footer__Translation = oms.CreateRelationship(c_Tenant, "has login footer", c_Translation, KnownRelationshipGuids.Tenant__has_login_footer__Translation, true);
InstanceHandle c_Application = oms.CreateClass("Application", KnownInstanceGuids.Classes.Application);
Class c_Application = oms.CreateClass("Application", KnownInstanceGuids.Classes.Application);
oms.CreateRelationship(c_Application, "has title", c_Translation, KnownRelationshipGuids.Application__has_title__Translation, true, "title for", KnownRelationshipGuids.Translation__title_for__Application);
}
}

View File

@ -7,21 +7,21 @@ namespace Mocha.Core.OmsImplementations.Mini.Modules;
public class UserInterfaceModule : MiniOmsModule
{
private InstanceHandle c_Element, c_ElementContent, c_DerivedElementContent;
private InstanceHandle r_User__has__Role;
private Class c_Element, c_ElementContent, c_DerivedElementContent;
private Relationship r_User__has__Role;
private InstanceHandle a_Name;
private InstanceHandle c_ExecutableReturningWorkData, c_ExecutableReturningElement;
private InstanceHandle c_ElementContentDisplayOption;
private InstanceHandle c_Tenant, c_Method, c_MethodBinding, c_BuildUIResponseMethod, c_ControlTransactionMethod;
private InstanceHandle c_BuildResponseMethodBinding;
private Class c_ExecutableReturningWorkData, c_ExecutableReturningElement;
private Class c_ElementContentDisplayOption;
private Class c_Tenant, c_Method, c_MethodBinding, c_BuildUIResponseMethod, c_ControlTransactionMethod;
private Class c_BuildResponseMethodBinding;
protected override void BuildInternal(Oms oms)
{
c_Tenant = oms.GetInstance(KnownInstanceGuids.Classes.Tenant);
c_Tenant = oms.GetInstance<Class>(KnownInstanceGuids.Classes.Tenant);
a_Name = oms.GetInstance(KnownAttributeGuids.Text.Name);
c_Method = oms.GetInstance(KnownInstanceGuids.Classes.Method);
c_MethodBinding = oms.GetInstance(KnownInstanceGuids.Classes.MethodBinding);
c_Method = oms.GetInstance<Class>(KnownInstanceGuids.Classes.Method);
c_MethodBinding = oms.GetInstance<Class>(KnownInstanceGuids.Classes.MethodBinding);
c_Element = oms.CreateClass("Element", KnownInstanceGuids.Classes.Element);
oms.AddAttribute(c_Element, a_Name);
@ -45,7 +45,7 @@ public class UserInterfaceModule : MiniOmsModule
c_DerivedElementContent = oms.CreateClass("Derived Element Content", KnownInstanceGuids.Classes.DerivedElementContent);
oms.AddSuperClass(c_DerivedElementContent, c_ElementContent);
c_ExecutableReturningWorkData = oms.GetInstance(KnownInstanceGuids.Classes.ExecutableReturningWorkData);
c_ExecutableReturningWorkData = oms.GetInstance<Class>(KnownInstanceGuids.Classes.ExecutableReturningWorkData);
oms.CreateRelationship(c_Element, "has", c_ElementContent, KnownRelationshipGuids.Element__has__Element_Content, false, "for", KnownRelationshipGuids.Element_Content__for__Element);
oms.CreateRelationship(c_ElementContent, "has", c_Instance, KnownRelationshipGuids.Element_Content__has__Instance, true, "has", KnownRelationshipGuids.Instance__for__Element_Content);
@ -73,28 +73,28 @@ public class UserInterfaceModule : MiniOmsModule
// InstanceHandle Method_Binding__get__Method_Binding_Abbreviation = oms.GetInstance(KnownInstanceGuids.Methods.ConditionalSelectAttribute.Method_Binding__get__Method_Binding_Abbreviation);
InstanceHandle a_Value = oms.GetInstance(KnownAttributeGuids.Text.Value);
InstanceHandle Instance__get__Parent_Class_rsmb = oms.GetInstance(KnownInstanceGuids.Methods.GetRelationship.Instance__get__Parent_Class__for__Method_Binding__HACK);
BuildAttributeMethod Method__get__CT_Method_Suffix = mb.CreateBuildAttributeMethod(c_Method, "get", "CT Method Suffix", AccessModifier.Public, true, a_Value, "CT");
EvaluateBooleanExpressionMethod Method__is__CT = mb.CreateEvaluateBooleanExpressionMethod(c_Method, "is", "CT", AccessModifier.Public, false, oms.GetInstance(KnownAttributeGuids.Boolean.MethodIsOfTypeSpecified), Instance__get__Parent_Class_rsmb, RelationalOperator.InSelectionList, oms.GetInstance(KnownInstanceGuids.MethodClasses.ControlTransactionMethod));
BuildAttributeMethod Method__get__CT_Method_Suffix = mb.CreateBuildAttributeMethod(c_Method.GetHandle(), "get", "CT Method Suffix", AccessModifier.Public, true, a_Value, "CT");
EvaluateBooleanExpressionMethod Method__is__CT = mb.CreateEvaluateBooleanExpressionMethod(c_Method.GetHandle(), "is", "CT", AccessModifier.Public, false, oms.GetInstance(KnownAttributeGuids.Boolean.MethodIsOfTypeSpecified), Instance__get__Parent_Class_rsmb, RelationalOperator.InSelectionList, oms.GetInstance(KnownInstanceGuids.MethodClasses.ControlTransactionMethod));
// ConditionalSelectAttributeCase i_CT_Case = new ConditionalSelectAttributeCase(new IExecutableReturningAttribute[] { Method__is__CT.CreateMethodBinding(oms) }, null, false, Method__get__CT_Method_Suffix.CreateMethodBinding(oms));
// mb.AddConditionalSelectAttributeCase(new ConditionalSelectAttributeMethod(Method_Binding__get__Method_Binding_Abbreviation), i_CT_Case);
InstanceHandle c_Menu = oms.CreateClass("Menu", KnownInstanceGuids.Classes.Menu);
InstanceHandle c_MenuItem = oms.CreateClass("Menu Item", KnownInstanceGuids.Classes.MenuItem);
Class c_Menu = oms.CreateClass("Menu", KnownInstanceGuids.Classes.Menu);
Class c_MenuItem = oms.CreateClass("Menu Item", KnownInstanceGuids.Classes.MenuItem);
InstanceHandle c_MenuItemCommand = oms.CreateClass("Menu Item Command", KnownInstanceGuids.Classes.MenuItemCommand);
Class c_MenuItemCommand = oms.CreateClass("Menu Item Command", KnownInstanceGuids.Classes.MenuItemCommand);
oms.AddSuperClass(c_MenuItemCommand, c_MenuItem);
InstanceHandle c_MenuItemGroup = oms.CreateClass("Menu Item Group", KnownInstanceGuids.Classes.MenuItemGroup);
Class c_MenuItemGroup = oms.CreateClass("Menu Item Group", KnownInstanceGuids.Classes.MenuItemGroup);
oms.AddSuperClass(c_MenuItemGroup, c_MenuItem);
InstanceHandle c_MenuItemHeader = oms.CreateClass("Menu Item Header", KnownInstanceGuids.Classes.MenuItemHeader);
Class c_MenuItemHeader = oms.CreateClass("Menu Item Header", KnownInstanceGuids.Classes.MenuItemHeader);
oms.AddSuperClass(c_MenuItemHeader, c_MenuItem);
InstanceHandle c_MenuItemInstance = oms.CreateClass("Menu Item Instance", KnownInstanceGuids.Classes.MenuItemInstance);
Class c_MenuItemInstance = oms.CreateClass("Menu Item Instance", KnownInstanceGuids.Classes.MenuItemInstance);
oms.AddSuperClass(c_MenuItemInstance, c_MenuItem);
InstanceHandle c_MenuItemSeparator = oms.CreateClass("Menu Item Separator", KnownInstanceGuids.Classes.MenuItemSeparator);
Class c_MenuItemSeparator = oms.CreateClass("Menu Item Separator", KnownInstanceGuids.Classes.MenuItemSeparator);
oms.AddSuperClass(c_MenuItemSeparator, c_MenuItem);
oms.CreateRelationship(c_Menu, "has", c_MenuItem, KnownRelationshipGuids.Menu__has__Menu_Item, false, "for", KnownRelationshipGuids.Menu_Item__for__Menu);

View File

@ -1,8 +1,10 @@
using Mocha.Core.Oop;
namespace Mocha.Core.OmsImplementations.Mini.Modules;
public class WebModule : MiniOmsModule
{
private InstanceHandle c_Route, c_ControlTransactionMethod;
private Class c_Route, c_ControlTransactionMethod;
private InstanceHandle a_TargetURL;
private InstanceHandle CreateRoute(Oms oms, string targetUrl, InstanceHandle processedByControlTransactionMethod)
@ -22,7 +24,7 @@ public class WebModule : MiniOmsModule
c_Tenant = oms.GetInstance(KnownInstanceGuids.Classes.Tenant);
oms.AddAttribute(c_Route, a_TargetURL);
c_ControlTransactionMethod = oms.GetInstance(KnownInstanceGuids.MethodClasses.ControlTransactionMethod);
c_ControlTransactionMethod = oms.GetInstance<Class>(KnownInstanceGuids.MethodClasses.ControlTransactionMethod);
oms.CreateRelationship(c_Route, "processed by", c_ControlTransactionMethod, KnownRelationshipGuids.Route__processed_by__Control_Transaction_Method, true, "processes", KnownRelationshipGuids.Control_Transaction_Method__processes__Route);
oms.CreateRelationship(c_Tenant, "has initiating", c_Route, KnownRelationshipGuids.Tenant__has_initiating__Route, true, "initiates for", KnownRelationshipGuids.Route__initiates_for__Tenant);

View File

@ -40,19 +40,19 @@ public class OmsMethodBuilder
public ReturnAttributeMethodBinding CreateReturnAttributeMethodBinding(MethodReturningAttribute method)
{
InstanceHandle methodBinding = Oms.CreateInstanceOf(c_ReturnAttributeMethodBinding);
Oms.AssignRelationship(methodBinding, Oms.GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method), method.Handle);
Oms.AssignRelationship(methodBinding, Oms.GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method), method.GetHandle());
return new ReturnAttributeMethodBinding(methodBinding);
}
public ReturnInstanceSetMethodBinding CreateReturnInstanceSetMethodBinding(MethodReturningInstanceSet method)
{
InstanceHandle methodBinding = Oms.CreateInstanceOf(c_ReturnInstanceSetMethodBinding);
Oms.AssignRelationship(methodBinding, Oms.GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method), method.Handle);
Oms.AssignRelationship(methodBinding, Oms.GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method), method.GetHandle());
return new ReturnInstanceSetMethodBinding(methodBinding);
}
public ReturnElementMethodBinding CreateReturnElementMethodBinding(MethodReturningElement method)
{
InstanceHandle methodBinding = Oms.CreateInstanceOf(c_ReturnElementMethodBinding);
Oms.AssignRelationship(methodBinding, Oms.GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method), method.Handle);
Oms.AssignRelationship(methodBinding, Oms.GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method), method.GetHandle());
return new ReturnElementMethodBinding(methodBinding);
}
public BuildResponseMethodBinding CreateBuildResponseMethodBinding(MethodBuildingResponse method)
@ -63,7 +63,7 @@ public class OmsMethodBuilder
}
InstanceHandle methodBinding = Oms.CreateInstanceOf(c_BuildResponseMethodBinding);
Oms.AssignRelationship(methodBinding, Oms.GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method), method.Handle);
Oms.AssignRelationship(methodBinding, Oms.GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method), method.GetHandle());
return new BuildResponseMethodBinding(methodBinding);
}
@ -86,7 +86,7 @@ public class OmsMethodBuilder
public GetSpecifiedInstancesMethod CreateGetSpecifiedInstancesMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, WorkSet returnsWorkSet, InstanceHandle specifiedInstance)
{
GetSpecifiedInstancesMethod meth = CreateGetSpecifiedInstancesMethod(forClassInstance, verb, name, accessModifier, isStatic, returnsWorkSet, new InstanceHandle[] { specifiedInstance });
Oms.SetAttributeValue(meth.Handle, Oms.GetInstance(KnownAttributeGuids.Boolean.Singular), true);
Oms.SetAttributeValue(meth.GetHandle(), Oms.GetInstance(KnownAttributeGuids.Boolean.Singular), true);
return meth;
}
public GetSpecifiedInstancesMethod CreateGetSpecifiedInstancesMethod(InstanceHandle forClassInstance, string verb, string name, WorkSet returnsWorkSet, InstanceHandle[] specifiedInstances)
@ -96,7 +96,7 @@ public class OmsMethodBuilder
public GetSpecifiedInstancesMethod CreateGetSpecifiedInstancesMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, WorkSet returnsWorkSet, InstanceHandle[] specifiedInstances)
{
InstanceHandle method = CreateMethodBase(Oms.GetInstance(KnownInstanceGuids.MethodClasses.GetSpecifiedInstancesMethod), forClassInstance, verb, name, accessModifier, isStatic);
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Get_Specified_Instances_Method__returns__Work_Set), returnsWorkSet.Handle);
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Get_Specified_Instances_Method__returns__Work_Set), returnsWorkSet.GetHandle());
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Get_Specified_Instances_Method__uses__Instance), specifiedInstances);
return new GetSpecifiedInstancesMethod(method);
}
@ -136,7 +136,7 @@ public class OmsMethodBuilder
{
InstanceHandle method = CreateMethodBase(Oms.GetInstance(KnownInstanceGuids.MethodClasses.GetAttributeBySystemRoutineMethod), forClassInstance, verb, name, accessModifier, isStatic, globalIdentifier);
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Get_Attribute_by_System_Routine_Method__returns__Attribute), returnsAttribute);
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Get_Attribute_by_System_Routine_Method__uses__System_Attribute_Routine), usesSystemAttributeRoutine.Handle);
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Get_Attribute_by_System_Routine_Method__uses__System_Attribute_Routine), usesSystemAttributeRoutine.GetHandle());
return new GetAttributeBySystemRoutineMethod(method);
}
@ -147,14 +147,14 @@ public class OmsMethodBuilder
public GetInstanceSetBySystemRoutineMethod CreateGetInstanceSetBySystemRoutineMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, Guid globalIdentifier, WorkSet returnsWorkSet, SystemInstanceSetRoutine usesSystemInstanceSetRoutine)
{
InstanceHandle method = CreateMethodBase(Oms.GetInstance(KnownInstanceGuids.MethodClasses.GetAttributeBySystemRoutineMethod), forClassInstance, verb, name, accessModifier, isStatic, globalIdentifier);
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Get_Instance_Set_by_System_Routine_Method__returns__Work_Set), returnsWorkSet.Handle);
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Get_Instance_Set_by_System_Routine_Method__uses__System_Instance_Set_Routine), usesSystemInstanceSetRoutine.Handle);
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Get_Instance_Set_by_System_Routine_Method__returns__Work_Set), returnsWorkSet.GetHandle());
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Get_Instance_Set_by_System_Routine_Method__uses__System_Instance_Set_Routine), usesSystemInstanceSetRoutine.GetHandle());
return new GetInstanceSetBySystemRoutineMethod(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);
return CreateAssignAttributeMethod(forClassInstance, verb, name, accessModifier, isStatic, assignsFromExecutableReturningAttribute.GetHandle(), assignsToAttribute);
}
public AssignAttributeMethod CreateAssignAttributeMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, InstanceHandle assignsFromExecutableReturningAttribute, InstanceHandle assignsToAttribute)
{
@ -164,6 +164,14 @@ public class OmsMethodBuilder
return new AssignAttributeMethod(method);
}
public GetRelationshipMethod CreateGetRelationshipMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, Relationship returnsRelationship, bool singular = false)
{
return CreateGetRelationshipMethod(forClassInstance, verb, name, accessModifier, isStatic, Guid.NewGuid(), returnsRelationship.GetHandle(), singular);
}
public GetRelationshipMethod CreateGetRelationshipMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, Guid globalIdentifier, Relationship returnsRelationship, bool singular = false)
{
return CreateGetRelationshipMethod(forClassInstance, verb, name, accessModifier, isStatic, globalIdentifier, returnsRelationship.GetHandle(), singular);
}
public GetRelationshipMethod CreateGetRelationshipMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, InstanceHandle returnsRelationship, bool singular = false)
{
return CreateGetRelationshipMethod(forClassInstance, verb, name, accessModifier, isStatic, Guid.NewGuid(), returnsRelationship, singular);
@ -178,7 +186,7 @@ public class OmsMethodBuilder
public GetReferencedAttributeMethod CreateGetReferencedAttributeMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, InstanceHandle returnsAttribute, IExecutableReturningInstanceSet usesReferenceInstanceSet, IExecutableReturningAttribute usesAnswerExecutableReturningAttribute, InstanceHandle? usesAccumulationFunction = null, InstanceHandle? usesOrderExecutableReturningAttribute = null)
{
return CreateGetReferencedAttributeMethod(forClassInstance, verb, name, accessModifier, isStatic, returnsAttribute, usesReferenceInstanceSet.Handle, usesAnswerExecutableReturningAttribute.Handle, usesAccumulationFunction, usesOrderExecutableReturningAttribute);
return CreateGetReferencedAttributeMethod(forClassInstance, verb, name, accessModifier, isStatic, returnsAttribute, usesReferenceInstanceSet.GetHandle(), usesAnswerExecutableReturningAttribute.GetHandle(), usesAccumulationFunction, usesOrderExecutableReturningAttribute);
}
public GetReferencedAttributeMethod CreateGetReferencedAttributeMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, InstanceHandle returnsAttribute, InstanceHandle usesReferenceInstanceSet, InstanceHandle usesAnswerExecutableReturningAttribute, InstanceHandle? usesAccumulationFunction = null, InstanceHandle? usesOrderExecutableReturningAttribute = null)
{
@ -199,7 +207,7 @@ public class OmsMethodBuilder
public SelectFromInstanceSetMethod CreateSelectFromInstanceSetMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, WorkSet returnsWorkSet, InstanceWrapper usesExecutableReturningInstanceSet, InstanceHandle? usesSetFunction = null, InstanceHandle? usesSelectionFunction = null, InstanceHandle? usesOrderExecutableReturningAttribute = null)
{
return CreateSelectFromInstanceSetMethod(forClassInstance, verb, name, accessModifier, isStatic, returnsWorkSet.Handle, usesExecutableReturningInstanceSet.Handle, usesSetFunction, usesSelectionFunction, usesOrderExecutableReturningAttribute);
return CreateSelectFromInstanceSetMethod(forClassInstance, verb, name, accessModifier, isStatic, returnsWorkSet.GetHandle(), usesExecutableReturningInstanceSet.GetHandle(), usesSetFunction, usesSelectionFunction, usesOrderExecutableReturningAttribute);
}
public SelectFromInstanceSetMethod CreateSelectFromInstanceSetMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, InstanceHandle returnsWorkSet, InstanceHandle usesExecutableReturningInstanceSet, InstanceHandle? usesSetFunction = null, InstanceHandle? usesSelectionFunction = null, InstanceHandle? usesOrderExecutableReturningAttribute = null)
{
@ -237,9 +245,9 @@ public class OmsMethodBuilder
List<InstanceHandle> cases2 = new List<InstanceHandle>();
foreach (InstanceWrapper wrapper in cases)
{
cases2.Add(wrapper.Handle);
cases2.Add(wrapper.GetHandle());
}
return CreateConditionalSelectFromInstanceSetMethod(forClassInstance, verb, name, accessModifier, isStatic, returnsWorkSet.Handle, cases2.ToArray(), usesSetFunction, usesSelectionFunction, usesOrderExecutableReturningAttribute);
return CreateConditionalSelectFromInstanceSetMethod(forClassInstance, verb, name, accessModifier, isStatic, returnsWorkSet.GetHandle(), cases2.ToArray(), usesSetFunction, usesSelectionFunction, usesOrderExecutableReturningAttribute);
}
public ConditionalSelectFromInstanceSetMethod CreateConditionalSelectFromInstanceSetMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, InstanceHandle returnsWorkSet, InstanceHandle[] cases, InstanceHandle? usesSetFunction = null, InstanceHandle? usesSelectionFunction = null, InstanceHandle? usesOrderExecutableReturningAttribute = null)
{
@ -307,13 +315,13 @@ public class OmsMethodBuilder
Oms.AssignRelationship(ih, Oms.GetInstance(KnownRelationshipGuids.Condition_Group__has_false_condition__Executable_returning_Work_Data), falseConditions);
}
Oms.AssignRelationship(ih, Oms.GetInstance(KnownRelationshipGuids.Conditional_Select_Attribute_Case__invokes__Executable_returning_Attribute), sacCase.UsesExecutableReturningAttribute.Handle);
Oms.AssignRelationship(ih, Oms.GetInstance(KnownRelationshipGuids.Conditional_Select_Attribute_Case__invokes__Executable_returning_Attribute), sacCase.UsesExecutableReturningAttribute.GetHandle());
return ih;
}
public EvaluateBooleanExpressionMethod CreateEvaluateBooleanExpressionMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, InstanceHandle returnsAttribute, IInstanceWrapper sourceWorkData, BooleanOperator booleanOperator, IInstanceWrapper compareToWorkData = null)
public EvaluateBooleanExpressionMethod CreateEvaluateBooleanExpressionMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, InstanceHandle returnsAttribute, IInstanceReference sourceWorkData, BooleanOperator booleanOperator, IInstanceReference compareToWorkData = null)
{
return CreateEvaluateBooleanExpressionMethod(forClassInstance, verb, name, accessModifier, isStatic, returnsAttribute, sourceWorkData.Handle, booleanOperator, compareToWorkData?.Handle);
return CreateEvaluateBooleanExpressionMethod(forClassInstance, verb, name, accessModifier, isStatic, returnsAttribute, sourceWorkData.GetHandle(), booleanOperator, compareToWorkData?.GetHandle());
}
public EvaluateBooleanExpressionMethod CreateEvaluateBooleanExpressionMethod(InstanceHandle forClassInstance, string verb, string name, AccessModifier accessModifier, bool isStatic, InstanceHandle returnsAttribute, InstanceHandle sourceWorkData, BooleanOperator booleanOperator, InstanceHandle? compareToWorkData)
@ -321,7 +329,7 @@ public class OmsMethodBuilder
InstanceHandle method = CreateMethodBase(Oms.GetInstance(KnownInstanceGuids.MethodClasses.EvaluateBooleanExpressionMethod), forClassInstance, verb, name, accessModifier, isStatic);
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Evaluate_Boolean_Expression_Method__returns__Boolean_Attribute), returnsAttribute);
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Evaluate_Boolean_Expression_Method__has_source__Executable_returning_Work_Data), sourceWorkData);
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Evaluate_Boolean_Expression_Method__uses__Boolean_Operator), booleanOperator.Handle);
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Evaluate_Boolean_Expression_Method__uses__Boolean_Operator), booleanOperator.GetHandle());
if (compareToWorkData.HasValue)
{
Oms.AssignRelationship(method, Oms.GetInstance(KnownRelationshipGuids.Evaluate_Boolean_Expression_Method__has_target__Executable_returning_Work_Data), compareToWorkData.Value);
@ -353,13 +361,13 @@ public class OmsMethodBuilder
{
Oms.AssignRelationship(method, r_Control_Transaction_Method__processes__Element, processesElement);
}
Oms.AssignRelationship(method, r_Control_Transaction_Method__uses__Build_Response_Method_Binding, usesBuildResponseMethodBinding.Handle);
Oms.AssignRelationship(method, r_Control_Transaction_Method__uses__Build_Response_Method_Binding, usesBuildResponseMethodBinding.GetHandle());
return new ControlTransactionMethod(method);
}
public void AddConditionalSelectAttributeCase(ConditionalSelectAttributeMethod method, ConditionalSelectAttributeCase cas)
{
InstanceHandle ihCase = CreateConditionalSelectAttributeCase(cas);
Oms.AssignRelationship(method.Handle, Oms.GetInstance(KnownRelationshipGuids.Conditional_Select_Attribute_Method__has__Conditional_Select_Attribute_Case), ihCase);
Oms.AssignRelationship(method.GetHandle(), Oms.GetInstance(KnownRelationshipGuids.Conditional_Select_Attribute_Method__has__Conditional_Select_Attribute_Case), ihCase);
}
}

View File

@ -0,0 +1,12 @@
using System;
namespace Mocha.Core.Oop;
public class Class : ConcreteInstanceWrapper
{
public Class(InstanceHandle h) : base(h)
{
}
public override Guid ClassId => KnownInstanceGuids.Classes.Class;
}

View File

@ -19,7 +19,6 @@ namespace Mocha.Core.Oop;
public abstract class ConcreteInstanceWrapper : InstanceWrapper
{
private InstanceHandle TheHandle { get; }
internal ConcreteInstanceWrapper(InstanceHandle handle)
{
@ -60,9 +59,29 @@ public abstract class ConcreteInstanceWrapper : InstanceWrapper
}
return null;
}
internal static T? Wrap<T>(Oms oms, InstanceHandle methodInstance) where T : ConcreteInstanceWrapper
{
ConcreteInstanceWrapper? cc = Wrap(oms, methodInstance);
if (cc is T)
{
return (T)cc;
}
return null;
}
public override string ToString()
{
return TheHandle.ToString();
}
protected virtual void UpdateInternal(Oms oms) { }
/// <summary>
/// Updates the details in this language binding object to match the values in the OMS.
/// </summary>
/// <param name="oms"></param>
internal void Update(Oms oms)
{
UpdateInternal(oms);
}
}

View File

@ -19,11 +19,11 @@ namespace Mocha.Core.Oop;
public abstract class ConditionGroup
{
public IInstanceWrapper[] TrueConditions { get; }
public IInstanceWrapper[] FalseConditions { get; }
public IInstanceReference[] TrueConditions { get; }
public IInstanceReference[] FalseConditions { get; }
public bool UseAnyCondition { get; set; } = false;
public ConditionGroup(IInstanceWrapper[] trueConditions, IInstanceWrapper[] falseConditions, bool useAnyCondition)
public ConditionGroup(IInstanceReference[] trueConditions, IInstanceReference[] falseConditions, bool useAnyCondition)
{
TrueConditions = trueConditions;
FalseConditions = falseConditions;

View File

@ -17,7 +17,7 @@
namespace Mocha.Core.Oop;
public interface IExecutableReturningAttribute : IInstanceWrapper
public interface IExecutableReturningAttribute : IInstanceReference
{
}

View File

@ -17,7 +17,7 @@
namespace Mocha.Core.Oop;
public interface IExecutableReturningElement : IInstanceWrapper
public interface IExecutableReturningElement : IInstanceReference
{
}

View File

@ -17,7 +17,7 @@
namespace Mocha.Core.Oop;
public interface IExecutableReturningInstanceSet : IInstanceWrapper
public interface IExecutableReturningInstanceSet : IInstanceReference
{
}

View File

@ -17,13 +17,19 @@
namespace Mocha.Core.Oop;
public interface IInstanceWrapper
public abstract class InstanceWrapper : IInstanceReference
{
InstanceHandle Handle { get; }
public virtual Guid ClassId { get; }
protected abstract InstanceHandle GetHandleInternal();
public InstanceHandle GetHandle()
{
return GetHandleInternal();
}
}
public static class InstanceWrapperArrayExtensions
{
public static InstanceHandle[] ToInstanceHandleArray(this IInstanceWrapper[] z)
public static InstanceHandle[] ToInstanceHandleArray(this IInstanceReference[] z)
{
if (z == null)
{
@ -33,7 +39,7 @@ public static class InstanceWrapperArrayExtensions
InstanceHandle[] array = new InstanceHandle[z.Length];
for (int i = 0; i < z.Length; i++)
{
array[i] = z[i].Handle;
array[i] = z[i].GetHandle();
}
return array;
}

View File

@ -1,47 +0,0 @@
// Copyright (C) 2024 Michael Becker <alcexhim@gmail.com>
//
// This file is part of Mocha.NET.
//
// Mocha.NET is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Mocha.NET is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Mocha.NET. If not, see <https://www.gnu.org/licenses/>.
namespace Mocha.Core.Oop;
public abstract class InstanceWrapper : IInstanceWrapper
{
public abstract Guid ClassId { get; }
private InstanceHandle _Handle = InstanceHandle.Empty;
protected abstract InstanceHandle GetHandleInternal();
public InstanceHandle Handle
{
get
{
if (_Handle == InstanceHandle.Empty)
{
_Handle = GetHandleInternal();
}
return _Handle;
}
}
public override bool Equals(object? obj)
{
if (obj is InstanceWrapper)
{
return Handle.Equals(((InstanceWrapper)obj).Handle);
}
return base.Equals(obj);
}
}

View File

@ -46,7 +46,7 @@ public abstract class Method : ConcreteInstanceWrapper
}
else if (kvp.Value is InstanceWrapper)
{
assignsFromWorkData = ((InstanceWrapper)kvp.Value).Handle;
assignsFromWorkData = ((InstanceWrapper)kvp.Value).GetHandle();
}
oms.AssignRelationship(parm, r_Parameter_Assignment__assigns_to__Work_Data, assignsToParm);
@ -54,7 +54,7 @@ public abstract class Method : ConcreteInstanceWrapper
parms.Add(parm);
}
oms.AssignRelationship(mb.Handle, r_Method_Binding__has__Parameter_Assignment, parms.ToArray());
oms.AssignRelationship(mb.GetHandle(), r_Method_Binding__has__Parameter_Assignment, parms.ToArray());
}
}
}

View File

@ -0,0 +1,12 @@
using System;
namespace Mocha.Core.Oop;
public class Relationship : ConcreteInstanceWrapper
{
public Relationship(InstanceHandle handle) : base(handle)
{
}
public override Guid ClassId => KnownInstanceGuids.Classes.Relationship;
}

View File

@ -1,34 +0,0 @@
// Copyright (C) 2024 Michael Becker <alcexhim@gmail.com>
//
// This file is part of Mocha.NET.
//
// Mocha.NET is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Mocha.NET is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Mocha.NET. If not, see <https://www.gnu.org/licenses/>.
using System;
using System.Collections.Generic;
namespace Mocha.Core
{
public class Relationship
{
public Relationship(InstanceHandle sourceInstance, InstanceHandle relationshipInstance)
{
SourceInstance = sourceInstance;
RelationshipInstance = relationshipInstance;
}
public InstanceHandle SourceInstance { get; }
public InstanceHandle RelationshipInstance { get; }
}
}

View File

@ -3,6 +3,7 @@ using System.Runtime.InteropServices;
using System.Text;
using Microsoft.VisualBasic;
using Mocha.Core;
using Mocha.Core.Oop;
using Mocha.Zq.Expressions;
using Mocha.Zq.Methods;
@ -32,7 +33,7 @@ public class ZqIntegrator
{
if (obj is ZqClass zql)
{
InstanceHandle ih = OMS.CreateClass(zql.Name);
Class ih = OMS.CreateClass(zql.Name);
if (zql.InstanceKey != InstanceKey.Empty)
{
if (zql.InstanceKey.ClassIndex == 1)
@ -80,14 +81,14 @@ public class ZqIntegrator
}
}
OMS.MethodBuilder.CreateGetSpecifiedInstancesMethod(ih, null, meth.Name, ws, list.ToArray());
OMS.MethodBuilder.CreateGetSpecifiedInstancesMethod(ih.GetHandle(), null, meth.Name, ws, list.ToArray());
}
else if (gsi.ReturnValue is ZqVariableReference)
{
object r = ResolveVariable(ih, ((ZqVariableReference)gsi.ReturnValue).Name);
if (r is InstanceHandle ihret)
{
OMS.MethodBuilder.CreateGetSpecifiedInstancesMethod(ih, null, meth.Name, ws, ihret);
OMS.MethodBuilder.CreateGetSpecifiedInstancesMethod(ih.GetHandle(), null, meth.Name, ws, ihret);
}
}
}
@ -97,7 +98,7 @@ public class ZqIntegrator
return null;
}
private object ResolveVariable(InstanceHandle parentClassInstance, string name)
private object ResolveVariable(Class parentClassInstance, string name)
{
InstanceHandle ihret = OMS.GetInstanceByName(parentClassInstance, name);
if (ihret != InstanceHandle.Empty)

View File

@ -1,11 +1,12 @@
using System;
using Mocha.Core.Oop;
using Newtonsoft.Json.Serialization;
namespace Mocha.Core.Tests;
public class DerivedInstanceTests : OmsTestsBase
{
InstanceHandle TEST_CLASS_DERIVED;
Class TEST_CLASS_DERIVED;
protected override void AfterSetup()
{
base.AfterSetup();

View File

@ -15,10 +15,6 @@
// You should have received a copy of the GNU General Public License
// along with Mocha.NET. If not, see <https://www.gnu.org/licenses/>.
using System.Runtime.CompilerServices;
using Mocha.Core.OmsImplementations.Mini;
namespace Mocha.Core.Tests;
[TestFixture]

View File

@ -15,10 +15,6 @@
// You should have received a copy of the GNU General Public License
// along with Mocha.NET. If not, see <https://www.gnu.org/licenses/>.
using System.Runtime.CompilerServices;
using Mocha.Core.OmsImplementations;
using Mocha.Core.OmsImplementations.Mini;
namespace Mocha.Core.Tests;
[TestFixture]

View File

@ -1,9 +1,3 @@
using System.ComponentModel.DataAnnotations;
using Mocha.Core.OmsImplementations.Mini;
using Mocha.Core.Oop;
using Mocha.Core.Oop.Methods;
namespace Mocha.Core.Tests;
public class CalculateDateMethodTests : MethodTestsBase

View File

@ -41,13 +41,13 @@ public class EvaluateBooleanExpressionMethodTests : MethodTestsBase
Assert.That(pclass, Is.EqualTo(Oms.GetInstance(KnownInstanceGuids.MethodClasses.GetRelationshipMethod)));
EvaluateBooleanExpressionMethod Method__is__Conditional_Select_Attribute_Method = methodBuilder.CreateEvaluateBooleanExpressionMethod(c_Method, "is", "SAC", AccessModifier.Public, false, Oms.GetInstance(KnownAttributeGuids.Boolean.MethodIsOfTypeSpecified), Instance__get__Parent_Class_rsmb.Handle, RelationalOperator.InSelectionList, Oms.GetInstance(KnownInstanceGuids.MethodClasses.ConditionalSelectAttributeMethod));
EvaluateBooleanExpressionMethod Method__is__Conditional_Select_Attribute_Method = methodBuilder.CreateEvaluateBooleanExpressionMethod(c_Method, "is", "SAC", AccessModifier.Public, false, Oms.GetInstance(KnownAttributeGuids.Boolean.MethodIsOfTypeSpecified), Instance__get__Parent_Class_rsmb.GetHandle(), RelationalOperator.InSelectionList, Oms.GetInstance(KnownInstanceGuids.MethodClasses.ConditionalSelectAttributeMethod));
ReturnAttributeMethodBinding Method__is__Conditional_Select_Attribute_Method_ramb = Method__is__Conditional_Select_Attribute_Method.CreateMethodBinding(Oms);
EvaluateBooleanExpressionMethod Method__is__Get_Relationship_Method = methodBuilder.CreateEvaluateBooleanExpressionMethod(c_Method, "is", "GR", AccessModifier.Public, false, Oms.GetInstance(KnownAttributeGuids.Boolean.MethodIsOfTypeSpecified), Instance__get__Parent_Class_rsmb.Handle, RelationalOperator.InSelectionList, Oms.GetInstance(KnownInstanceGuids.MethodClasses.GetRelationshipMethod));
EvaluateBooleanExpressionMethod Method__is__Get_Relationship_Method = methodBuilder.CreateEvaluateBooleanExpressionMethod(c_Method, "is", "GR", AccessModifier.Public, false, Oms.GetInstance(KnownAttributeGuids.Boolean.MethodIsOfTypeSpecified), Instance__get__Parent_Class_rsmb.GetHandle(), RelationalOperator.InSelectionList, Oms.GetInstance(KnownInstanceGuids.MethodClasses.GetRelationshipMethod));
ReturnAttributeMethodBinding Method__is__Get_Relationship_Method_ramb = Method__is__Get_Relationship_Method.CreateMethodBinding(Oms);
context.SetWorkData(Oms.GetInstance(KnownInstanceGuids.Classes.Method), Instance__get__Parent_Class.Handle);
context.SetWorkData(Oms.GetInstance(KnownInstanceGuids.Classes.Method), Instance__get__Parent_Class.GetHandle());
InstanceHandle workData = Oms.Execute(context, Method__is__Conditional_Select_Attribute_Method_ramb);
object? value = context.GetWorkData(workData);
@ -74,13 +74,13 @@ public class EvaluateBooleanExpressionMethodTests : MethodTestsBase
InstanceHandle pclass = (InstanceHandle) context.GetWorkData(wsRet);
Assert.That(pclass, Is.EqualTo(Oms.GetInstance(KnownInstanceGuids.MethodClasses.GetRelationshipMethod)));
EvaluateBooleanExpressionMethod Method__is__Conditional_Select_Attribute_Method = methodBuilder.CreateEvaluateBooleanExpressionMethod(c_Method, "is", "SAC", AccessModifier.Public, false, Oms.GetInstance(KnownAttributeGuids.Boolean.MethodIsOfTypeSpecified), Instance__get__Parent_Class_rsmb.Handle, RelationalOperator.InSelectionList, Oms.GetInstance(KnownInstanceGuids.MethodClasses.ConditionalSelectAttributeMethod));
EvaluateBooleanExpressionMethod Method__is__Conditional_Select_Attribute_Method = methodBuilder.CreateEvaluateBooleanExpressionMethod(c_Method, "is", "SAC", AccessModifier.Public, false, Oms.GetInstance(KnownAttributeGuids.Boolean.MethodIsOfTypeSpecified), Instance__get__Parent_Class_rsmb.GetHandle(), RelationalOperator.InSelectionList, Oms.GetInstance(KnownInstanceGuids.MethodClasses.ConditionalSelectAttributeMethod));
ReturnAttributeMethodBinding Method__is__Conditional_Select_Attribute_Method_ramb = Method__is__Conditional_Select_Attribute_Method.CreateMethodBinding(Oms);
EvaluateBooleanExpressionMethod Method__is__Get_Relationship_Method = methodBuilder.CreateEvaluateBooleanExpressionMethod(c_Method, "is", "GR", AccessModifier.Public, false, Oms.GetInstance(KnownAttributeGuids.Boolean.MethodIsOfTypeSpecified), Instance__get__Parent_Class_rsmb.Handle, RelationalOperator.InSelectionList, Oms.GetInstance(KnownInstanceGuids.MethodClasses.GetRelationshipMethod));
EvaluateBooleanExpressionMethod Method__is__Get_Relationship_Method = methodBuilder.CreateEvaluateBooleanExpressionMethod(c_Method, "is", "GR", AccessModifier.Public, false, Oms.GetInstance(KnownAttributeGuids.Boolean.MethodIsOfTypeSpecified), Instance__get__Parent_Class_rsmb.GetHandle(), RelationalOperator.InSelectionList, Oms.GetInstance(KnownInstanceGuids.MethodClasses.GetRelationshipMethod));
ReturnAttributeMethodBinding Method__is__Get_Relationship_Method_ramb = Method__is__Get_Relationship_Method.CreateMethodBinding(Oms);
context.SetWorkData(Oms.GetInstance(KnownInstanceGuids.Classes.Method), Instance__get__Parent_Class.Handle);
context.SetWorkData(Oms.GetInstance(KnownInstanceGuids.Classes.Method), Instance__get__Parent_Class.GetHandle());
InstanceHandle workData = Oms.Execute(context, Method__is__Get_Relationship_Method_ramb);
object? value = context.GetWorkData(workData);

View File

@ -24,7 +24,7 @@ public class GetReferencedAttributeTests : MethodTestsBase
{
protected InstanceHandle c_Nurse, c_Patient;
protected InstanceHandle a_Name, a_Acuity;
protected InstanceHandle r_Nurse__has__Patient, r_Patient__for__Nurse;
protected Relationship r_Nurse__has__Patient, r_Patient__for__Nurse;
protected override void AfterSetup()
{

View File

@ -150,7 +150,7 @@ public class GetRelationshipTests : MethodTestsBase
object? oih = context.GetWorkData(ihResult);
if (Oms.TryGetSingularInstance(oih, out InstanceHandle ih))
{
InstanceHandle ihRealParent = Oms.GetParentClass(sac.Handle);
InstanceHandle ihRealParent = Oms.GetParentClass(sac);
Assert.That(ih, Is.EqualTo(ihRealParent));
}
else

View File

@ -1,5 +1,6 @@
using System;
using Mocha.Core.Oop;
using Mocha.Core.Oop.Methods;
namespace Mocha.Core.Tests.MethodTests;
@ -12,9 +13,9 @@ public class MethodBindingTests : MethodTestsBase
InstanceHandle c_MethodBinding = Oms.GetInstance(KnownInstanceGuids.Classes.MethodBinding);
WorkSet ws_1 = Oms.CreateWorkSet("Test Work Set 1");
MethodReturningInstanceSet dummy = mb.CreateGetSpecifiedInstancesMethod(c_TestClass, "get", "Test Class", ws_1, new InstanceHandle[] { c_TestClass });
MethodReturningInstanceSet dummy = mb.CreateGetSpecifiedInstancesMethod(c_TestClass.GetHandle(), "get", "Test Class", ws_1, new InstanceHandle[] { c_TestClass.GetHandle() });
InstanceHandle handle = mb.CreateReturnInstanceSetMethodBinding(dummy).Handle;
InstanceHandle handle = mb.CreateReturnInstanceSetMethodBinding(dummy).GetHandle();
Assert.That(Oms.IsInstanceOf(handle, c_MethodBinding));
}
[Test]
@ -24,9 +25,9 @@ public class MethodBindingTests : MethodTestsBase
InstanceHandle c_MethodBinding = Oms.GetInstance(KnownInstanceGuids.Classes.MethodBinding);
InstanceHandle a_Text = Oms.GetInstance(KnownAttributeGuids.Text.Value);
MethodReturningAttribute dummy = mb.CreateGetAttributeMethod(c_TestClass, "get", "Test Attribute", a_Text);
MethodReturningAttribute dummy = mb.CreateGetAttributeMethod(c_TestClass.GetHandle(), "get", "Test Attribute", a_Text);
InstanceHandle handle = mb.CreateReturnAttributeMethodBinding(dummy).Handle;
InstanceHandle handle = mb.CreateReturnAttributeMethodBinding(dummy).GetHandle();
Assert.That(Oms.IsInstanceOf(handle, c_MethodBinding));
}
[Test]
@ -51,9 +52,9 @@ public class MethodBindingTests : MethodTestsBase
InstanceHandle c_MethodBinding = Oms.GetInstance(KnownInstanceGuids.Classes.MethodBinding);
InstanceHandle a_Text = Oms.GetInstance(KnownAttributeGuids.Text.Value);
MethodBuildingResponse dummy = mb.CreateBuildUIResponseMethod(c_TestClass, "get", "Test Attribute", AccessModifier.Public, false, InstanceHandle.Empty);
MethodBuildingResponse dummy = mb.CreateBuildUIResponseMethod(c_TestClass.GetHandle(), "get", "Test Attribute", AccessModifier.Public, false, InstanceHandle.Empty);
InstanceHandle handle = mb.CreateBuildResponseMethodBinding(dummy).Handle;
InstanceHandle handle = mb.CreateBuildResponseMethodBinding(dummy).GetHandle();
Assert.That(Oms.IsInstanceOf(handle, c_MethodBinding));
}
[Test]
@ -105,20 +106,20 @@ public class MethodBindingTests : MethodTestsBase
[Test]
public void Method_Binding__uses_super__Return_Instance_Set_Method_Binding()
{
InstanceHandle c_OMS = Oms.GetInstance(KnownInstanceGuids.Classes.OMS);
Class c_OMS = Oms.GetInstance<Class>(KnownInstanceGuids.Classes.OMS);
InstanceHandle i_OMS = Oms.CreateInstanceOf(c_OMS);
InstanceHandle i_OMS2 = Oms.CreateInstanceOf(c_OMS);
WorkSet ws = Oms.CreateWorkSet("Singleton OMS");
Oop.Methods.GetSpecifiedInstancesMethod m1 = Oms.MethodBuilder.CreateGetSpecifiedInstancesMethod(c_OMS, "get", "Singleton", ws, new InstanceHandle[] { i_OMS });
GetSpecifiedInstancesMethod m1 = Oms.MethodBuilder.CreateGetSpecifiedInstancesMethod(c_OMS.GetHandle(), "get", "Singleton", ws, new InstanceHandle[] { i_OMS });
ReturnInstanceSetMethodBinding rsmb1 = m1.CreateMethodBinding(Oms);
Oop.Methods.GetSpecifiedInstancesMethod m2 = Oms.MethodBuilder.CreateGetSpecifiedInstancesMethod(c_OMS, "get", "Singleton 2", ws, new InstanceHandle[] { i_OMS2 });
GetSpecifiedInstancesMethod m2 = Oms.MethodBuilder.CreateGetSpecifiedInstancesMethod(c_OMS.GetHandle(), "get", "Singleton 2", ws, new InstanceHandle[] { i_OMS2 });
ReturnInstanceSetMethodBinding rsmb2 = m2.CreateMethodBinding(Oms);
ReturnInstanceSetMethodBinding rsmb3 = m2.CreateMethodBinding(Oms);
Oms.AssignRelationship(rsmb3.Handle, Oms.GetInstance(KnownRelationshipGuids.Method_Binding__uses_super__Return_Instance_Set_Method_Binding), rsmb1.Handle);
Oms.AssignRelationship(rsmb3, Oms.GetInstance<Relationship>(KnownRelationshipGuids.Method_Binding__uses_super__Return_Instance_Set_Method_Binding), rsmb1);
OmsContext context = Oms.CreateContext();
InstanceHandle valWS = Oms.Execute(context, rsmb3);

View File

@ -37,7 +37,7 @@ public class SelectFromInstanceSetMethodTests : MethodTestsBase
OmsMethodBuilder methodBuilder = new OmsMethodBuilder(Oms);
GetAttributeMethod get_Order = methodBuilder.CreateGetAttributeMethod(c_AccessModifier, "get", "Order", a_Order);
SelectFromInstanceSetMethod m_Access_Modifier__get__Most_Restrictive_from_Set = methodBuilder.CreateSelectFromInstanceSetMethod(c_AccessModifier, "get", "Most Restrictive from Set", AccessModifier.Public, true, ws_Access_Modifier__Singular, ws_Access_Modifier__Nonsingular, null, Oms.GetInstance(KnownInstanceGuids.SelectionFunctions.Minimum), get_Order.Handle);
SelectFromInstanceSetMethod m_Access_Modifier__get__Most_Restrictive_from_Set = methodBuilder.CreateSelectFromInstanceSetMethod(c_AccessModifier, "get", "Most Restrictive from Set", AccessModifier.Public, true, ws_Access_Modifier__Singular, ws_Access_Modifier__Nonsingular, null, Oms.GetInstance(KnownInstanceGuids.SelectionFunctions.Minimum), get_Order.GetHandle());
if (m_Access_Modifier__get__Most_Restrictive_from_Set != null)
{
@ -56,7 +56,7 @@ public class SelectFromInstanceSetMethodTests : MethodTestsBase
object? value = context.GetWorkData(workData);
Assert.That(value is InstanceHandle);
Assert.That((InstanceHandle?)value, Is.EqualTo(AccessModifier.Private.Handle));
Assert.That((InstanceHandle?)value, Is.EqualTo(AccessModifier.Private.GetHandle()));
}
}
}

View File

@ -15,11 +15,7 @@
// You should have received a copy of the GNU General Public License
// along with Mocha.NET. If not, see <https://www.gnu.org/licenses/>.
using System.ComponentModel.DataAnnotations;
using System.Security.Principal;
using Mocha.Core.OmsImplementations.Mini;
using Mocha.Core.Oop;
using Mocha.Core.Oop.Methods;
namespace Mocha.Core.Tests;
@ -30,18 +26,18 @@ public abstract class MethodTestsBase : OmsTestsBase
Guid gid_r_Test_Class__has_multiple__Test_Class_2 = new Guid("{a5b67aad-e46f-4673-b339-77417396b2fe}");
Guid gid_r_Test_Class_2__multiple_for__Test_Class = new Guid("{2864dfd9-0313-4801-96bf-b9be99ea172d}");
protected InstanceHandle c_TestClass, c_TestClass2;
protected InstanceHandle r_Test_Class__has__Test_Class_2, r_Test_Class_2__for__Test_Class;
protected InstanceHandle r_Test_Class__has_multiple__Test_Class_2, r_Test_Class_2__multiple_for__Test_Class;
protected Class c_TestClass, c_TestClass2;
protected Relationship r_Test_Class__has__Test_Class_2, r_Test_Class_2__for__Test_Class;
protected Relationship r_Test_Class__has_multiple__Test_Class_2, r_Test_Class_2__multiple_for__Test_Class;
protected override void AfterSetup()
{
base.AfterSetup();
c_TestClass = Oms.GetInstance(TEST_CLASS_GUID);
c_TestClass2 = Oms.GetInstance(TEST_CLASS2_GUID);
c_TestClass = Oms.GetInstance<Class>(TEST_CLASS_GUID);
c_TestClass2 = Oms.GetInstance<Class>(TEST_CLASS2_GUID);
r_Test_Class__has__Test_Class_2 = Oms.CreateRelationship(c_TestClass, "has", c_TestClass2, gid_r_Test_Class__has__Test_Class_2, true, "for", gid_r_Test_Class_2__for__Test_Class, out r_Test_Class_2__for__Test_Class);
r_Test_Class__has_multiple__Test_Class_2 = Oms.CreateRelationship(c_TestClass, "has multiple", c_TestClass2, gid_r_Test_Class__has_multiple__Test_Class_2, false, "multiple for", gid_r_Test_Class_2__multiple_for__Test_Class, out r_Test_Class_2__multiple_for__Test_Class);
r_Test_Class__has__Test_Class_2 = Oms.CreateRelationship(c_TestClass.GetHandle(), "has", c_TestClass2.GetHandle(), gid_r_Test_Class__has__Test_Class_2, true, "for", gid_r_Test_Class_2__for__Test_Class, out r_Test_Class_2__for__Test_Class);
r_Test_Class__has_multiple__Test_Class_2 = Oms.CreateRelationship(c_TestClass.GetHandle(), "has multiple", c_TestClass2.GetHandle(), gid_r_Test_Class__has_multiple__Test_Class_2, false, "multiple for", gid_r_Test_Class_2__multiple_for__Test_Class, out r_Test_Class_2__multiple_for__Test_Class);
}
}

View File

@ -15,7 +15,7 @@
// You should have received a copy of the GNU General Public License
// along with Mocha.NET. If not, see <https://www.gnu.org/licenses/>.
using Mocha.Core.OmsImplementations.Mini;
using Mocha.Core.Oop;
namespace Mocha.Core.Tests;
@ -70,8 +70,8 @@ public abstract class OmsTestsBase
InstanceHandle irTestNumericAttribute = Oms.CreateInstanceOf(Oms.GetInstance(KnownInstanceGuids.Classes.NumericAttribute), TEST_ATTR_NUM_GUID);
Assert.That(irTestNumericAttribute, Is.Not.EqualTo(InstanceHandle.Empty));
InstanceHandle irTestRelationship = Oms.CreateRelationship(irTestClass, "has", irTestClass2, TEST_REL_GUID, true, "for", TEST_REL2_GUID);
Assert.That(irTestRelationship, Is.Not.EqualTo(InstanceHandle.Empty));
Relationship? irTestRelationship = Oms.CreateRelationship(irTestClass, "has", irTestClass2, TEST_REL_GUID, true, "for", TEST_REL2_GUID);
Assert.That(irTestRelationship, Is.Not.Null);
AfterSetup();
}

View File

@ -16,7 +16,7 @@
// along with Mocha.NET. If not, see <https://www.gnu.org/licenses/>.
using Mocha.Core.OmsImplementations.Mini;
using Mocha.Core.Oop;
namespace Mocha.Core.Tests;
@ -27,10 +27,10 @@ public class RelationshipTests : OmsTestsBase
protected readonly Guid TEST_REL5_GUID = new Guid("{b80995cf-6a2d-44c2-9c93-ebb80c9be802}");
protected readonly Guid TEST_REL6_GUID = new Guid("{f5f53839-b47c-42e4-944e-e8fa0bfa9779}");
private InstanceHandle c_TestClass, c_TestClass2;
private Class c_TestClass, c_TestClass2;
private InstanceHandle c_TestClassInstance;
private InstanceHandle c_TestClass2Instance1, c_TestClass2Instance2;
private InstanceHandle r_Test_Class__has_single__Test_Class_2, r_Test_Class__has_multiple__Test_Class_2, r_Test_Class_2__single_for__Test_Class;
private Relationship r_Test_Class__has_single__Test_Class_2, r_Test_Class__has_multiple__Test_Class_2, r_Test_Class_2__single_for__Test_Class;
[SetUp]
public void SetUp()
@ -45,7 +45,7 @@ public class RelationshipTests : OmsTestsBase
c_TestClass2Instance2 = Oms.CreateInstanceOf(c_TestClass2);
r_Test_Class__has_single__Test_Class_2 = Oms.CreateRelationship(c_TestClass, "has single", c_TestClass2, TEST_REL3_GUID, true, "single for", TEST_REL4_GUID);
r_Test_Class_2__single_for__Test_Class = Oms.GetInstance(TEST_REL4_GUID);
r_Test_Class_2__single_for__Test_Class = Oms.GetInstance<Relationship>(TEST_REL4_GUID);
r_Test_Class__has_multiple__Test_Class_2 = Oms.CreateRelationship(c_TestClass, "has multiple", c_TestClass2, TEST_REL5_GUID, false, "multiple for", TEST_REL6_GUID);
}

View File

@ -16,12 +16,14 @@
// along with Mocha.NET. If not, see <https://www.gnu.org/licenses/>.
using Mocha.Core.Oop;
namespace Mocha.Core.Tests.SampleDatabases;
public class MovieRentalTests : OmsTestsBase
{
private InstanceHandle c_MovieRental, c_Movie, c_MovieRating;
private InstanceHandle r_Movie_Rental__has__Movie, r_Movie__has__Movie_Rating;
private Class c_MovieRental, c_Movie, c_MovieRating;
private Relationship r_Movie_Rental__has__Movie, r_Movie__has__Movie_Rating;
private Guid g_c_Movie = new Guid("{da1cf074-d7be-44a2-95fc-4a31621a85d2}");
private Guid g_c_MovieRating = new Guid("{1f84afec-a9fb-42ff-a66e-7ba231c3fee3}");

View File

@ -16,8 +16,6 @@
// along with Mocha.NET. If not, see <https://www.gnu.org/licenses/>.
using System.Xml.Serialization;
using Mocha.Core.OmsImplementations.Mini;
using Mocha.Core.Oop;
namespace Mocha.Core.Tests;