package com.iambookmaster.server; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import com.iambookmaster.client.common.JSONParser; import com.iambookmaster.client.common.XMLBuilder; public class XMLModelParser extends JSONParser { @Override public Object getRow(Object o, int r) { return ((Node) o).getChildNodes().item(r); } @Override public int length(Object o) { return ((Node)o).getChildNodes().getLength(); } @Override public Object property(Object o, String f) { Node node = getChildNodeByName(o,f,false); if (node==null) { throw new IllegalArgumentException(f); } return node; } private Node getChildNodeByName(Object o, String f,boolean direct) { Node item = ((Node) o).getFirstChild(); if (item==null) { return null; } if (XMLBuilder.FIELD_OBJECT.equals(item.getNodeName())) { return directChildNodeByName(item,f); } else if (direct){ return directChildNodeByName(o,f); } else { //wrong XML throw new IllegalArgumentException("Wrong XML struture"); } } private Node directChildNodeByName(Object o, String f) { NodeList list = ((Node)o).getChildNodes(); for (int i = 0; i < list.getLength(); i++) { Node node = list.item(i); if (f.equals(node.getNodeName())) { return node; } } return null; } @Override public boolean propertyBoolean(Object o, String f) { Node node = getChildNodeByName(o,f,true); return Boolean.parseBoolean(node.getTextContent()); } @Override public int propertyInt(Object o, String f) { Node node = getChildNodeByName(o,f,true); return Integer.parseInt(node.getTextContent()); } @Override public Object propertyNoCheck(Object o, String f) { Node node = getChildNodeByName(o,f,true); return node; } @Override public boolean propertyNoCheckBoolean(Object o, String f) { Node node = getChildNodeByName(o,f,true); if (node==null) { return false; } else { return Boolean.parseBoolean(node.getTextContent()); } } @Override public int propertyNoCheckInt(Object o, String f) { Node node = getChildNodeByName(o,f,true); if (node==null) { return 0; } else { return Integer.parseInt(node.getTextContent()); } } @Override public String propertyNoCheckString(Object o, String f) { Node node = getChildNodeByName(o,f,true); if (node==null) { return null; } else { return node.getTextContent(); } } @Override public String propertyString(Object o, String f) { Node node = getChildNodeByName(o,f,true); return node.getTextContent(); } @Override public Object propertyDirect(Object o, String f) { Node node = getChildNodeByName(o,f,true); if (node==null) { throw new IllegalArgumentException(f); } return node; } @Override public Object propertyDirectNoCheck(Object o, String f) { return getChildNodeByName(o,f,true); } }