package gw.rating.worksheet.domain uses java.lang.StringBuilder uses gw.xml.parser2.PLXMLNode uses gw.rating.worksheet.WorksheetUtil uses java.util.LinkedList uses java.util.List /** * Encapsulates a function call along with its return value and all operands * */ class WorksheetFunction extends WorksheetOperand implements WorksheetEntryContainer{ var _name : String as Name var _type : String as Type = "Function" var _objectName : String as ObjectName var _objectValue : Object as ObjectValue var _class : String as ClassName var _entries : List as WorksheetEntries = new LinkedList() // optimize for append override function pseudoCode( buffer : StringBuilder, includeValues : boolean){ buildStringStart(buffer, includeValues) if (_objectName.HasContent) { buffer.append("${_objectName}") } else if (_class.HasContent) { buffer.append("${_class}") } buffer.append(".${_name}") buffer.append("(") WorksheetOperands.eachWithIndex(\ o, i -> { o.pseudoCode(buffer, includeValues) if (i < WorksheetOperands.Count - 1) { buffer.append(", ") } }) buffer.append(")") if (includeValues) { buffer.append("<${Value}>") } buildStringEnd(buffer, includeValues) } override function toXml() : PLXMLNode { var node = new PLXMLNode(WorksheetClass) node.setAttributeValue("Name", _name) node.setAttributeValue("ClassName", _class) node.setAttributeValue("Type", _type) if (_objectName.HasContent) { node.setAttributeValue("ObjectName", _objectName) node.setAttributeValue("ObjectValue", WorksheetUtil.serializeObject(_objectValue)) } writeXml(node) return node } override function fromXml(node : PLXMLNode) { _name = node.getAttributeValue("Name") _class = node.getAttributeValue("ClassName") _type = node.getAttributeValue("Type") if ( node.getAttributeValue("ObjectName").HasContent ) { _objectName = node.getAttributeValue("ObjectName") _objectValue = WorksheetUtil.deserializeObject( node.getAttributeValue("ObjectValue") , _class) } readXml(node) } override property get WorksheetClass(): String { return "Function" } }