edu.nps.moves.dis.BurstDescriptor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of open-dis Show documentation
Show all versions of open-dis Show documentation
An open source implementation of the Distributed Interactive Simulation (DIS) IEEE-1278 protocol
package edu.nps.moves.dis;
import java.util.*;
import java.io.*;
import edu.nps.moves.disenum.*;
import edu.nps.moves.disutil.*;
// Jaxb and Hibernate annotations generally won't work on mobile devices. XML serialization uses jaxb, and
// javax.persistence uses the JPA JSR, aka hibernate. See the Hibernate site for details.
// To generate Java code without these, and without the annotations scattered through the
// see the XMLPG java code generator, and set the boolean useHibernateAnnotations and useJaxbAnnotions
// to false, and then regenerate the code
import javax.xml.bind.*; // Used for JAXB XML serialization
import javax.xml.bind.annotation.*; // Used for XML serialization annotations (the @ stuff)
import javax.persistence.*; // Used for JPA/Hibernate SQL persistence
/**
* Section 5.2.7. Specifies the type of muntion fired, the type of warhead, the type of fuse, the number of rounds fired, and the rate at which the roudns are fired in rounds per minute.
*
* Copyright (c) 2008-2010, 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
*/
@Entity // Hibernate
@Inheritance(strategy=InheritanceType.JOINED) // Hibernate
public class BurstDescriptor extends Object implements Serializable
{
/** Primary key for hibernate, not part of the DIS standard */
private long pk_BurstDescriptor;
/** What munition was used in the burst */
protected EntityType munition = new EntityType();
/** type of warhead */
protected int warhead;
/** type of fuse used */
protected int fuse;
/** how many of the munition were fired */
protected int quantity;
/** rate at which the munition was fired */
protected int rate;
/** Constructor */
public BurstDescriptor()
{
}
@Transient // Marked as transient to prevent hibernate from thinking this is a persistent property
public int getMarshalledSize()
{
int marshalSize = 0;
marshalSize = marshalSize + munition.getMarshalledSize(); // munition
marshalSize = marshalSize + 2; // warhead
marshalSize = marshalSize + 2; // fuse
marshalSize = marshalSize + 2; // quantity
marshalSize = marshalSize + 2; // rate
return marshalSize;
}
/** Primary key for hibernate, not part of the DIS standard */
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public long getPk_BurstDescriptor()
{
return pk_BurstDescriptor;
}
/** Hibernate primary key, not part of the DIS standard */
public void setPk_BurstDescriptor(long pKeyName)
{
this.pk_BurstDescriptor = pKeyName;
}
public void setMunition(EntityType pMunition)
{ munition = pMunition;
}
// HIBERNATE: this ivar is a foreign key, linked to the below class table.
// It is not a DIS-standard variable and is not marshalled to IEEE-1278.1
public long fk_munition;
@XmlElement
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="fk_munition")
public EntityType getMunition()
{ return munition;
}
public void setWarhead(int pWarhead)
{ warhead = pWarhead;
}
@XmlAttribute // Jaxb
@Basic // Hibernate
public int getWarhead()
{ return warhead;
}
public void setFuse(int pFuse)
{ fuse = pFuse;
}
@XmlAttribute // Jaxb
@Basic // Hibernate
public int getFuse()
{ return fuse;
}
public void setQuantity(int pQuantity)
{ quantity = pQuantity;
}
@XmlAttribute // Jaxb
@Basic // Hibernate
public int getQuantity()
{ return quantity;
}
public void setRate(int pRate)
{ rate = pRate;
}
@XmlAttribute // Jaxb
@Basic // Hibernate
public int getRate()
{ return rate;
}
public void marshal(DataOutputStream dos)
{
try
{
munition.marshal(dos);
dos.writeShort( (short)warhead);
dos.writeShort( (short)fuse);
dos.writeShort( (short)quantity);
dos.writeShort( (short)rate);
} // end try
catch(Exception e)
{
System.out.println(e);}
} // end of marshal method
public void unmarshal(DataInputStream dis)
{
try
{
munition.unmarshal(dis);
warhead = (int)dis.readUnsignedShort();
fuse = (int)dis.readUnsignedShort();
quantity = (int)dis.readUnsignedShort();
rate = (int)dis.readUnsignedShort();
} // end try
catch(Exception e)
{
System.out.println(e);
}
} // end of unmarshal method
/**
* 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)
{
munition.marshal(buff);
buff.putShort( (short)warhead);
buff.putShort( (short)fuse);
buff.putShort( (short)quantity);
buff.putShort( (short)rate);
} // 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)
{
munition.unmarshal(buff);
warhead = (int)(buff.getShort() & 0xFFFF);
fuse = (int)(buff.getShort() & 0xFFFF);
quantity = (int)(buff.getShort() & 0xFFFF);
rate = (int)(buff.getShort() & 0xFFFF);
} // 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);
}
/**
* Compare all fields that contribute to the state, ignoring
transient and static fields, for this
and the supplied object
* @param obj the object to compare to
* @return true if the objects are equal, false otherwise.
*/
public boolean equalsImpl(Object obj)
{
boolean ivarsEqual = true;
if(!(obj instanceof BurstDescriptor))
return false;
final BurstDescriptor rhs = (BurstDescriptor)obj;
if( ! (munition.equals( rhs.munition) )) ivarsEqual = false;
if( ! (warhead == rhs.warhead)) ivarsEqual = false;
if( ! (fuse == rhs.fuse)) ivarsEqual = false;
if( ! (quantity == rhs.quantity)) ivarsEqual = false;
if( ! (rate == rhs.rate)) ivarsEqual = false;
return ivarsEqual;
}
} // end of class