package org.rubypeople.rdt.internal.debug.core.parsing; import org.rubypeople.rdt.debug.core.RdtDebugCorePlugin; import org.rubypeople.rdt.internal.debug.core.model.RubyProcessingException; import org.xmlpull.v1.XmlPullParser; public class EvalReader extends XmlStreamReader { private String exceptionType; private String exceptionMessage; private String name; private String value; public EvalReader(XmlPullParser xpp) { super(xpp); } public EvalReader(AbstractReadStrategy readStrategy) { super(readStrategy); } @Override protected boolean processStartElement(XmlPullParser xpp) throws XmlStreamReaderException { boolean result = false; if (xpp.getName().equals("processingException")) { exceptionType = xpp.getAttributeValue("", "type"); exceptionMessage = xpp.getAttributeValue("", "message"); result = true; } else if (xpp.getName().equals("eval")) { name = xpp.getAttributeValue("", "name"); value = xpp.getAttributeValue("", "value"); result = true; } return result; } public String readEvalResult() throws RubyProcessingException { try { this.read(); } catch (Exception ex) { RdtDebugCorePlugin.log(ex); return null; } if (exceptionType != null) { throw new RubyProcessingException(exceptionType, exceptionMessage); } return value; } @Override public void processContent(String text) {} @Override protected boolean processEndElement(XmlPullParser xpp) { return xpp.getName().equals("processingException") || xpp.getName().equals("eval"); } }