From c272f8cd2f28fa4b62bf34f5864648f293326ed6 Mon Sep 17 00:00:00 2001 From: bergtwvd Date: Fri, 20 Mar 2026 23:06:30 +0100 Subject: [PATCH 1/3] Additions of support functions. --- .../java/nl/tno/oorti/OORTIambassador.java | 16 +++++-- .../oorti/impl/InteractionClassManager.java | 10 +++++ .../tno/oorti/impl/OORTIambassadorImpl.java | 42 +++++++++++++++++++ .../nl/tno/oorti/impl/ObjectClassManager.java | 19 +++++++-- 4 files changed, 80 insertions(+), 7 deletions(-) diff --git a/src/main/java/nl/tno/oorti/OORTIambassador.java b/src/main/java/nl/tno/oorti/OORTIambassador.java index 105e022..18dd3c7 100644 --- a/src/main/java/nl/tno/oorti/OORTIambassador.java +++ b/src/main/java/nl/tno/oorti/OORTIambassador.java @@ -132,9 +132,7 @@ FederateHandle joinFederationExecutionWithCurrentFDD( RTIinternalError; FederateHandle joinFederationExecutionWithCurrentFDD( - String federateType, - String federationExecutionName, - URL[] currentFddModules) + String federateType, String federationExecutionName, URL[] currentFddModules) throws CouldNotCreateLogicalTimeFactory, FederationExecutionDoesNotExist, InconsistentFDD, @@ -599,6 +597,18 @@ boolean isAttributeOwnedByFederate(Object theObject, OOattribute theAttribute) // RTI Support Services // ////////////////////////// + String getObjectClassName(Class theClass) + throws ObjectClassNotDefined, FederateNotExecutionMember, NotConnected, RTIinternalError; + + Class getObjectClass(String theClassName) + throws ObjectClassNotDefined, FederateNotExecutionMember, NotConnected, RTIinternalError; + + String getInteractionClassName(Class theClass) + throws InteractionClassNotDefined, FederateNotExecutionMember, NotConnected, RTIinternalError; + + Class getInteractionClass(String theClassName) + throws InteractionClassNotDefined, FederateNotExecutionMember, NotConnected, RTIinternalError; + String getObjectName(Object theObject) throws ObjectInstanceNotKnown, FederateNotExecutionMember, NotConnected, RTIinternalError; diff --git a/src/main/java/nl/tno/oorti/impl/InteractionClassManager.java b/src/main/java/nl/tno/oorti/impl/InteractionClassManager.java index f2dccd7..6d36c2a 100644 --- a/src/main/java/nl/tno/oorti/impl/InteractionClassManager.java +++ b/src/main/java/nl/tno/oorti/impl/InteractionClassManager.java @@ -45,6 +45,7 @@ public class InteractionClassManager { private final Map clazz2class = new ConcurrentHashMap<>(); private final Map handle2class = new ConcurrentHashMap<>(); + private final Map name2class = new ConcurrentHashMap<>(); public InteractionClassManager( RTIambassador rtiamb, @@ -80,6 +81,7 @@ public InteractionClass create(Class clazz) this.clazz2class.put(ic.getClazz(), ic); this.handle2class.put(ic.getClassHandle(), ic); + this.name2class.put(ic.getName(), ic); return ic; } catch (NameNotFound ex) { @@ -168,4 +170,12 @@ public InteractionClass getInteractionClassIfExists(Class clazz) throw new InteractionClassNotDefined("Unknown class " + clazz.getSimpleName()); } else return ic; } + + public InteractionClass getInteractionClassIfExists(String name) + throws InteractionClassNotDefined { + InteractionClass ic = this.name2class.get(name); + if (ic == null) { + throw new InteractionClassNotDefined("Unknown class " + name); + } else return ic; + } } diff --git a/src/main/java/nl/tno/oorti/impl/OORTIambassadorImpl.java b/src/main/java/nl/tno/oorti/impl/OORTIambassadorImpl.java index 449b7cc..d7c413f 100644 --- a/src/main/java/nl/tno/oorti/impl/OORTIambassadorImpl.java +++ b/src/main/java/nl/tno/oorti/impl/OORTIambassadorImpl.java @@ -1332,6 +1332,48 @@ public boolean isAttributeOwnedByFederate(Object theObject, OOattribute theAttri // RTI Support Services // ////////////////////////// + @Override + public String getObjectClassName(Class theClass) + throws ObjectClassNotDefined, FederateNotExecutionMember, NotConnected, RTIinternalError { + + ExecutionContext ec = ecm.getExecutionContextIfExists(); + + return ec.getOcm().getObjectClassIfExists(theClass).getName(); + } + + @Override + public Class getObjectClass(String theClassName) + throws ObjectClassNotDefined, FederateNotExecutionMember, NotConnected, RTIinternalError { + + ExecutionContext ec = ecm.getExecutionContextIfExists(); + + return ec.getOcm().getObjectClassIfExists(theClassName).getClazz(); + } + + @Override + public String getInteractionClassName(Class theClass) + throws InteractionClassNotDefined, + FederateNotExecutionMember, + NotConnected, + RTIinternalError { + + ExecutionContext ec = ecm.getExecutionContextIfExists(); + + return ec.getIcm().getInteractionClassIfExists(theClass).getName(); + } + + @Override + public Class getInteractionClass(String theClassName) + throws InteractionClassNotDefined, + FederateNotExecutionMember, + NotConnected, + RTIinternalError { + + ExecutionContext ec = ecm.getExecutionContextIfExists(); + + return ec.getIcm().getInteractionClassIfExists(theClassName).getClazz(); + } + @Override public String getObjectName(Object theObject) throws ObjectInstanceNotKnown, FederateNotExecutionMember { diff --git a/src/main/java/nl/tno/oorti/impl/ObjectClassManager.java b/src/main/java/nl/tno/oorti/impl/ObjectClassManager.java index 51447fa..434c445 100644 --- a/src/main/java/nl/tno/oorti/impl/ObjectClassManager.java +++ b/src/main/java/nl/tno/oorti/impl/ObjectClassManager.java @@ -46,6 +46,7 @@ public class ObjectClassManager { // mutable properties private final Map clazz2class = new ConcurrentHashMap<>(); private final Map handle2class = new ConcurrentHashMap<>(); + private final Map name2class = new ConcurrentHashMap<>(); public ObjectClassManager( RTIambassador rtiamb, @@ -74,16 +75,17 @@ public ObjectClass create(Class clazz) if (oc != null) return oc; try { - String classsName = HelperFunctions.getFullyQualifiedObjectClassName(clazz); - ObjectClassHandle classHandle = this.rtiamb.getObjectClassHandle(classsName); - Set attributeSet = this.createAttributeSet(clazz, classsName, classHandle); + String className = HelperFunctions.getFullyQualifiedObjectClassName(clazz); + ObjectClassHandle classHandle = this.rtiamb.getObjectClassHandle(className); + Set attributeSet = this.createAttributeSet(clazz, className, classHandle); oc = new ObjectClass( - clazz, classsName, classHandle, attributeSet, this.ahvmFactory, this.ahsFactory); + clazz, className, classHandle, attributeSet, this.ahvmFactory, this.ahsFactory); this.clazz2class.put(oc.getClazz(), oc); this.handle2class.put(oc.getClassHandle(), oc); + this.name2class.put(className, oc); return oc; } catch (NameNotFound ex) { @@ -173,4 +175,13 @@ public ObjectClass getObjectClassIfExists(Class clazz) throws ObjectClassNotDefi return oc; } } + + public ObjectClass getObjectClassIfExists(String name) throws ObjectClassNotDefined { + ObjectClass oc = this.name2class.get(name); + if (oc == null) { + throw new ObjectClassNotDefined("Unknown class " + name); + } else { + return oc; + } + } } From fec693fb8672a284537bb26d01e446fa881fbc5d Mon Sep 17 00:00:00 2001 From: bergtwvd Date: Fri, 20 Mar 2026 23:16:27 +0100 Subject: [PATCH 2/3] Added test. --- pom.xml | 6 +++--- .../tno/oorti/test/managers/TestSerializerInteraction.java | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 0c8eb85..e45a34c 100644 --- a/pom.xml +++ b/pom.xml @@ -69,7 +69,7 @@ org.junit.jupiter junit-jupiter - 6.0.2 + 6.0.3 test @@ -79,12 +79,12 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 + 3.5.5 org.apache.maven.plugins maven-compiler-plugin - 3.14.1 + 3.15.0 diff --git a/src/test/java/nl/tno/oorti/test/managers/TestSerializerInteraction.java b/src/test/java/nl/tno/oorti/test/managers/TestSerializerInteraction.java index 24773ff..4c95ad4 100644 --- a/src/test/java/nl/tno/oorti/test/managers/TestSerializerInteraction.java +++ b/src/test/java/nl/tno/oorti/test/managers/TestSerializerInteraction.java @@ -80,6 +80,8 @@ private void testSerialisation(OOobjectFactory objectFactory) throws RTIexceptio Assertions.assertEquals(Message.class, ic1.getClazz()); Assertions.assertEquals(Message.class, ic2.getClazz()); + Assertions.assertEquals("HLAinteractionRoot.Message", ic1.getName()); + Assertions.assertEquals("HLAinteractionRoot.Message", ic2.getName()); Assertions.assertEquals(1, map.size()); Assertions.assertEquals(1, parameterSet.size()); Assertions.assertEquals(theMessage1.getContents(), theMessage2.getContents()); From 3abf4e0c6764064d2238dc4280ab21adc8569191 Mon Sep 17 00:00:00 2001 From: bergtwvd Date: Wed, 25 Mar 2026 23:30:47 +0100 Subject: [PATCH 3/3] Closes #21. --- .../nl/tno/oorti/impl/OORTIambassadorImpl.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/nl/tno/oorti/impl/OORTIambassadorImpl.java b/src/main/java/nl/tno/oorti/impl/OORTIambassadorImpl.java index d7c413f..9fcac99 100644 --- a/src/main/java/nl/tno/oorti/impl/OORTIambassadorImpl.java +++ b/src/main/java/nl/tno/oorti/impl/OORTIambassadorImpl.java @@ -1335,10 +1335,14 @@ public boolean isAttributeOwnedByFederate(Object theObject, OOattribute theAttri @Override public String getObjectClassName(Class theClass) throws ObjectClassNotDefined, FederateNotExecutionMember, NotConnected, RTIinternalError { - + ExecutionContext ec = ecm.getExecutionContextIfExists(); - return ec.getOcm().getObjectClassIfExists(theClass).getName(); + try { + return ec.getOcm().create(theClass).getName(); + } catch (AttributeNotDefined ex) { + throw new ObjectClassNotDefined(ex.getMessage(), ex); + } } @Override @@ -1359,7 +1363,11 @@ public String getInteractionClassName(Class theClass) ExecutionContext ec = ecm.getExecutionContextIfExists(); - return ec.getIcm().getInteractionClassIfExists(theClass).getName(); + try { + return ec.getIcm().create(theClass).getName(); + } catch (InteractionParameterNotDefined ex) { + throw new InteractionClassNotDefined(ex.getMessage(), ex); + } } @Override