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; /** * IncidentInquiryDetails extends from IncidentInquiryLogEntry to provide a * model object containing information used to display a detail log entry. * Data for a detail includes a String of text.
*
* This element parses and creates the following XML schema in its toXML() and * fromXML() methods. The ROOT element is the parameter for those methods.
*
*
*
*
*

* * @author Matthew Cechini * @version */ @SuppressWarnings("serial") public class IncidentInquiryDetails extends IncidentInquiryLogEntry implements Serializable { /** * Enumeration with XML tag names. * @author Matthew Cechini */ private static enum XML_TAGS { /** Detail Text. */ TEXT ("TEXT"); public String tag; private XML_TAGS(String t) { tag = t; } } /** Detail text. */ public String details; /** */ public Boolean sensitive; //public boolean highlighted; /** * Constructor. Initialize all detail data to empty strings or false. * * @param newPosInfo String containing position info for this log entry */ public IncidentInquiryDetails(String newPosInfo, Boolean sens) { super(newPosInfo, "0000"); details = ""; sensitive = sens; } /** * Constructor. Initialize all detail data to the parameter. * * @param newPosInfo String containing position info for this log entry. * @param newDetails String containing detail text for this log entry. */ public IncidentInquiryDetails(String newPosInfo, String newDetails, Boolean sens) { super(newPosInfo, "0000"); details = newDetails; sensitive = sens; } /** * Constructor. Parse parameter node for Detail log entry data. * * @param theNode Node containing data for this Detail log entry */ public IncidentInquiryDetails(Node theNode) { fromXML(theNode); } public void toXML(Element currElem) { Document theDoc = currElem.getOwnerDocument(); Element tempElem = null; tempElem = theDoc.createElement(XML_TAGS.TEXT.tag); tempElem.appendChild(theDoc.createTextNode(details)); currElem.appendChild(tempElem); super.toXML(currElem); } public void fromXML(Node modelNode) { Node childNode = null; childNode = modelNode.getFirstChild(); details = childNode.getTextContent(); childNode = childNode.getNextSibling(); super.fromXML(childNode); } /** * Parse the details text into a list of endline terminated strings which are * no longer than the parameter width. Words which would be split by an endline * are moved in whole to the next line. Words longer than a line width are split * accordingly. * * @param width Line width used for parsing details * @return A vector of endline terminated detail strings. */ public Vector parseDetails(int width) { Vector parsedDetails = new Vector(); int currPos = 0; int spaceIdx = 0; while((details.length() - currPos) > width) { spaceIdx = details.substring(currPos, currPos + width).lastIndexOf(" "); if(spaceIdx > 0) { parsedDetails.add(details.substring(currPos, currPos + spaceIdx).trim() + "\n"); currPos += spaceIdx; } else { parsedDetails.add(details.substring(currPos, currPos + width).trim() + "\n"); currPos += width; } } //remainder parsedDetails.add(details.substring(currPos).trim() + "\n"); return parsedDetails; } }