Skip to content
Snippets Groups Projects
Commit 23bf42af authored by Brutzman, Don's avatar Brutzman, Don
Browse files

Add variety of utility methods

parent 11e4fde5
No related branches found
No related tags found
No related merge requests found
...@@ -35,6 +35,8 @@ POSSIBILITY OF SUCH DAMAGE. ...@@ -35,6 +35,8 @@ POSSIBILITY OF SUCH DAMAGE.
package OpenDis7Examples; package OpenDis7Examples;
import edu.nps.moves.dis7.pdus.CreateEntityPdu;
import edu.nps.moves.dis7.pdus.RemoveEntityPdu;
import edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface; import edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -42,17 +44,18 @@ import java.util.ArrayList; ...@@ -42,17 +44,18 @@ import java.util.ArrayList;
* Manage overall simulation choreography for a DIS exercise. * Manage overall simulation choreography for a DIS exercise.
* TODO once operation is working satisfactorily, this class will be moved into the open-dis7-java distribution utilities. * TODO once operation is working satisfactorily, this class will be moved into the open-dis7-java distribution utilities.
* @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/specifications/README.md" target="_blank">Networked Graphics MV3500, Specification Documents, IEEE and SISO</a> * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/specifications/README.md" target="_blank">Networked Graphics MV3500, Specification Documents, IEEE and SISO</a>
* @see <a href="https://ieeexplore.ieee.org/document/6387564" target="_blank">1278.1-2012. IEEE Standard for Distributed Interactive Simulation (DIS) - Application Protocols</a> * @see <a href="https://ieeexplore.ieee.org/document/6387564" target="_blank">1278.1-2012. IEEE Standard for Distributed Interactive Simulation (DIS) - Application Protocols</a> 5.6.3 The simulation management computer
* @see <a href="https://ieeexplore.ieee.org/document/587529" target="_blank">1278.3-1996. IEEE Recommended Practice for Distributed Interactive Simulation - Exercise Management and Feedback</a> * @see <a href="https://ieeexplore.ieee.org/document/587529" target="_blank">1278.3-1996. IEEE Recommended Practice for Distributed Interactive Simulation - Exercise Management and Feedback</a>
* @author brutzman * @author brutzman
*/ */
public class SimulationManager public class SimulationManager
{ {
private DisThreadedNetworkInterface disThreadedNetworkInterface; private DisThreadedNetworkInterface disThreadedNetworkInterface;
private ArrayList<RecordType> entityRecordList = new ArrayList<>(); private static ArrayList<RecordType> entityRecordList = new ArrayList<>();
private ArrayList<RecordType> hostRecordList = new ArrayList<>(); private static ArrayList<RecordType> hostRecordList = new ArrayList<>();
private ArrayList<RecordType> applicationRecordList = new ArrayList<>(); private static ArrayList<RecordType> applicationRecordList = new ArrayList<>();
private String descriptor = new String(); private String descriptor = new String();
private static int hostID = 0;
private String TRACE_PREFIX = "[" + (SimulationManager.class.getSimpleName()) + "] "; private String TRACE_PREFIX = "[" + (SimulationManager.class.getSimpleName()) + "] ";
...@@ -62,7 +65,8 @@ public class SimulationManager ...@@ -62,7 +65,8 @@ public class SimulationManager
*/ */
public SimulationManager (String newDescriptor) public SimulationManager (String newDescriptor)
{ {
this.descriptor = newDescriptor; if (newDescriptor != null)
descriptor = newDescriptor.trim();
} }
/** /**
* Object constructor * Object constructor
...@@ -122,8 +126,10 @@ public class SimulationManager ...@@ -122,8 +126,10 @@ public class SimulationManager
{ {
private int id = -1; private int id = -1;
private String name = new String(); private String name = new String();
private String alias = new String();
private String description = new String(); private String description = new String();
private String reference = new String(); private String reference = new String();
private boolean isHostType = false;
/** /**
* Constructor for new record * Constructor for new record
...@@ -138,6 +144,7 @@ public class SimulationManager ...@@ -138,6 +144,7 @@ public class SimulationManager
this.name = name; this.name = name;
this.description = description; this.description = description;
this.reference = reference; this.reference = reference;
// TODO create alias: if IP address then check for hostname, and vice versa
} }
/** /**
* Utility constructor for new record, description and reference remain blank * Utility constructor for new record, description and reference remain blank
...@@ -150,6 +157,22 @@ public class SimulationManager ...@@ -150,6 +157,22 @@ public class SimulationManager
this.name = name; this.name = name;
this.description = ""; this.description = "";
this.reference = ""; this.reference = "";
// TODO create alias: if IP address then check for hostname, and vice versa
}
/**
* Utility constructor for new record, description and reference remain blank
* @param id identifying number
* @param name common name
* @param isHostType
*/
public RecordType (int id, String name, boolean isHostType)
{
this.id = id;
this.name = name;
this.description = "";
this.reference = "";
this.isHostType = isHostType;
// TODO create alias: if IP address then check for hostname, and vice versa
} }
/** /**
...@@ -171,9 +194,11 @@ public class SimulationManager ...@@ -171,9 +194,11 @@ public class SimulationManager
/** /**
* @param newID the id to set * @param newID the id to set
* @return same object to permit progressive setters
*/ */
public void setId(int newID) { public RecordType setId(int newID) {
this.id = newID; this.id = newID;
return this;
} }
/** /**
...@@ -185,9 +210,11 @@ public class SimulationManager ...@@ -185,9 +210,11 @@ public class SimulationManager
/** /**
* @param newName the name to set * @param newName the name to set
* @return same object to permit progressive setters
*/ */
public void setName(String newName) { public RecordType setName(String newName) {
this.name = newName; this.name = newName;
return this;
} }
/** /**
...@@ -199,9 +226,11 @@ public class SimulationManager ...@@ -199,9 +226,11 @@ public class SimulationManager
/** /**
* @param newDescription the description to set * @param newDescription the description to set
* @return same object to permit progressive setters
*/ */
public void setDescription(String newDescription) { public RecordType setDescription(String newDescription) {
this.description = newDescription; this.description = newDescription;
return this;
} }
/** /**
...@@ -213,9 +242,43 @@ public class SimulationManager ...@@ -213,9 +242,43 @@ public class SimulationManager
/** /**
* @param newReference the reference to set * @param newReference the reference to set
* @return same object to permit progressive setters
*/ */
public void setReference(String newReference) { public RecordType setReference(String newReference) {
this.reference = newReference; this.reference = newReference;
return this;
}
/**
* @return the alias
*/
public String getAlias() {
return alias;
}
/**
* @param alias the alias to set
* @return same object to permit progressive setters
*/
public RecordType setAlias(String alias) {
this.alias = alias;
return this;
}
/**
* Does record represent a network address
* @return whether record is a network address
*/
public boolean isNetworkAddress() {
return isHostType;
}
/**
* Set whether record represents a network address
* @param isAddress the isAddress to set
*/
public void setNetworkAddress(boolean isAddress) {
this.isHostType = isAddress;
} }
} }
...@@ -374,12 +437,21 @@ public class SimulationManager ...@@ -374,12 +437,21 @@ public class SimulationManager
/** /**
* Set the disThreadedNetworkInterface singleton to match other classes * Set the disThreadedNetworkInterface singleton to match other classes
* @param disThreadedNetworkInterface the disThreadedNetworkInterface to set * @param disThreadedNetworkInterface the disThreadedNetworkInterface to set
* @return same object to permit progressive setters
*/ */
public void setDisThreadedNetworkInterface(DisThreadedNetworkInterface disThreadedNetworkInterface) { public SimulationManager setDisThreadedNetworkInterface(DisThreadedNetworkInterface disThreadedNetworkInterface) {
this.disThreadedNetworkInterface = disThreadedNetworkInterface; this.disThreadedNetworkInterface = disThreadedNetworkInterface;
return this;
}
/**
* Check for disThreadedNetworkInterface
*/
protected boolean hasDisThreadedNetworkInterface()
{
return (this.disThreadedNetworkInterface != null);
} }
/** /**
* Constructor for disThreadedNetworkInterface * Create disThreadedNetworkInterface
*/ */
protected void createDisThreadedNetworkInterface() protected void createDisThreadedNetworkInterface()
{ {
...@@ -424,13 +496,136 @@ public class SimulationManager ...@@ -424,13 +496,136 @@ public class SimulationManager
/** /**
* Set new simple descriptor (such as parent class name) for this SimulationManager, used in trace statements * Set new simple descriptor (such as parent class name) for this SimulationManager, used in trace statements
* @param newDescriptor simple descriptor name for this interface * @param newDescriptor simple descriptor name for this interface
*/ * @return same object to permit progressive setters */
public void setDescriptor(String newDescriptor) public SimulationManager setDescriptor(String newDescriptor)
{
if (newDescriptor != null)
this.descriptor = newDescriptor.trim();
TRACE_PREFIX = "[" + DisThreadedNetworkInterface.class.getSimpleName() + " " + descriptor + "] ";
return this;
}
/**
* Reset descriptor
* @return same object to permit progressive setters */
public SimulationManager clearDescriptor()
{
setDescriptor("");
return this;
}
/**
* clear all lists
* @return same object to permit progressive setters*/
public SimulationManager clearAll()
{
entityRecordList.clear();
hostRecordList.clear();
applicationRecordList.clear();
clearDescriptor();
return this;
}
/**
* Add entity to simulation list, if this is first occurrence
* @param newEntity new entity to add
* @return same object to permit progressive setters*/
public SimulationManager addEntity(RecordType newEntity)
{
if (!entityRecordList.contains(newEntity))
{
// TODO check record type
entityRecordList.add(newEntity);
if (hasDisThreadedNetworkInterface())
{
CreateEntityPdu createEntityPdu = new CreateEntityPdu();
// TODO set record parameters
getDisThreadedNetworkInterface().send(createEntityPdu);
}
else
{
System.err.println(TRACE_PREFIX + "addEntity() unable to send CreateEntityPdu since no disThreadedNetworkInterface found");
// TODO consider queue for unsent entities
}
}
return this;
}
/**
* Remove entity from simulation list, if found
* @param oldEntity old entity to remove
* @return same object to permit progressive setters*/
public SimulationManager removeEntity(RecordType oldEntity)
{
if (!entityRecordList.contains(oldEntity))
{
// TODO check record type
entityRecordList.remove(oldEntity);
if (hasDisThreadedNetworkInterface())
{
RemoveEntityPdu removeEntityPdu = new RemoveEntityPdu();
// TODO set record parameters
getDisThreadedNetworkInterface().send(removeEntityPdu);
}
else
{
System.err.println(TRACE_PREFIX + "removeEntity() unable to send RemoveEntityPdu since no disThreadedNetworkInterface found");
// TODO consider queue for unsent entities
}
}
return this;
}
/**
* Add host to simulation list, if this is first occurrence
* @param newHost new host to add
* @return same object to permit progressive setters*/
public SimulationManager addHost(String newHost)
{ {
this.descriptor = newDescriptor; boolean nameFound = false;
TRACE_PREFIX = "[" + (DisThreadedNetworkInterface.class.getSimpleName() + " " + descriptor).trim() + "] "; boolean aliasFound = false;
for (RecordType nextRecord : hostRecordList)
{
if ( nextRecord.name.equalsIgnoreCase(newHost.trim()))
nameFound = true;
if (nextRecord.alias.equalsIgnoreCase(newHost.trim()))
aliasFound = true;
if ((nameFound || aliasFound) && !nextRecord.isHostType)
nextRecord.isHostType = true; // make sure
}
if (!nameFound && !aliasFound)
{
RecordType newRecord = new RecordType(hostID, newHost, true);
// TODO set alias to IP number
hostRecordList.add(newRecord);
hostID++;
// no PDU sent
}
return this;
}
/**
* Remove host from simulation list, if found
* @param oldHost old host to remove
* @return same object to permit progressive setters*/
public SimulationManager removeHost(String oldHost)
{
boolean nameFound = false;
boolean aliasFound = false;
for (RecordType nextRecord : hostRecordList)
{
if ( nextRecord.name.equalsIgnoreCase(oldHost.trim()))
nameFound = true;
if (nextRecord.alias.equalsIgnoreCase(oldHost.trim()))
aliasFound = true;
if ((nameFound || aliasFound) && !nextRecord.isHostType)
nextRecord.isHostType = true; // make sure
if (nameFound || aliasFound)
{
hostRecordList.remove(nextRecord);
// no PDU sent
break;
}
}
return this;
} }
/** Self test to check basic operation, invoked by main() */
public void selfTest() public void selfTest()
{ {
createDisThreadedNetworkInterface(); createDisThreadedNetworkInterface();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment