diff --git a/utils/src/com/cloud/utils/exception/CloudRuntimeException.java b/utils/src/com/cloud/utils/exception/CloudRuntimeException.java index 78075947d3f..dabb715086f 100755 --- a/utils/src/com/cloud/utils/exception/CloudRuntimeException.java +++ b/utils/src/com/cloud/utils/exception/CloudRuntimeException.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.utils.exception; +import java.io.FileNotFoundException; + import com.cloud.utils.SerialVersionUID; /** @@ -36,4 +38,8 @@ public class CloudRuntimeException extends RuntimeCloudException { protected CloudRuntimeException() { super(); } + + public CloudRuntimeException(Throwable t) { + super(t); + } } diff --git a/utils/src/com/cloud/utils/exception/RuntimeCloudException.java b/utils/src/com/cloud/utils/exception/RuntimeCloudException.java old mode 100644 new mode 100755 index a2de5161596..422d66cfb17 --- a/utils/src/com/cloud/utils/exception/RuntimeCloudException.java +++ b/utils/src/com/cloud/utils/exception/RuntimeCloudException.java @@ -64,6 +64,10 @@ public class RuntimeCloudException extends RuntimeException { setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); } + public RuntimeCloudException(Throwable t) { + super(t); + } + public ArrayList getIdProxyList() { return idList; } diff --git a/utils/src/com/cloud/utils/xmlobject/XmlObject.java b/utils/src/com/cloud/utils/xmlobject/XmlObject.java new file mode 100755 index 00000000000..4ebf3718113 --- /dev/null +++ b/utils/src/com/cloud/utils/xmlobject/XmlObject.java @@ -0,0 +1,117 @@ +package com.cloud.utils.xmlobject; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import org.xml.sax.SAXException; + +import com.cloud.utils.exception.CloudRuntimeException; + +import edu.emory.mathcs.backport.java.util.Collections; + +public class XmlObject { + private Map elements = new HashMap(); + private String text; + private String tag; + + XmlObject() { + } + + XmlObject putElement(String key, Object e) { + Object old = elements.get(key); + if (old == null) { + System.out.println(String.format("no %s, add new", key)); + elements.put(key, e); + } else { + if (old instanceof List) { + System.out.println(String.format("already list %s, add", key)); + ((List)old).add(e); + } else { + System.out.println(String.format("not list list %s, add list", key)); + List lst = new ArrayList(); + lst.add(old); + lst.add(e); + elements.put(key, lst); + } + } + + return this; + } + + private Object recurGet(XmlObject obj, Iterator it) { + String key = it.next(); + Object e = obj.elements.get(key); + if (!it.hasNext()) { + return e; + } else { + if (!(e instanceof XmlObject)) { + throw new CloudRuntimeException(String.format("%s doesn't reference to a XmlObject", it.next())); + } + return recurGet((XmlObject) e, it); + } + } + + public T get(String elementStr) { + String[] strs = elementStr.split("\\."); + List lst = new ArrayList(strs.length); + Collections.addAll(lst, strs); + return (T)recurGet(this, lst.iterator()); + } + + public List getAsList(String elementStr) { + Object e = get(elementStr); + if (e instanceof List) { + return (List)e; + } + List lst = new ArrayList(1); + lst.add(e); + return lst; + } + + public String getText() { + return text; + } + + void setText(String text) { + this.text = text; + } + + public String getTag() { + return tag; + } + + void setTag(String tag) { + this.tag = tag; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder("<" + tag); + for (Map.Entry e : elements.entrySet()) { + String key = e.getKey(); + Object value = e.getValue(); + if (!(value instanceof String)) { + continue; + } + sb.append(String.format(" %s=\"%s\"", key, value.toString())); + } + + if (text == null || "".equals(text.trim())) { + sb.append(" />"); + } else { + sb.append(">").append(text).append(String.format("", tag)); + } + return sb.toString(); + } +} diff --git a/utils/src/com/cloud/utils/xmlobject/XmlObjectParser.java b/utils/src/com/cloud/utils/xmlobject/XmlObjectParser.java new file mode 100755 index 00000000000..68a822f5429 --- /dev/null +++ b/utils/src/com/cloud/utils/xmlobject/XmlObjectParser.java @@ -0,0 +1,107 @@ +package com.cloud.utils.xmlobject; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.util.Stack; + +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +import com.cloud.utils.exception.CloudRuntimeException; + +public class XmlObjectParser { + final private InputStream is; + + private class XmlHandler extends DefaultHandler { + private Stack stack; + private String currentValue; + private XmlObject root; + + XmlHandler() { + stack = new Stack(); + } + + @Override + public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { + //System.out.println(String.format("startElement: namespaceURI:%s, localName:%s, qName:%s", namespaceURI, localName, qName)); + currentValue = null; + XmlObject obj = new XmlObject(); + for (int i=0; i lst = xo.get("management-server.adapters"); + for (XmlObject x : lst) { + List lst1 = x.getAsList("adapter"); + for (XmlObject y : lst1) { + p(y.toString()); + } + } + } + +}