package org.trade.broker.request; import java.io.CharArrayWriter; import java.text.ParseException; import java.util.Stack; import org.trade.core.dao.Aspects; import org.trade.core.xml.SaxMapper; import org.trade.core.xml.TagTracker; import org.trade.core.xml.XMLModelException; import org.trade.persistent.dao.Account; import org.trade.persistent.dao.Portfolio; import org.trade.persistent.dao.PortfolioAccount; import org.xml.sax.Attributes; public class TWSAllocationRequest extends SaxMapper { private Aspects m_target = null; private final Stack<Object> m_stack = new Stack<Object>(); public TWSAllocationRequest() throws XMLModelException { super(); } public Object getMappedObject() { return m_target; } public TagTracker createTagTrackerNetwork() throws ParseException { // -- create root: / final TagTracker rootTagTracker = new TagTracker() { public void onDeactivate() { // The root will be deactivated when // parsing a new document begins. // clear the stack m_stack.removeAllElements(); // create the root "dir" object. m_target = new Aspects(); // push the root dir on the stack... } }; final TagTracker allocationProfileTracker = new TagTracker() { public void onStart(String namespaceURI, String localName, String qName, Attributes attr) { Portfolio aspect = new Portfolio(); m_target.add(aspect); m_stack.push(aspect); } public void onEnd(String namespaceURI, String localName, String qName, CharArrayWriter contents) { // Clean up the directory stack... m_stack.pop(); } }; rootTagTracker.track("ListOfAllocationProfiles/AllocationProfile", allocationProfileTracker); allocationProfileTracker.track("AllocationProfile", allocationProfileTracker); final TagTracker nameTracker = new TagTracker() { public void onStart(String namespaceURI, String localName, String qName, Attributes attr) { } public void onEnd(String namespaceURI, String localName, String qName, CharArrayWriter contents) { final String value = new String(contents.toString()); final Portfolio temp = (Portfolio) m_stack.peek(); temp.setName(value); } }; allocationProfileTracker.track("AllocationProfile/name", nameTracker); nameTracker.track("name", nameTracker); final TagTracker typeTracker = new TagTracker() { public void onStart(String namespaceURI, String localName, String qName, Attributes attr) { } public void onEnd(String namespaceURI, String localName, String qName, CharArrayWriter contents) { final String value = new String(contents.toString()); final Portfolio temp = (Portfolio) m_stack.peek(); temp.setAllocationMethod(value); } }; allocationProfileTracker.track("AllocationProfile/type", typeTracker); typeTracker.track("type", typeTracker); final TagTracker listOfAllocationsTracker = new TagTracker() { public void onStart(String namespaceURI, String localName, String qName, Attributes attr) { final Portfolio temp = (Portfolio) m_stack.peek(); m_stack.push(temp); } public void onEnd(String namespaceURI, String localName, String qName, CharArrayWriter contents) { // Clean up the directory stack... m_stack.pop(); } }; allocationProfileTracker.track("AllocationProfile/ListOfAllocations", listOfAllocationsTracker); listOfAllocationsTracker.track("ListOfAllocations", listOfAllocationsTracker); final TagTracker allocationTracker = new TagTracker() { public void onStart(String namespaceURI, String localName, String qName, Attributes attr) { final Portfolio portfolio = (Portfolio) m_stack.peek(); PortfolioAccount temp = new PortfolioAccount(portfolio, new Account()); portfolio.getPortfolioAccounts().add(temp); m_stack.push(temp); } public void onEnd(String namespaceURI, String localName, String qName, CharArrayWriter contents) { // Clean up the directory stack... m_stack.pop(); } }; allocationProfileTracker.track("ListOfAllocations/Allocation", allocationTracker); allocationTracker.track("Allocation", allocationTracker); final TagTracker acctTracker = new TagTracker() { public void onStart(String namespaceURI, String localName, String qName, Attributes attr) { } public void onEnd(String namespaceURI, String localName, String qName, CharArrayWriter contents) { final String value = new String(contents.toString()); PortfolioAccount temp = (PortfolioAccount) m_stack.peek(); temp.getAccount().setAccountNumber(value); } }; allocationTracker.track("Allocation/acct", acctTracker); acctTracker.track("acct", acctTracker); final TagTracker amountTracker = new TagTracker() { public void onStart(String namespaceURI, String localName, String qName, Attributes attr) { } public void onEnd(String namespaceURI, String localName, String qName, CharArrayWriter contents) { // final String value = new String(contents.toString()); // final PortfolioAccount aspect = (PortfolioAccount) m_stack // .peek(); // aspect.setAmount(new BigDecimal(value)); } }; allocationTracker.track("Allocation/amount", amountTracker); amountTracker.track("amount", amountTracker); final TagTracker posEffTracker = new TagTracker() { public void onStart(String namespaceURI, String localName, String qName, Attributes attr) { } public void onEnd(String namespaceURI, String localName, String qName, CharArrayWriter contents) { // final String value = new String(contents.toString()); // PortfolioAccount temp = (PortfolioAccount) m_stack.peek(); // .peek(); // temp.setPosEff(value); } }; allocationTracker.track("Allocation/posEff", posEffTracker); posEffTracker.track("posEff", posEffTracker); return rootTagTracker; } }