// Path: clients/java/detect_wrapper/src/detect/api/models/ApiError.java
// public class ApiError {
// 
// 	private String errorCode;
// 	private String errorDescription;
// 
// 	public ApiError() {
// 
// 	}
// 
// 	public String getErrorCode() {
// 		return errorCode;
// 	}
// 
// 	public void setErrorCode(String errorCode) {
// 		this.errorCode = errorCode;
// 	}
// 
// 	public String getErrorDescription() {
// 		return errorDescription;
// 	}
// 
// 	public void setErrorDescription(String errorDescription) {
// 		this.errorDescription = errorDescription;
// 	}
// }
// 
// Path: clients/java/detect_wrapper/src/detect/api/models/Image.java
// public class Image {
// 
// 	private int id;
// 	private String status;
// 	private String url;
// 	private int estimatedTimeOfArrival;
// 	private ArrayList<Region> regions;
// 
// 	public static final String STATUS_COMPLETED = "completed";
// 	public static final String STATUS_FAILED = "failed";
// 	public static final String STATUS_PROCESSING = "processing";
// 
// 	public Image() {
// 		regions = new ArrayList<Region>();
// 	}
// 
// 	public void addRegion(Region r) {
// 		regions.add(r);
// 	}
// 
// 	public boolean isCompleted() {
// 		return getStatus().equals(STATUS_COMPLETED);
// 	}
// 
// 	public ArrayList<Region> getRegions() {
// 		return regions;
// 	}
// 	public void setRegions(ArrayList<Region> regions) {
// 		this.regions = regions;
// 	}
// 	public int getId() {
// 		return id;
// 	}
// 	public void setId(int id) {
// 		this.id = id;
// 	}
// 	public String getStatus() {
// 		return status;
// 	}
// 	public void setStatus(String status) {
// 		this.status = status;
// 	}
// 	public String getUrl() {
// 		return url;
// 	}
// 	public void setUrl(String url) {
// 		this.url = url;
// 	}
// 	public int getEstimatedTimeOfArrival() {
// 		return estimatedTimeOfArrival;
// 	}
// 	public void setEstimatedTimeOfArrival(int estimatedTimeOfArrival) {
// 		this.estimatedTimeOfArrival = estimatedTimeOfArrival;
// 	}
// }
// 
// Path: clients/java/detect_wrapper/src/detect/api/models/Region.java
// public class Region {
// 
// 	private int tlx, tly, brx, bry;
// 
// 	public Region() {
// 
// 	}
// 
// 	public int getTlx() {
// 		return tlx;
// 	}
// 
// 	public void setTlx(int tlx) {
// 		this.tlx = tlx;
// 	}
// 
// 	public int getTly() {
// 		return tly;
// 	}
// 
// 	public void setTly(int tly) {
// 		this.tly = tly;
// 	}
// 
// 	public int getBrx() {
// 		return brx;
// 	}
// 
// 	public void setBrx(int brx) {
// 		this.brx = brx;
// 	}
// 
// 	public int getBry() {
// 		return bry;
// 	}
// 
// 	public void setBry(int bry) {
// 		this.bry = bry;
// 	}
// }


import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import detect.api.models.ApiError;
import detect.api.models.Image;
import detect.api.models.Region;
package detect.api.util;





public class DOMParser {

	private Document doc;

	public DOMParser(String xml) throws Exception {
		this.doc = getNormalizedDocument(xml);
	}

	public boolean hasNodeNamed(String name) {
		boolean result = false;
		try {
			result = doc.getElementsByTagName(name).getLength() != 0;
		} catch (Exception e) {
			System.out.println("Could not parse xml!");
			//e.printStackTrace();
		}
		return result;
	}

	public ApiError getApiError() {
		ApiError ae = new ApiError();
    	String[] tagList = {"code", "description"};
    	ArrayList<String> error = getValues("error", tagList);
    	ae.setErrorCode(error.get(0));
    	ae.setErrorDescription(error.get(1));
    	return ae;
	}

// Path: clients/java/detect_wrapper/src/detect/api/models/ApiError.java
// public class ApiError {
// 
// 	private String errorCode;
// 	private String errorDescription;
// 
// 	public ApiError() {
// 
// 	}
// 
// 	public String getErrorCode() {
// 		return errorCode;
// 	}
// 
// 	public void setErrorCode(String errorCode) {
// 		this.errorCode = errorCode;
// 	}
// 
// 	public String getErrorDescription() {
// 		return errorDescription;
// 	}
// 
// 	public void setErrorDescription(String errorDescription) {
// 		this.errorDescription = errorDescription;
// 	}
// }
// 
// Path: clients/java/detect_wrapper/src/detect/api/models/Image.java
// public class Image {
// 
// 	private int id;
// 	private String status;
// 	private String url;
// 	private int estimatedTimeOfArrival;
// 	private ArrayList<Region> regions;
// 
// 	public static final String STATUS_COMPLETED = "completed";
// 	public static final String STATUS_FAILED = "failed";
// 	public static final String STATUS_PROCESSING = "processing";
// 
// 	public Image() {
// 		regions = new ArrayList<Region>();
// 	}
// 
// 	public void addRegion(Region r) {
// 		regions.add(r);
// 	}
// 
// 	public boolean isCompleted() {
// 		return getStatus().equals(STATUS_COMPLETED);
// 	}
// 
// 	public ArrayList<Region> getRegions() {
// 		return regions;
// 	}
// 	public void setRegions(ArrayList<Region> regions) {
// 		this.regions = regions;
// 	}
// 	public int getId() {
// 		return id;
// 	}
// 	public void setId(int id) {
// 		this.id = id;
// 	}
// 	public String getStatus() {
// 		return status;
// 	}
// 	public void setStatus(String status) {
// 		this.status = status;
// 	}
// 	public String getUrl() {
// 		return url;
// 	}
// 	public void setUrl(String url) {
// 		this.url = url;
// 	}
// 	public int getEstimatedTimeOfArrival() {
// 		return estimatedTimeOfArrival;
// 	}
// 	public void setEstimatedTimeOfArrival(int estimatedTimeOfArrival) {
// 		this.estimatedTimeOfArrival = estimatedTimeOfArrival;
// 	}
// }
// 
// Path: clients/java/detect_wrapper/src/detect/api/models/Region.java
// public class Region {
// 
// 	private int tlx, tly, brx, bry;
// 
// 	public Region() {
// 
// 	}
// 
// 	public int getTlx() {
// 		return tlx;
// 	}
// 
// 	public void setTlx(int tlx) {
// 		this.tlx = tlx;
// 	}
// 
// 	public int getTly() {
// 		return tly;
// 	}
// 
// 	public void setTly(int tly) {
// 		this.tly = tly;
// 	}
// 
// 	public int getBrx() {
// 		return brx;
// 	}
// 
// 	public void setBrx(int brx) {
// 		this.brx = brx;
// 	}
// 
// 	public int getBry() {
// 		return bry;
// 	}
// 
// 	public void setBry(int bry) {
// 		this.bry = bry;
// 	}
// }


// Path: clients/java/detect_wrapper/src/detect/api/util/DOMParser.java
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import detect.api.models.ApiError;
import detect.api.models.Image;
import detect.api.models.Region;

package detect.api.util;





public class DOMParser {

	private Document doc;

	public DOMParser(String xml) throws Exception {
		this.doc = getNormalizedDocument(xml);
	}

	public boolean hasNodeNamed(String name) {
		boolean result = false;
		try {
			result = doc.getElementsByTagName(name).getLength() != 0;
		} catch (Exception e) {
			System.out.println("Could not parse xml!");
			//e.printStackTrace();
		}
		return result;
	}

	public ApiError getApiError() {
		ApiError ae = new ApiError();
    	String[] tagList = {"code", "description"};
    	ArrayList<String> error = getValues("error", tagList);
    	ae.setErrorCode(error.get(0));
    	ae.setErrorDescription(error.get(1));
    	return ae;
	}

	public Image getImage() {