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 TWSGroupRequest extends SaxMapper { private Aspects m_target = null; private final Stack<Object> m_stack = new Stack<Object>(); public TWSGroupRequest() 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(); } }; final TagTracker groupsTracker = 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("ListOfGroups/Group", groupsTracker); groupsTracker.track("Group", groupsTracker); 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); } }; groupsTracker.track("Group/name", nameTracker); nameTracker.track("name", nameTracker); final TagTracker methodTracker = 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); } }; groupsTracker.track("Group/defaultMethod", methodTracker); methodTracker.track("defaultMethod", methodTracker); final TagTracker listOfAcctsTracker = 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(); } }; groupsTracker.track("Group/ListOfAccts", listOfAcctsTracker); listOfAcctsTracker.track("ListOfAccts", listOfAcctsTracker); final TagTracker accountTracker = 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 portfolio = (Portfolio) m_stack.peek(); PortfolioAccount temp = new PortfolioAccount(portfolio, new Account()); portfolio.getPortfolioAccounts().add(temp); temp.getAccount().setAccountNumber(value); } }; listOfAcctsTracker.track("ListOfAccts/String", accountTracker); accountTracker.track("String", accountTracker); return rootTagTracker; } }