org.ovirt.engine.sdk4.internal.services.ServiceImpl Maven / Gradle / Ivy
package org.ovirt.engine.sdk4.internal.services;
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import org.ovirt.api.metamodel.runtime.xml.XmlReader;
import org.ovirt.engine.sdk4.Error;
import org.ovirt.engine.sdk4.internal.HttpConnection;
import org.ovirt.engine.sdk4.internal.xml.XmlActionReader;
import org.ovirt.engine.sdk4.internal.xml.XmlFaultReader;
import org.ovirt.engine.sdk4.types.Action;
import org.ovirt.engine.sdk4.types.Fault;
import java.io.IOException;
public class ServiceImpl {
private String path;
private HttpConnection connection;
public ServiceImpl() {
this.connection = null;
this.path = null;
}
public ServiceImpl(HttpConnection connection, String path) {
this.connection = connection;
this.path = path;
}
public void checkFault(HttpResponse response) {
try (XmlReader reader = new XmlReader(response.getEntity().getContent())) {
Fault fault = null;
if (response.getEntity().getContentLength() > 0) {
fault = XmlFaultReader.readOne(reader);
}
if (
fault != null ||
(response.getStatusLine() != null && response.getStatusLine().getStatusCode() >= 400)
) {
this.throwError(response, fault);
}
} catch (IOException ex) {
throw new Error("Failed to read response", ex);
} finally {
EntityUtils.consumeQuietly(response.getEntity());
}
}
public Action checkAction(HttpResponse response) {
try (XmlReader reader = new XmlReader(response.getEntity().getContent())) {
Object result = reader.read();
if (result != null ) {
if (result instanceof Fault) {
this.throwError(response, (Fault) result);
}
else if (result instanceof Action && ((Action) result).faultPresent()) {
this.throwError(response, ((Action) result).fault());
}
}
return (Action) result;
} catch (IOException ex) {
throw new Error("Failed to read response", ex);
} finally {
EntityUtils.consumeQuietly(response.getEntity());
}
}
public void throwError(HttpResponse response, Fault fault) {
StringBuilder buffer = new StringBuilder();
if (fault != null) {
if (fault.reasonPresent()) {
if (buffer.length() > 0) {
buffer.append(" ");
}
buffer.append(
String.format(
"Fault reason is \"%s\".",
fault.reason()
)
);
}
if (fault.detailPresent()) {
if (buffer.length() > 0) {
buffer.append(" ");
}
buffer.append(
String.format(
"Fault detail is \"%s\".",
fault.detail())
);
}
}
if (response != null && response.getStatusLine() != null) {
if (buffer.length() > 0) {
buffer.append(" ");
}
buffer.append(
String.format(
"HTTP response code is \"%s\".",
response.getStatusLine().getStatusCode()
)
);
buffer.append(" ");
buffer.append(
String.format(
"HTTP response message is \"%s\".",
response.getStatusLine().getReasonPhrase()
)
);
}
throw new Error(buffer.toString());
}
public HttpConnection getConnection() {
return connection;
}
public String getPath() {
return path;
}
}