package org.wordcorr.net; import javax.xml.soap.*; import java.util.*; import org.wordcorr.db.Database; import org.wordcorr.db.RowData; import org.wordcorr.db.StatementParameters; /** * Handler to add new records. * @author Jim Shiba */ public class AddNewHandler extends Handler { /** * Run handler. **/ public SOAPMessage run(SOAPMessage msg, Database db) { _db = db; SOAPMessage resultMsg; StatementParameters parameters = new StatementParameters(); parameters.setParameters(msg); try { List results = db.insertRecords(parameters); resultMsg = getResultMessage(results); } catch (Exception e) { e.printStackTrace(); return null; } return resultMsg; } /** * Get result SOAPMessage to be returned to client. **/ private SOAPMessage getResultMessage(List results) { SOAPMessage message = null; try { message = MessageFactory.newInstance().createMessage(); // setup message SOAPPart soapPart = message.getSOAPPart(); SOAPEnvelope envelope = soapPart.getEnvelope(); SOAPBody body = envelope.getBody(); Name name = envelope.createName("AddNew.Results", "m", _db.getName()); SOAPBodyElement bodyElem = body.addBodyElement(name); bodyElem.addAttribute(envelope.createName("table"), "Variety"); Name rowName = envelope.createName("row"); for (Iterator it = results.iterator(); it.hasNext(); ) { RowData row = (RowData)it.next(); // id is key to client record // remoteID is key to server record // timestamp is from server record SOAPElement rowElem = bodyElem.addChildElement(rowName); SOAPElement dataElem = rowElem.addChildElement(envelope.createName("id")); dataElem.addTextNode("" + row.getID()); dataElem = rowElem.addChildElement(envelope.createName("remoteID")); dataElem.addTextNode("" + row.getRemoteID()); dataElem = rowElem.addChildElement(envelope.createName("timestamp")); dataElem.addTextNode("" + row.getTimestamp().getTime()); } message.saveChanges(); } catch (Exception e) { e.printStackTrace(); } return message; } private Database _db; private List _data = new ArrayList(); private String _table; }