All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.fabric8.maven.docker.access.chunked.PullOrPushResponseJsonHandler Maven / Gradle / Ivy

The newest version!
package io.fabric8.maven.docker.access.chunked;

import io.fabric8.maven.docker.access.DockerAccessException;
import io.fabric8.maven.docker.util.Logger;
import org.json.JSONObject;

public class PullOrPushResponseJsonHandler implements EntityStreamReaderUtil.JsonEntityResponseHandler {

    private final Logger log;
    
    public PullOrPushResponseJsonHandler(Logger log) {
        this.log = log;
    }
    
    @Override
    public void process(JSONObject json) throws DockerAccessException {
        if (json.has("progressDetail")) {
            log.progressUpdate(getStringOrEmpty(json, "id"),
                               getStringOrEmpty(json, "status"),
                               getStringOrEmpty(json, "progress"));
        } else if (json.has("error")) {
            throwDockerAccessException(json);
        } else {
            log.progressFinished();
            logInfoMessage(json);
            log.progressStart();
        }
    }

    private void logInfoMessage(JSONObject json) {
        String value;
        if (json.has("stream")) {
            value = json.getString("stream").replaceFirst("\n$", "");
        } else if (json.has("status")) {
            value = json.getString("status");
        } else {
            value = json.toString();
        }
        log.info(value);
    }

    private void throwDockerAccessException(JSONObject json) throws DockerAccessException {
        String msg = json.getString("error").trim();
        String details = json.getJSONObject("errorDetail").getString("message").trim();
        throw new DockerAccessException("%s %s", msg, (msg.equals(details) ? "" : "(" + details + ")"));
    }

    private String getStringOrEmpty(JSONObject json, String what) {
        return json.has(what) ? json.getString(what) : "";
    }

    @Override
    public void start() {
        log.progressStart();
    }

    @Override
    public void stop() {
        log.progressFinished();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy