package tmcsim.cadmodels;
import java.io.Serializable;
import java.util.Vector;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
/**
* IncidentInquiryModel_obj is the model object containing all model
* information for an IncidentInquiry CAD Screen. The model data includes
* a single IncidentInquiryHeader, and lists of IncidentInquiryDetails,
* IncidentInquiryAssignedUnits, IncidentInquiryTows, IncidentInquiryWitnesses,
* and IncidentInquiryServices. The add???() methods append a new
* IncidentInquiry model object to the associated internal list.
*
* This element parses and creates the following XML schema in its toXML() and
* fromXML() methods. The ROOT element is the parameter for those methods. The
* specific XML schema for each IncidentInquiry model can be found in its
* class header.
*
*
*
* ...
*
*
* ...
*
*
* ...
*
*
* ...
*
*
* ...
*
*
*
* @see IncidentInquiryHeader
* @see IncidentInquiryDetails
* @see IncidentInquiryAssignedUnits
* @see IncidentInquiryTows
* @see IncidentInquiryWitnesses
* @see IncidentInquiryServices
* @author Matthew Cechini
* @version
*/
@SuppressWarnings("serial")
public class IncidentInquiryModel_obj implements Serializable {
/** Log position info for a log entry. */
public static final String SCRIPT_POS_INFO = "000A17661";
/**
* Enumeration with XML tag names.
* @author Matthew Cechini
*/
private static enum XML_TAGS {
/** Header information. */
HEADER ("HEADER"),
/** Detail log entry. */
DETAIL ("DETAIL"),
/** Unit log entry. */
UNIT ("UNIT"),
/** Witness log entry. */
WITNESS ("WITNESS"),
/** Tow log entry. */
TOW ("TOW"),
/** Service log entry. */
SERVICE ("SERVICE"),
/** Updated entries. */
UPDATES ("UPDATES");
public String tag;
private XML_TAGS(String t) {
tag = t;
}
}
/** Header data. */
private IncidentInquiryHeader header = null;
/** List of Detail objects. */
private Vector details = null;
/** List of UnitsAssigned objects. */
private Vector units = null;
/** List of Detail objects. */
private Vector witnesses = null;
/** List of Tow objects. */
private Vector tows = null;
/** List of Service objects. */
private Vector services = null;
/*
private boolean detailsUpdated = false;
private boolean unitsUpdated = false;
private boolean towsUpdated = false;
private boolean witnessesUpdated = false;
private boolean servicesUpdated = false;
*/
/**
* Origin of this object's data. Options include "Script" or "CAD #",
* where # is a CAD position
*/
private String source = "";
/**
* Construtor. Initialize all local lists of IncidentInquiry objects.
* Set source to "Script".
*/
public IncidentInquiryModel_obj() {
source = "Script";
header = new IncidentInquiryHeader();
details = new Vector();
units = new Vector();
witnesses = new Vector();
tows = new Vector();
services = new Vector();
}
/**
* Constructor. Initialie all local lists of IncidentInquiry objects.
* Set srouce to "CAD #".
*
* @param CADPosition Integer value for the originating CAD position of this object's data.
*/
public IncidentInquiryModel_obj(int CADPosition) {
source = "CAD " + CADPosition;
header = new IncidentInquiryHeader();
details = new Vector();
units = new Vector();
witnesses = new Vector();
tows = new Vector();
services = new Vector();
}
/**
* Copy Constructor.
*
* @param newIIMO Object containing data to be copied into constructed object.
*/
public IncidentInquiryModel_obj(IncidentInquiryModel_obj newIIMO) {
source = newIIMO.source;
header = new IncidentInquiryHeader(newIIMO.header);
details = new Vector(newIIMO.details);
units = new Vector(newIIMO.units);
witnesses = new Vector(newIIMO.witnesses);
tows = new Vector(newIIMO.tows);
services = new Vector(newIIMO.services);
}
/**
* This method updates the private lists of IncidentInquiry data with `
* data contained in the parameter object.
*
* @param newObject Object containing IncidentInquiry data that will
* be used to update local IncidentInquiry lists.
*/
public void update(IncidentInquiryModel_obj newObject) {
header.update(newObject.header);
details.addAll(newObject.getDetails());
//Do not want duplicate units in the vector
for(IncidentInquiryUnitsAssigned unit : newObject.getUnits()) {
if(units.contains(unit)) {
IncidentInquiryUnitsAssigned oldUnit = units.get(units.indexOf(unit));
/*
if(oldUnit.isActive != unit.isActive ||
oldUnit.isPrimary != unit.isPrimary ||
oldUnit.statusType != unit.statusType)
{
unitsUpdated |= true;
}
*/
units.remove(oldUnit);
}
units.add(unit);
}
witnesses.addAll(newObject.getWitnesses());
tows.addAll(newObject.getTows());
services.addAll(newObject.getServices());
/*
detailsUpdated |= newObject.getDetails().size() > 0;
witnessesUpdated |= newObject.getWitnesses().size() > 0;
towsUpdated |= newObject.getTows().size() > 0;
servicesUpdated |= newObject.getServices().size() > 0;
*/
}
public void toXML(Element currElem) {
Document theDoc = currElem.getOwnerDocument();
/*
Element updatesElem = theDoc.createElement(UPDATES);
currElem.appendChild(updatesElem);
Element updateElem = theDoc.createElement(DETAIL);
updateElem.appendChild(theDoc.createTextNode(String.valueOf(detailsUpdated)));
updatesElem.appendChild(updateElem);
updateElem = theDoc.createElement(UNIT);
updateElem.appendChild(theDoc.createTextNode(String.valueOf(unitsUpdated)));
updatesElem.appendChild(updateElem);
updateElem = theDoc.createElement(WITNESS);
updateElem.appendChild(theDoc.createTextNode(String.valueOf(witnessesUpdated)));
updatesElem.appendChild(updateElem);
updateElem = theDoc.createElement(TOW);
updateElem.appendChild(theDoc.createTextNode(String.valueOf(towsUpdated)));
updatesElem.appendChild(updateElem);
updateElem = theDoc.createElement(SERVICE);
updateElem.appendChild(theDoc.createTextNode(String.valueOf(servicesUpdated)));
updatesElem.appendChild(updateElem);
*/
Element headerElem = theDoc.createElement(XML_TAGS.HEADER.tag);
header.toXML(headerElem);
currElem.appendChild(headerElem);
Element detailElem = null;
for(IncidentInquiryDetails detail : details) {
detailElem = theDoc.createElement(XML_TAGS.DETAIL.tag);
detail.toXML(detailElem);
currElem.appendChild(detailElem);
}
Element unitElem = null;
for(IncidentInquiryUnitsAssigned unit : units) {
unitElem = theDoc.createElement(XML_TAGS.UNIT.tag);
unit.toXML(unitElem);
currElem.appendChild(unitElem);
}
Element witnessElem = null;
for(IncidentInquiryWitnesses witness : witnesses) {
witnessElem = theDoc.createElement(XML_TAGS.WITNESS.tag);
witness.toXML(witnessElem);
currElem.appendChild(witnessElem);
}
Element towElem = null;
for(IncidentInquiryTows tow : tows) {
towElem = theDoc.createElement(XML_TAGS.TOW.tag);
tow.toXML(towElem);
currElem.appendChild(towElem);
}
Element serviceElem = null;
for(IncidentInquiryServices service : services) {
serviceElem = theDoc.createElement(XML_TAGS.SERVICE.tag);
service.toXML(serviceElem);
currElem.appendChild(serviceElem);
}
}
public void fromXML(Node modelNode) {
Node currentNode = modelNode;
//Node updateNode = null;
String nodeName = null;
details.clear();
units.clear();
witnesses.clear();
tows.clear();
services.clear();
/*
updateNode = currentNode.getFirstChild();
detailsUpdated = Boolean.parseBoolean(updateNode.getTextContent());
updateNode = updateNode.getNextSibling();
unitsUpdated = Boolean.parseBoolean(updateNode.getTextContent());
updateNode = updateNode.getNextSibling();
witnessesUpdated = Boolean.parseBoolean(updateNode.getTextContent());
updateNode = updateNode.getNextSibling();
towsUpdated = Boolean.parseBoolean(updateNode.getTextContent());
updateNode = updateNode.getNextSibling();
servicesUpdated = Boolean.parseBoolean(updateNode.getTextContent());
*/
header = new IncidentInquiryHeader(currentNode);
while((currentNode = currentNode.getNextSibling()) != null) {
nodeName = currentNode.getNodeName();
if(nodeName.equals(XML_TAGS.DETAIL.tag)) {
details.add(new IncidentInquiryDetails(currentNode));
}
else if(nodeName.equals(XML_TAGS.UNIT.tag)) {
units.add(new IncidentInquiryUnitsAssigned(currentNode));
}
else if(nodeName.equals(XML_TAGS.WITNESS.tag)) {
witnesses.add(new IncidentInquiryWitnesses(currentNode));
}
else if(nodeName.equals(XML_TAGS.TOW.tag)) {
tows.add(new IncidentInquiryTows(currentNode));
}
else if(nodeName.equals(XML_TAGS.SERVICE.tag)) {
services.add(new IncidentInquiryServices(currentNode));
}
}
}
/**
* Applies the parameter timestamp to all IncidentInquiry objects.
*
* @param timeStamp String containing timestamp
*/
public void timeStamp(String timeStamp) {
for(IncidentInquiryDetails detail : details)
detail.timeStamp(timeStamp);
for(IncidentInquiryUnitsAssigned unit : units) {
unit.timeStamp(timeStamp);
}
for(IncidentInquiryWitnesses witness : witnesses) {
witness.timeStamp(timeStamp);
}
for(IncidentInquiryTows tow : tows) {
tow.timeStamp(timeStamp);
}
for(IncidentInquiryServices service : services) {
service.timeStamp(timeStamp);
}
}
/**
* Gets the log number value for this IncidentInquiry object.
*
* @return Integer Log number value
*/
public Integer getLogNumber() {
return header.logNumber;
}
/**
* Sets this objects log number to a new value.
*
* @param logNum New log number.
*/
public void setLogNumber(Integer logNum) {
header.logNumber = logNum;
}
public IncidentInquiryHeader getHeader() {return header;}
public Vector getDetails() {return details;}
public Vector getUnits() {return units;}
public Vector getWitnesses() {return witnesses;}
public Vector getTows() {return tows;}
public Vector getServices() {return services;}
public void setHeader(IncidentInquiryHeader newHeader) {header = newHeader;}
public void addDetail(IncidentInquiryDetails newDetail) {details.add(newDetail);}
public void addUnit(IncidentInquiryUnitsAssigned newUnit) {
if(units.contains(newUnit)) {
units.remove(newUnit);
}
units.add(newUnit);
}
public void addWitness(IncidentInquiryWitnesses newWitness) {witnesses.add(newWitness);}
public void addTow(IncidentInquiryTows newTow) {tows.add(newTow);}
public void addService(IncidentInquiryServices newService) {services.add(newService);}
/*
public boolean getDetailsUpdated() { return detailsUpdated; }
public boolean getUnitsUpdated() { return unitsUpdated; }
public boolean getTowsUpdated() { return towsUpdated; }
public boolean getWitnessesUpdated() { return witnessesUpdated; }
public boolean getServicesUpdated() { return servicesUpdated; }
*/
public String getSource() {
return source;
}
}