package com.rubiconproject.oss.kv.distributed.impl; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import com.rubiconproject.oss.kv.distributed.ConfigurationException; import com.rubiconproject.oss.kv.distributed.Node; import com.rubiconproject.oss.kv.distributed.NodeListParser; /** * Parses an xml document describing a list of nodes. * * <node-list> * <node> * <id>1</id> * <physical-id>1</physical-id> * <salt>some-unique-semi-random-string-1</salt> * <connection-uri>tyrant://host1:1978?socketTimeout=200&maxActive=5</connection-uri> * </node> * <node> * <id>2</id> * <physical-id>1</physical-id> * <salt>some-unique-semi-random-string-2</salt> * <connection-uri>tyrant://host1:1979?socketTimeout=200&maxActive=5</connection-uri> * </node> * <node> * <id>3</id> * <physical-id>2</physical-id> * <salt>some-unique-semi-random-string-3</salt> * <connection-uri>tyrant://host2:1978?socketTimeout=200&maxActive=5</connection-uri> * </node> * </node-list> * * @author sam * */ public class XmlNodeListParser implements NodeListParser { public List<Node> parse(InputStream is) throws IOException, ConfigurationException { try { SAXBuilder saxBuilder = new SAXBuilder(); Document doc = saxBuilder.build(is); Element root = doc.getRootElement(); List<Element> nodeElementList = root.getChildren("node"); List<Node> result = new ArrayList<Node>(nodeElementList.size()); for (Element nodeElement : nodeElementList) { Node node = parse(nodeElement); result.add(node); } return result; } catch (JDOMException e) { throw new ConfigurationException(e); } finally { } } private Node parse(Element el) { DefaultNodeImpl node = new DefaultNodeImpl(); node.setConnectionURI(el.getChildText("connection-uri")); node.setId(Integer.parseInt(el.getChildText("id"))); node.setPhysicalId(Integer.parseInt(el.getChildText("physical-id"))); node.setSalt(el.getChildText("salt")); return node; } }