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

edu.nps.moves.dis.ArealObjectStatePdu Maven / Gradle / Ivy

package edu.nps.moves.dis;

import java.util.*;
import java.io.*;

/**
 * Section 5.3.11.5: Information about the addition/modification of an oobject
 * that is geometrically achored to the terrain with a set of three or more
 * points that come to a closure. COMPLETE
 *
 * Copyright (c) 2008-2016, MOVES Institute, Naval Postgraduate School. All
 * rights reserved. This work is licensed under the BSD open source license,
 * available at https://www.movesinstitute.org/licenses/bsd.html
 *
 * @author DMcG
 */
public class ArealObjectStatePdu extends SyntheticEnvironmentFamilyPdu implements Serializable {

    /**
     * Object in synthetic environment
     */
    protected EntityID objectID = new EntityID();

    /**
     * Object with which this point object is associated
     */
    protected EntityID referencedObjectID = new EntityID();

    /**
     * unique update number of each state transition of an object
     */
    protected int updateNumber;

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

    /**
     * modifications enumeration
     */
    protected short modifications;

    /**
     * Object type
     */
    protected EntityType objectType = new EntityType();

    /**
     * Object appearance
     */
    protected SixByteChunk objectAppearance = new SixByteChunk();

    /**
     * Number of points
     */
    protected int numberOfPoints;

    /**
     * requesterID
     */
    protected SimulationAddress requesterID = new SimulationAddress();

    /**
     * receiver ID
     */
    protected SimulationAddress receivingID = new SimulationAddress();

    /**
     * location of object
     */
    protected List< Vector3Double> objectLocation = new ArrayList< Vector3Double>();

    /**
     * Constructor
     */
    public ArealObjectStatePdu() {
        setPduType((short) 45);
    }

    public int getMarshalledSize() {
        int marshalSize = 0;

        marshalSize = super.getMarshalledSize();
        marshalSize = marshalSize + objectID.getMarshalledSize();  // objectID
        marshalSize = marshalSize + referencedObjectID.getMarshalledSize();  // referencedObjectID
        marshalSize = marshalSize + 2;  // updateNumber
        marshalSize = marshalSize + 1;  // forceID
        marshalSize = marshalSize + 1;  // modifications
        marshalSize = marshalSize + objectType.getMarshalledSize();  // objectType
        marshalSize = marshalSize + objectAppearance.getMarshalledSize();  // objectAppearance
        marshalSize = marshalSize + 2;  // numberOfPoints
        marshalSize = marshalSize + requesterID.getMarshalledSize();  // requesterID
        marshalSize = marshalSize + receivingID.getMarshalledSize();  // receivingID
        for (int idx = 0; idx < objectLocation.size(); idx++) {
            Vector3Double listElement = objectLocation.get(idx);
            marshalSize = marshalSize + listElement.getMarshalledSize();
        }

        return marshalSize;
    }

    public void setObjectID(EntityID pObjectID) {
        objectID = pObjectID;
    }

    public EntityID getObjectID() {
        return objectID;
    }

    public void setReferencedObjectID(EntityID pReferencedObjectID) {
        referencedObjectID = pReferencedObjectID;
    }

    public EntityID getReferencedObjectID() {
        return referencedObjectID;
    }

    public void setUpdateNumber(int pUpdateNumber) {
        updateNumber = pUpdateNumber;
    }

    public int getUpdateNumber() {
        return updateNumber;
    }

    public void setForceID(short pForceID) {
        forceID = pForceID;
    }

    public short getForceID() {
        return forceID;
    }

    public void setModifications(short pModifications) {
        modifications = pModifications;
    }

    public short getModifications() {
        return modifications;
    }

    public void setObjectType(EntityType pObjectType) {
        objectType = pObjectType;
    }

    public EntityType getObjectType() {
        return objectType;
    }

    public void setObjectAppearance(SixByteChunk pObjectAppearance) {
        objectAppearance = pObjectAppearance;
    }

    public SixByteChunk getObjectAppearance() {
        return objectAppearance;
    }

    public int getNumberOfPoints() {
        return (int) objectLocation.size();
    }

    /**
     * Note that setting this value will not change the marshalled value. The
     * list whose length this describes is used for that purpose. The
     * getnumberOfPoints method will also be based on the actual list length
     * rather than this value. The method is simply here for java bean
     * completeness.
     */
    public void setNumberOfPoints(int pNumberOfPoints) {
        numberOfPoints = pNumberOfPoints;
    }

    public void setRequesterID(SimulationAddress pRequesterID) {
        requesterID = pRequesterID;
    }

    public SimulationAddress getRequesterID() {
        return requesterID;
    }

    public void setReceivingID(SimulationAddress pReceivingID) {
        receivingID = pReceivingID;
    }

    public SimulationAddress getReceivingID() {
        return receivingID;
    }

    public void setObjectLocation(List pObjectLocation) {
        objectLocation = pObjectLocation;
    }

    public List getObjectLocation() {
        return objectLocation;
    }

    /**
     * Packs a Pdu into the ByteBuffer.
     *
     * @throws java.nio.BufferOverflowException if buff is too small
     * @throws java.nio.ReadOnlyBufferException if buff is read only
     * @see java.nio.ByteBuffer
     * @param buff The ByteBuffer at the position to begin writing
     * @since ??
     */
    public void marshal(java.nio.ByteBuffer buff) {
        super.marshal(buff);
        objectID.marshal(buff);
        referencedObjectID.marshal(buff);
        buff.putShort((short) updateNumber);
        buff.put((byte) forceID);
        buff.put((byte) modifications);
        objectType.marshal(buff);
        objectAppearance.marshal(buff);
        buff.putShort((short) objectLocation.size());
        requesterID.marshal(buff);
        receivingID.marshal(buff);

        for (int idx = 0; idx < objectLocation.size(); idx++) {
            Vector3Double aVector3Double = (Vector3Double) objectLocation.get(idx);
            aVector3Double.marshal(buff);
        } // end of list marshalling

    } // end of marshal method

    /**
     * Unpacks a Pdu from the underlying data.
     *
     * @throws java.nio.BufferUnderflowException if buff is too small
     * @see java.nio.ByteBuffer
     * @param buff The ByteBuffer at the position to begin reading
     * @since ??
     */
    public void unmarshal(java.nio.ByteBuffer buff) {
        super.unmarshal(buff);

        objectID.unmarshal(buff);
        referencedObjectID.unmarshal(buff);
        updateNumber = (int) (buff.getShort() & 0xFFFF);
        forceID = (short) (buff.get() & 0xFF);
        modifications = (short) (buff.get() & 0xFF);
        objectType.unmarshal(buff);
        objectAppearance.unmarshal(buff);
        numberOfPoints = (int) (buff.getShort() & 0xFFFF);
        requesterID.unmarshal(buff);
        receivingID.unmarshal(buff);
        for (int idx = 0; idx < numberOfPoints; idx++) {
            Vector3Double anX = new Vector3Double();
            anX.unmarshal(buff);
            objectLocation.add(anX);
        }

    } // end of unmarshal method 


    /*
  * The equals method doesn't always work--mostly it works only on classes that consist only of primitives. Be careful.
     */
    @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 ArealObjectStatePdu)) {
            return false;
        }

        final ArealObjectStatePdu rhs = (ArealObjectStatePdu) obj;

        if (!(objectID.equals(rhs.objectID))) {
            ivarsEqual = false;
        }
        if (!(referencedObjectID.equals(rhs.referencedObjectID))) {
            ivarsEqual = false;
        }
        if (!(updateNumber == rhs.updateNumber)) {
            ivarsEqual = false;
        }
        if (!(forceID == rhs.forceID)) {
            ivarsEqual = false;
        }
        if (!(modifications == rhs.modifications)) {
            ivarsEqual = false;
        }
        if (!(objectType.equals(rhs.objectType))) {
            ivarsEqual = false;
        }
        if (!(objectAppearance.equals(rhs.objectAppearance))) {
            ivarsEqual = false;
        }
        if (!(numberOfPoints == rhs.numberOfPoints)) {
            ivarsEqual = false;
        }
        if (!(requesterID.equals(rhs.requesterID))) {
            ivarsEqual = false;
        }
        if (!(receivingID.equals(rhs.receivingID))) {
            ivarsEqual = false;
        }

        for (int idx = 0; idx < objectLocation.size(); idx++) {
            if (!(objectLocation.get(idx).equals(rhs.objectLocation.get(idx)))) {
                ivarsEqual = false;
            }
        }

        return ivarsEqual && super.equalsImpl(rhs);
    }
} // end of class




© 2015 - 2025 Weber Informatics LLC | Privacy Policy