/*
* Copyright (c) 2008-2012 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.vnx.xmlapi;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.StringReader;
public class XMLApiResult {
private boolean commandSuccess = false;
private String message = "";
private String resultFeed = "";
private Object obj = null;
// Error Handling
private static final String ERROR = "error";
private static final String READY = "ready";
private static final String TASKRESPONSE = "TaskResponse";
private static final String FAULT = "Fault";
private static final String PROBLEM = "Problem";
private static final String MESSAGE = "message";
private static final String DESCRIPTION = "Description";
public XMLApiResult() {
}
public XMLApiResult(String resultFeed) {
this.resultFeed = resultFeed;
}
public boolean isCommandSuccess() {
return commandSuccess;
}
public void setCommandSuccess() {
commandSuccess = true;
}
public void setCommandFailed() {
commandSuccess = false;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getResultFeed() {
return resultFeed;
}
public void setResultFeed(String resultFeed) {
this.resultFeed = resultFeed;
}
public void setObject(Object obj) {
this.obj = obj;
}
public Object getObject() {
return obj;
}
public static XMLApiResult parseResult(String resultXML) {
XMLApiResult result = new XMLApiResult(resultXML);
String cmdMessage = "";
String errorMsg = "";
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
InputSource source = new InputSource();
source.setCharacterStream(new StringReader(resultXML));
Document doc = dBuilder.parse(source);
NodeList list = doc.getElementsByTagName(PROBLEM);
if (list.getLength() > 0) {
// Handle Error response
Node probNode = list.item(0);
if (PROBLEM.equals(probNode.getNodeName())) {
NamedNodeMap attributes = probNode.getAttributes();
Node errorMsgNode = attributes.getNamedItem(MESSAGE);
errorMsg = errorMsgNode.getNodeValue();
NodeList probChildren = probNode.getChildNodes();
for (int j = 0; j < probChildren.getLength(); j++) {
Node probChild = probChildren.item(j);
if (!DESCRIPTION.equals(probChild.getNodeName())) {
continue;
}
if (probChild.getFirstChild() != null) {
errorMsg = errorMsg + ":" + probChild.getFirstChild().getNodeValue();
}
}
}
result.setCommandFailed();
result.setMessage(errorMsg);
} else {
// Handle success response
result.setCommandSuccess();
}
} catch (Exception e) {
result.setCommandFailed();
result.setMessage(e.getMessage() + " : " + errorMsg);
}
return result;
}
public static XMLApiResult parseErrorResult(String errorMsg) {
XMLApiResult result = new XMLApiResult();
result.setCommandFailed();
result.setMessage(errorMsg);
return result;
}
}