package io.cattle.platform.docker.api.transform;
import io.cattle.platform.core.model.Instance;
import io.cattle.platform.core.model.tables.records.InstanceRecord;
import io.cattle.platform.docker.transform.DockerTransformer;
import io.cattle.platform.iaas.api.request.handler.ScriptsHandler;
import io.cattle.platform.json.JsonMapper;
import io.github.ibuildthecloud.gdapi.exception.ClientVisibleException;
import io.github.ibuildthecloud.gdapi.request.ApiRequest;
import io.github.ibuildthecloud.gdapi.util.RequestUtils;
import io.github.ibuildthecloud.gdapi.util.ResponseCodes;
import io.github.ibuildthecloud.gdapi.validation.ValidationErrorCodes;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import javax.inject.Inject;
import org.apache.commons.io.IOUtils;
public class TransformInspect implements ScriptsHandler {
@Inject
DockerTransformer transformer;
@Inject
JsonMapper jsonMapper;
@SuppressWarnings("unchecked")
@Override
public boolean handle(ApiRequest request) throws IOException {
if (!"transform".equals(request.getId())) {
return false;
}
request.setResponseContentType("application/json");
Object reqObj = getObject(request);
if (reqObj == null) {
return true;
}
Instance instance = new InstanceRecord();
transformer.transform((Map<String, Object>)reqObj, instance);
request.setResponseObject(instance);
return true;
}
protected Object getObject(ApiRequest request) throws IOException {
if (!RequestUtils.mayHaveBody(request.getMethod())) {
return null;
}
InputStream is = request.getInputStream();
if (is == null) {
return null;
}
byte[] content = IOUtils.toByteArray(is);
if (content.length == 0) {
return null;
}
try {
return jsonMapper.readValue(content);
} catch (IOException e) {
throw new ClientVisibleException(ResponseCodes.BAD_REQUEST, ValidationErrorCodes.INVALID_BODY_CONTENT);
}
}
}