All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edu.nps.moves.dis7.AggregateStatePdu Maven / Gradle / Ivy

package edu.nps.moves.dis7;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author fo
 */
public class AggregateStatePdu extends EntityManagementFamilyPdu implements Serializable {

    /**
     * ID of aggregate
     */
    protected AggregateIdentifier aggregateID = new AggregateIdentifier();

    /**
     * force ID
     */
    protected short forceID;

    /**
     * state of aggregate
     */
    protected short aggregateState;

    /**
     * Type of the aggregate
     */
    protected AggregateType aggregateType = new AggregateType();

    /**
     * formation of aggregated entities
     */
    protected long formation;

    /**
     * marking for aggregate; first char is charset type, rest is char data
     */
    protected AggregateMarking aggregateMarking = new AggregateMarking();

    /**
     * dimensions of bounding box for the aggregated entities, origin at the
     * center of mass
     */
    protected Vector3Float dimensions = new Vector3Float();

    /**
     * orientation of the bounding box
     */
    protected Orientation orientation = new Orientation();

    /**
     * center of mass of the aggregation
     */
    protected Vector3Double centerOfMass = new Vector3Double();

    /**
     * velocity of aggregation
     */
    protected Vector3Float velocity = new Vector3Float();

    /**
     * number of aggregates
     */
    protected int numberOfAggregateIds;

    /**
     * number of entities
     */
    protected int numberOfEntitiyIds;

    /**
     * number of silent aggregate types
     */
    protected int numberOfSilentAggregateSystems;

    /**
     * number of silent entity types
     */
    protected int numberOfSilentEntitySystems;
    /**
     * aggregates list
     */
    protected List aggregateIDList = new ArrayList();
    /**
     * entity ID list
     */
    protected List entityIDList = new ArrayList();
    /**
     * ^^^padding to put the start of the next list on a 32 bit boundary. This
     * needs to be fixed
     */
    protected short pad2;

    /**
     * silent entity types
     */
    protected List silentAggregateSystemList = new ArrayList();
    /**
     * silent entity types
     */
    protected List silentEntitySystemList = new ArrayList();

    /**
     * number of variable datum records
     */
    protected long numberOfVariableDatumRecords;

    /**
     * variableDatums
     */
    protected List< VariableDatum> variableDatumList = new ArrayList< VariableDatum>();

    public AggregateStatePdu() {
        setPduType((short) 33);
    }

    public int getMarshalledSize() {
        int marshalSize = 0;
        
        marshalSize = marshalSize + super.getMarshalledSize();
        marshalSize = marshalSize + aggregateID.getMarshalledSize();//aggregateID
        marshalSize = marshalSize + 1;//forceID
        marshalSize = marshalSize + 1;//aggregateState
        marshalSize = marshalSize + aggregateType.getMarshalledSize();//aggregateType
        marshalSize = marshalSize + 4;//formation
        marshalSize = marshalSize + aggregateMarking.getMarshalledSize();//aggregateMarking
        marshalSize = marshalSize + dimensions.getMarshalledSize();//dimensions
        marshalSize = marshalSize + orientation.getMarshalledSize();//orientation
        marshalSize = marshalSize + centerOfMass.getMarshalledSize();//centerOfMass
        marshalSize = marshalSize + velocity.getMarshalledSize();//velocity
        marshalSize = marshalSize + 2;  // numberOfDisAggregates
        marshalSize = marshalSize + 2;  // numberOfDisEntities
        marshalSize = marshalSize + 2;  // numberOfSilentAggregateTypes
        marshalSize = marshalSize + 2;  // numberOfSilentEntityTypes
        for (int idx = 0; idx < aggregateIDList.size(); idx++) {
            AggregateIdentifier listElement = aggregateIDList.get(idx);
            marshalSize = marshalSize + listElement.getMarshalledSize();
        }
        for (int idx = 0; idx < entityIDList.size(); idx++) {
            EntityID listElement = entityIDList.get(idx);
            marshalSize = marshalSize + listElement.getMarshalledSize();
        }
        marshalSize = marshalSize + (getPad2Bits() / 8);  // pad2
        for (int idx = 0; idx < silentAggregateSystemList.size(); idx++) {
            SilentAggregateSystem listElement = silentAggregateSystemList.get(idx);
            marshalSize = marshalSize + listElement.getMarshalledSize();
        }
        for (int idx = 0; idx < silentEntitySystemList.size(); idx++) {
            SilentEntitySystem listElement = silentEntitySystemList.get(idx);
            marshalSize = marshalSize + listElement.getMarshalledSize();
        }
        marshalSize = marshalSize + 4;  // numberOfVariableDatumRecords
        for (int idx = 0; idx < variableDatumList.size(); idx++) {
            VariableDatum listElement = variableDatumList.get(idx);
            marshalSize = marshalSize + listElement.getMarshalledSize();
        }

        return marshalSize;
    }

    public short getPad2Bits() {
        int val = 16 * ((aggregateIDList.size() + entityIDList.size()) % 2);
        return (short) val;
    }

    public AggregateIdentifier getAggregateID() {
        return aggregateID;
    }

    public void setAggregateID(AggregateIdentifier aggregateID) {
        this.aggregateID = aggregateID;
    }

    public short getForceID() {
        return forceID;
    }

    public void setForceID(short forceID) {
        this.forceID = forceID;
    }

    public short getAggregateState() {
        return aggregateState;
    }

    public void setAggregateState(short aggregateState) {
        this.aggregateState = aggregateState;
    }

    public AggregateType getAggregateType() {
        return aggregateType;
    }

    public void setAggregateType(AggregateType aggregateType) {
        this.aggregateType = aggregateType;
    }

    public long getFormation() {
        return formation;
    }

    public void setFormation(long formation) {
        this.formation = formation;
    }

    public AggregateMarking getAggregateMarking() {
        return aggregateMarking;
    }

    public void setAggregateMarking(AggregateMarking aggregateMarking) {
        this.aggregateMarking = aggregateMarking;
    }

    public Vector3Float getDimensions() {
        return dimensions;
    }

    public void setDimensions(Vector3Float dimensions) {
        this.dimensions = dimensions;
    }

    public Orientation getOrientation() {
        return orientation;
    }

    public void setOrientation(Orientation orientation) {
        this.orientation = orientation;
    }

    public Vector3Double getCenterOfMass() {
        return centerOfMass;
    }

    public void setCenterOfMass(Vector3Double centerOfMass) {
        this.centerOfMass = centerOfMass;
    }

    public Vector3Float getVelocity() {
        return velocity;
    }

    public void setVelocity(Vector3Float velocity) {
        this.velocity = velocity;
    }

    public List getAggregateIDList() {
        return aggregateIDList;
    }

    public void setAggregateIDList(List aggregateIDList) {
        this.aggregateIDList = aggregateIDList;
    }

    public List getEntityIDList() {
        return entityIDList;
    }

    public void setEntityIDList(List entityIDList) {
        this.entityIDList = entityIDList;
    }

    public short getPad2() {
        return pad2;
    }

    public void setPad2(short pad2) {
        this.pad2 = pad2;
    }

    public List getSilentAggregateSystemList() {
        return silentAggregateSystemList;
    }

    public void setSilentAggregateSystemList(List silentAggregateSystemList) {
        this.silentAggregateSystemList = silentAggregateSystemList;
    }

    public List getSilentEntitySystemList() {
        return silentEntitySystemList;
    }

    public void setSilentEntitySystemList(List silentEntitySystemList) {
        this.silentEntitySystemList = silentEntitySystemList;
    }

    public List getVariableDatumList() {
        return variableDatumList;
    }

    public void setVariableDatumList(List variableDatumList) {
        this.variableDatumList = variableDatumList;
    }

    public int getNumberOfAggregateIds() {
        return numberOfAggregateIds;
    }

    public int getNumberOfEntitiyIds() {
        return numberOfEntitiyIds;
    }

    public int getNumberOfSilentAggregateSystems() {
        return numberOfSilentAggregateSystems;
    }

    public int getNumberOfSilentEntitySystems() {
        return numberOfSilentEntitySystems;
    }

    public long getNumberOfVariableDatumRecords() {
        return numberOfVariableDatumRecords;
    }

    public void marshal(java.nio.ByteBuffer buff) {
        super.marshal(buff);
        aggregateID.marshal(buff);
        buff.put((byte) forceID);
        buff.put((byte) aggregateState);
        aggregateType.marshal(buff);
        buff.putInt((int) formation);
        aggregateMarking.marshal(buff);
        dimensions.marshal(buff);
        orientation.marshal(buff);
        centerOfMass.marshal(buff);
        velocity.marshal(buff); 
        buff.putShort((short) aggregateIDList.size());
        buff.putShort((short) entityIDList.size());
        buff.putShort((short) silentAggregateSystemList.size());
        buff.putShort((short) silentEntitySystemList.size());
        for (int idx = 0; idx < aggregateIDList.size(); idx++) {
            AggregateIdentifier aAggregateID = (AggregateIdentifier) aggregateIDList.get(idx);
            aAggregateID.marshal(buff);
        } // end of list marshalling

        for (int idx = 0; idx < entityIDList.size(); idx++) {
            EntityID aEntityID = (EntityID) entityIDList.get(idx);
            aEntityID.marshal(buff);
        } // end of list marshalling

        if ((getPad2Bits() / 8) == 2) {
            buff.putShort(pad2);
        }

        for (int idx = 0; idx < silentAggregateSystemList.size(); idx++) {
            SilentAggregateSystem aSilentAggregateSystem = (SilentAggregateSystem) silentAggregateSystemList.get(idx);
            aSilentAggregateSystem.marshal(buff);
        } // end of list marshalling

        for (int idx = 0; idx < silentEntitySystemList.size(); idx++) {
            SilentEntitySystem aSilentEntitySystem = (SilentEntitySystem) silentEntitySystemList.get(idx);
            aSilentEntitySystem.marshal(buff);
        } // end of list marshalling 

        buff.putInt((int) variableDatumList.size());

        for (int idx = 0; idx < variableDatumList.size(); idx++) {
            VariableDatum aVariableDatum = (VariableDatum) variableDatumList.get(idx);
            aVariableDatum.marshal(buff);
        } // end of list marshalling

    } // end of marshal method

    public void unmarshal(java.nio.ByteBuffer buff) {
        super.unmarshal(buff);
        aggregateID.unmarshal(buff);
        forceID = (short) (buff.get() & 0xFF);
        aggregateState = (short) (buff.get() & 0xFF);
        aggregateType.unmarshal(buff);
        formation = buff.getInt();
        aggregateMarking.unmarshal(buff);
        dimensions.unmarshal(buff);
        orientation.unmarshal(buff);
        centerOfMass.unmarshal(buff);
        velocity.unmarshal(buff);
        numberOfAggregateIds = (int) (buff.getShort() & 0xFFFF);
        numberOfEntitiyIds = (int) (buff.getShort() & 0xFFFF);
        numberOfSilentAggregateSystems = (int) (buff.getShort() & 0xFFFF);
        numberOfSilentEntitySystems = (int) (buff.getShort() & 0xFFFF);
        for (int idx = 0; idx < numberOfAggregateIds; idx++) {
            AggregateIdentifier anX = new AggregateIdentifier();
            anX.unmarshal(buff);
            aggregateIDList.add(anX);
        }

        for (int idx = 0; idx < numberOfEntitiyIds; idx++) {
            EntityID anX = new EntityID();
            anX.unmarshal(buff);
            entityIDList.add(anX);
        }
        //Determine if pad2 is present
        int padBits = 16 * ((numberOfAggregateIds + numberOfEntitiyIds) % 2);
        if ((padBits / 8) == 2) {
            pad2 = buff.getShort();
        }
        for (int idx = 0; idx < numberOfSilentAggregateSystems; idx++) {
            SilentAggregateSystem anX = new SilentAggregateSystem();
            anX.unmarshal(buff);
            silentAggregateSystemList.add(anX);
        }

        for (int idx = 0; idx < numberOfSilentEntitySystems; idx++) {
            SilentEntitySystem anX = new SilentEntitySystem();
            anX.unmarshal(buff);
            silentEntitySystemList.add(anX);
        }

        numberOfVariableDatumRecords = buff.getInt();
        for (int idx = 0; idx < numberOfVariableDatumRecords; idx++) {
            VariableDatum anX = new VariableDatum();
            anX.unmarshal(buff);
            variableDatumList.add(anX);
        }
    } // end of unmarshal method 

    public void marshal(DataOutputStream dos) {
        super.marshal(dos);
        try {
            aggregateID.marshal(dos);
            dos.writeByte(forceID);
            dos.writeByte(aggregateState);
            aggregateType.marshal(dos);
            dos.writeInt((int) formation);
            aggregateMarking.marshal(dos);
            dimensions.marshal(dos);
            orientation.marshal(dos);
            centerOfMass.marshal(dos);
            velocity.marshal(dos);
            dos.writeShort((short) aggregateIDList.size());
            dos.writeShort((short) entityIDList.size());
            dos.writeShort((short) silentAggregateSystemList.size());
            dos.writeShort((short) silentEntitySystemList.size());
            for (int idx = 0; idx < aggregateIDList.size(); idx++) {
                AggregateIdentifier aAggregateID = (AggregateIdentifier) aggregateIDList.get(idx);
                aAggregateID.marshal(dos);
            } // end of list marshalling

            for (int idx = 0; idx < entityIDList.size(); idx++) {
                EntityID aEntityID = (EntityID) entityIDList.get(idx);
                aEntityID.marshal(dos);
            } // end of list marshalling

            if ((getPad2Bits() / 8) == 2) {
                dos.writeShort(pad2);
            }

            for (int idx = 0; idx < silentAggregateSystemList.size(); idx++) {
                SilentAggregateSystem aSilentAggregateSystem = (SilentAggregateSystem) silentAggregateSystemList.get(idx);
                aSilentAggregateSystem.marshal(dos);
            } // end of list marshalling

            for (int idx = 0; idx < silentEntitySystemList.size(); idx++) {
                SilentEntitySystem aSilentEntitySystem = (SilentEntitySystem) silentEntitySystemList.get(idx);
                aSilentEntitySystem.marshal(dos);
            } // end of list marshalling 

            dos.writeInt((int) variableDatumList.size());

            for (int idx = 0; idx < variableDatumList.size(); idx++) {
                VariableDatum aVariableDatum = (VariableDatum) variableDatumList.get(idx);
                aVariableDatum.marshal(dos);
            } // end of list marshalling            
        } // end try  // end try 
        catch (Exception e) {
            System.out.println(e);
        }
    } // end of marshal method 

    public void unmarshal(DataInputStream dis) {
        super.unmarshal(dis);

        try {
            aggregateID.unmarshal(dis);
            forceID = dis.readByte();
            aggregateState = dis.readByte();
            aggregateType.unmarshal(dis);
            formation = dis.readInt();
            aggregateMarking.unmarshal(dis);
            dimensions.unmarshal(dis);
            orientation.unmarshal(dis);
            centerOfMass.unmarshal(dis);
            velocity.unmarshal(dis);
            numberOfAggregateIds = (int) dis.readShort();
            numberOfEntitiyIds = (int) dis.readShort();
            numberOfSilentAggregateSystems = (int) dis.readShort();
            numberOfSilentEntitySystems = (int) dis.readShort();
            for (int idx = 0; idx < numberOfAggregateIds; idx++) {
                AggregateIdentifier anX = new AggregateIdentifier();
                anX.unmarshal(dis);
                aggregateIDList.add(anX);
            }

            for (int idx = 0; idx < numberOfEntitiyIds; idx++) {
                EntityID anX = new EntityID();
                anX.unmarshal(dis);
                entityIDList.add(anX);
            }
            //Determine if pad2 is present
            int padBits = 16 * ((numberOfAggregateIds + numberOfEntitiyIds) % 2);
            if ((padBits / 8) == 2) {
                pad2 = dis.readShort();
            }
            for (int idx = 0; idx < numberOfSilentAggregateSystems; idx++) {
                SilentAggregateSystem anX = new SilentAggregateSystem();
                anX.unmarshal(dis);
                silentAggregateSystemList.add(anX);
            }

            for (int idx = 0; idx < numberOfSilentEntitySystems; idx++) {
                SilentEntitySystem anX = new SilentEntitySystem();
                anX.unmarshal(dis);
                silentEntitySystemList.add(anX);
            }

            numberOfVariableDatumRecords = dis.readInt();
            for (int idx = 0; idx < numberOfVariableDatumRecords; idx++) {
                VariableDatum anX = new VariableDatum();
                anX.unmarshal(dis);
                variableDatumList.add(anX);
            }
        } // end try  
        catch (Exception e) {
            System.out.println(e);
        }
    } // end of unmarshal method 

    @Override
    public boolean equals(Object obj) {

        if (this == obj) {
            return true;
        }

        if (obj == null) {
            return false;
        }

        if (getClass() != obj.getClass()) {
            return false;
        }

        return equalsImpl(obj);
    }

    @Override
    public boolean equalsImpl(Object obj) {
        boolean ivarsEqual = true;

        if (!(obj instanceof AggregateStatePdu)) {
            return false;
        }

        final AggregateStatePdu rhs = (AggregateStatePdu) obj;

        if (!(aggregateID.equals(rhs.aggregateID))) {
            ivarsEqual = false;
        }
        if (!(forceID == rhs.forceID)) {
            ivarsEqual = false;
        }
        if (!(aggregateState == rhs.aggregateState)) {
            ivarsEqual = false;
        }
        if (!(aggregateType.equals(rhs.aggregateType))) {
            ivarsEqual = false;
        }
        if (!(formation == rhs.formation)) {
            ivarsEqual = false;
        }
        if (!(aggregateMarking.equals(rhs.aggregateMarking))) {
            ivarsEqual = false;
        }
        if (!(dimensions.equals(rhs.dimensions))) {
            ivarsEqual = false;
        }
        if (!(orientation.equals(rhs.orientation))) {
            ivarsEqual = false;
        }
        if (!(centerOfMass.equals(rhs.centerOfMass))) {
            ivarsEqual = false;
        }
        if (!(velocity.equals(rhs.velocity))) {
            ivarsEqual = false;
        }
        if (!(numberOfAggregateIds == rhs.numberOfAggregateIds)) {
            ivarsEqual = false;
        }
        if (!(numberOfEntitiyIds == rhs.numberOfEntitiyIds)) {
            ivarsEqual = false;
        }
        if (!(numberOfSilentAggregateSystems == rhs.numberOfSilentAggregateSystems)) {
            ivarsEqual = false;
        }
        if (!(numberOfSilentEntitySystems == rhs.numberOfSilentEntitySystems)) {
            ivarsEqual = false;
        }
        for (int idx = 0; idx < aggregateIDList.size(); idx++) {
            if (!(aggregateIDList.get(idx).equals(rhs.aggregateIDList.get(idx)))) {
                ivarsEqual = false;
            }
        }
        for (int idx = 0; idx < entityIDList.size(); idx++) {
            if (!(entityIDList.get(idx).equals(rhs.entityIDList.get(idx)))) {
                ivarsEqual = false;
            }
        }
        if (!(pad2 == rhs.pad2)) {
            ivarsEqual = false;
        }
        for (int idx = 0; idx < silentAggregateSystemList.size(); idx++) {
            if (!(silentAggregateSystemList.get(idx).equals(rhs.silentAggregateSystemList.get(idx)))) {
                ivarsEqual = false;
            }
        }
        for (int idx = 0; idx < silentEntitySystemList.size(); idx++) {
            if (!(silentEntitySystemList.get(idx).equals(rhs.silentEntitySystemList.get(idx)))) {
                ivarsEqual = false;
            }
        }
        if (!(numberOfVariableDatumRecords == rhs.numberOfVariableDatumRecords)) {
            ivarsEqual = false;
        }

        for (int idx = 0; idx < variableDatumList.size(); idx++) {
            if (!(variableDatumList.get(idx).equals(rhs.variableDatumList.get(idx)))) {
                ivarsEqual = false;
            }
        }
        
        return ivarsEqual && super.equalsImpl(rhs);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy