package org.entermedia.email; import java.io.Serializable; import java.io.StringReader; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import com.openedit.OpenEditException; public class ElasticPostMailStatus extends PostMailStatus implements Serializable{ private static final long serialVersionUID = -4640935230997089177L; protected int fieldRecipients; protected int fieldDelivered; protected int fieldFailed; protected int fieldPending; protected int fieldOpened; protected int fieldClicked; protected int fieldUnsubscribed; protected int fieldAbusereports; public int getRecipients() { return fieldRecipients; } public void setRecipients(int inRecipients) { fieldRecipients = inRecipients; } public int getDelivered() { return fieldDelivered; } public void setDelivered(int inDelivered) { fieldDelivered = inDelivered; } public int getFailed() { return fieldFailed; } public void setFailed(int inFailed) { fieldFailed = inFailed; } public int getPending() { return fieldPending; } public void setPending(int inPending) { fieldPending = inPending; } public int getOpened() { return fieldOpened; } public void setOpened(int inOpened) { fieldOpened = inOpened; } public int getClicked() { return fieldClicked; } public void setClicked(int inClicked) { fieldClicked = inClicked; } public int getUnsubscribed() { return fieldUnsubscribed; } public void setUnsubscribed(int inUnsubscribed) { fieldUnsubscribed = inUnsubscribed; } public int getAbusereports() { return fieldAbusereports; } public void setAbusereports(int inAbusereports) { fieldAbusereports = inAbusereports; } public static ElasticPostMailStatus parseXML(String xml){ ElasticPostMailStatus status = new ElasticPostMailStatus(); status.setSent(false); try{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); DocumentBuilder dBuilder = factory.newDocumentBuilder(); Document doc = dBuilder.parse(new InputSource(new StringReader(xml))); if (doc.hasChildNodes()){ NodeList nl = doc.getChildNodes(); processNodes(nl,status); } } catch (Exception e){ e.printStackTrace(); throw new OpenEditException(e.getMessage(),e); } return status; } protected static void processNodes(NodeList nl, ElasticPostMailStatus status){ for (int i=0; i < nl.getLength(); i++){ Node node = nl.item(i); if (node.getNodeType() != Node.ELEMENT_NODE || node.getNodeName()==null) continue; if (node.hasAttributes()){ NamedNodeMap nm = node.getAttributes(); for (int j=0; j < nm.getLength(); j++){ Node n = nm.item(j); if (n.getNodeName()!=null && n.getNodeName().equalsIgnoreCase("id")){ status.setId(n.getNodeValue()); status.setSent(true); } } } if (node.getNodeName().equalsIgnoreCase("status")){ status.setStatus(node.getTextContent()); } else if (node.getNodeName().equalsIgnoreCase("recipients")){ status.setRecipients(Integer.parseInt(node.getTextContent())); } else if (node.getNodeName().equalsIgnoreCase("failed")){ status.setFailed(Integer.parseInt(node.getTextContent())); } else if (node.getNodeName().equalsIgnoreCase("delivered")){ status.setDelivered(Integer.parseInt(node.getTextContent())); } else if (node.getNodeName().equalsIgnoreCase("pending")){ status.setPending(Integer.parseInt(node.getTextContent())); } else if (node.getNodeName().equalsIgnoreCase("opened")){ status.setOpened(Integer.parseInt(node.getTextContent())); } else if (node.getNodeName().equalsIgnoreCase("clicked")){ status.setClicked(Integer.parseInt(node.getTextContent())); } else if (node.getNodeName().equalsIgnoreCase("unsubscribed")){ status.setUnsubscribed(Integer.parseInt(node.getTextContent())); } else if (node.getNodeName().equalsIgnoreCase("abusereports")){ status.setAbusereports(Integer.parseInt(node.getTextContent())); } if (node.hasChildNodes()){ processNodes(node.getChildNodes(),status); } } } public String toString(){ StringBuilder buf = new StringBuilder(); buf.append("id: ").append(fieldId).append(" [") .append("isSent: ").append(fieldSent).append(", ") .append("status: ").append(fieldStatus).append(", ") .append("recipients: ").append(fieldRecipients).append(", ") .append("failed: ").append(fieldFailed).append(", ") .append("delivered: ").append(fieldDelivered).append(", ") .append("pending: ").append(fieldPending).append(", ") .append("opened: ").append(fieldOpened).append(", ") .append("clicked: ").append(fieldClicked).append(", ") .append("unsubscribed: ").append(fieldUnsubscribed).append(", ") .append("abusereports: ").append(fieldAbusereports).append("]"); return buf.toString(); } }