package org.wordcorr.db; import javax.xml.soap.*; import java.sql.*; import java.util.*; /** * Sets parameters for database operations. * @author Jim Shiba **/ public class StatementParameters { /** * Constructor. **/ public StatementParameters () { this(null, null, null); } /** * Constructor. **/ public StatementParameters (String table, String action, List data) { _table = table; _action = action; _data = data; _parameters = getDefinitionParameters(_table, _action); } /** * Get definition parameters. **/ private List getDefinitionParameters(String table, String action) { if (table == null || action == null) return null; // get definition for table ParameterDefinitions.Definition defn = ParameterDefinitions.getInstance(). getDefinition(table); if (defn != null) { // get action definitions return defn.getParameters(action); } else { System.out.println("StatementParameters.getDefinitionParameters: Definition is NULL"); return null; } } /** * Get action. **/ public String getAction() { return _action; } /** * Get table. **/ public String getTable() { return _table; } /** * Check if another value exists. **/ public boolean hasNext() { if (_data == null || _data.isEmpty() || _parameters == null) return false; return (_index < _data.size()); } /** * Set statement parameters for next record. **/ public RowData setNext(PreparedStatement stmt) throws SQLException { // initialize stmt.clearParameters(); // get row data RowData rowData = (RowData)_data.get(_index++); Map row = rowData.getData(); for (Iterator it = _parameters.iterator(); it.hasNext();) { ParameterDefinitions.ActionParameter parameter = (ParameterDefinitions.ActionParameter)it.next(); switch (parameter.getType()) { case ParameterDefinitions.STRING: stmt.setString(parameter.getOrder(), (String)row.get(parameter.getID())); break; case ParameterDefinitions.LONG: stmt.setLong(parameter.getOrder(), Long.parseLong((String)row.get(parameter.getID()))); break; case ParameterDefinitions.TIMESTAMP: stmt.setTimestamp(parameter.getOrder(), new java.sql.Timestamp( Long.parseLong((String)row.get(parameter.getID())))); break; default: break; } } return rowData; } /** * Set statement parameters from SOAPMessage. **/ public void setParameters(SOAPMessage msg) { _data = new ArrayList(); try { SOAPPart soapPart = msg.getSOAPPart(); SOAPEnvelope envelope = soapPart.getEnvelope(); SOAPBody body = envelope.getBody(); for (Iterator it = body.getChildElements(); it.hasNext();) { SOAPBodyElement bodyElem = (SOAPBodyElement)it.next(); // get table data Name name = bodyElem.getElementName(); if (name.getPrefix().equals("m")) { _action = name.getLocalName(); _table = bodyElem.getAttributeValue(envelope.createName("table")); System.out.println("StatementParameters.setParameters: table="+_table); for (Iterator it2 = bodyElem.getChildElements(); it2.hasNext();) { SOAPElement rowElem = (SOAPElement)it2.next(); // create RowData object and add to list RowData row = new RowData(); _data.add(row); HashMap data = new HashMap(); row.setData(data); for (Iterator it3 = rowElem.getChildElements(); it3.hasNext();) { SOAPElement dataElem = (SOAPElement)it3.next(); // get row properties data.put(dataElem.getElementName().getLocalName(), dataElem.getValue()); System.out.println("StatementParameters.setParameters: "+dataElem.getElementName().getLocalName()+"="+dataElem.getValue()); } // save id for result return if (data.containsKey("id")) row.setID(Long.parseLong((String)data.get("id"))); } } } } catch (Exception e) { e.printStackTrace(); } _parameters = getDefinitionParameters(_table, _action); } private int _index = 0; private List _parameters; private List _data; private String _action; private String _table; }