package org.rubypeople.rdt.internal.debug.core.parsing;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.rubypeople.rdt.debug.core.RdtDebugCorePlugin;
import org.rubypeople.rdt.internal.debug.core.model.RubyProcessingException;
import org.xmlpull.v1.XmlPullParser;
public class LoadResultReader extends XmlStreamReader {
private LoadResult loadResult;
public LoadResultReader(XmlPullParser xpp) {
super(xpp);
}
public LoadResultReader(AbstractReadStrategy readStrategy) {
super(readStrategy);
}
public IStatus readLoadResult() throws RubyProcessingException {
this.loadResult = new LoadResult();
try {
this.read();
} catch (Exception ex) {
RdtDebugCorePlugin.log(ex);
}
int code = IStatus.ERROR;
if (loadResult.isOk())
code = IStatus.OK;
StringBuilder builder = new StringBuilder();
if (loadResult.exceptionType != null)
builder.append(loadResult.exceptionType).append(": ");
builder.append(loadResult.exceptionMessage);
return new Status(code, RdtDebugCorePlugin.PLUGIN_ID, -1, builder.toString(), null);
}
protected boolean processStartElement(XmlPullParser xpp) {
String name = xpp.getName();
if (name.equals("loadResult")) {
this.loadResult.setFileName(xpp.getAttributeValue("", "fileName"));
this.loadResult.setExceptionType(xpp.getAttributeValue("", "exceptionType"));
this.loadResult.setExceptionMessage(xpp.getAttributeValue("", "exceptionMessage"));
return true ;
}
return false ;
}
public class LoadResult {
private String fileName;
private String exceptionMessage;
private String exceptionType;
public String getExceptionMessage() {
return exceptionMessage;
}
public void setExceptionMessage(String exceptionMessage) {
this.exceptionMessage = exceptionMessage;
}
public String getExceptionType() {
return exceptionType;
}
public void setExceptionType(String exceptionType) {
this.exceptionType = exceptionType;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public boolean isOk() {
return exceptionType == null;
}
}
}