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

de.otto.edison.status.domain.StatusDetail Maven / Gradle / Ivy

package de.otto.edison.status.domain;

import net.jcip.annotations.Immutable;

import java.util.LinkedHashMap;
import java.util.Map;

import static de.otto.edison.status.domain.Status.*;
import static java.util.Collections.emptyMap;
import static java.util.Collections.unmodifiableMap;

@Immutable
public class StatusDetail {

    private final String name;
    private final Status status;
    private final String message;
    private final Map details;

    private StatusDetail(final String name,
                         final Status status,
                         final String message,
                         final Map details) {
        this.name = name;
        this.status = status;
        this.message = message;
        this.details = unmodifiableMap(new LinkedHashMap<>(details));
    }

    public static StatusDetail statusDetail(final String name,
                                            final Status status,
                                            final String message) {
        return new StatusDetail(name, status, message, emptyMap());
    }

    public static StatusDetail statusDetail(final String name,
                                            final Status status,
                                            final String message,
                                            final Map additionalAttributes) {
        return new StatusDetail(name, status, message, additionalAttributes);
    }

    public StatusDetail toOk(final String message) {
        return statusDetail(name, OK, message, details);
    }

    public StatusDetail toWarning(final String message) {
        return statusDetail(name, WARNING, message, details);
    }

    public StatusDetail toError(final String message) {
        return statusDetail(name, ERROR, message, details);
    }

    public StatusDetail withDetail(String key, String value) {
        LinkedHashMap newDetails = new LinkedHashMap<>(details);
        newDetails.put(key, value);
        return statusDetail(name,status,message, newDetails);
    }

    public StatusDetail withoutDetail(String key) {
        LinkedHashMap newDetails = new LinkedHashMap<>(details);
        newDetails.remove(key);
        return statusDetail(name,status,message, newDetails);
    }

    public String getName() {
        return name;
    }

    public Status getStatus() {
        return status;
    }

    public String getMessage() {
        return message;
    }

    public Map getDetails() {
        return details;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        StatusDetail that = (StatusDetail) o;

        if (details != null ? !details.equals(that.details) : that.details != null) return false;
        if (message != null ? !message.equals(that.message) : that.message != null) return false;
        if (name != null ? !name.equals(that.name) : that.name != null) return false;
        if (status != that.status) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + (status != null ? status.hashCode() : 0);
        result = 31 * result + (message != null ? message.hashCode() : 0);
        result = 31 * result + (details != null ? details.hashCode() : 0);
        return result;
    }

    @Override
    public String toString() {
        return "StatusDetail{" +
                "name='" + name + '\'' +
                ", status=" + status +
                ", message='" + message + '\'' +
                ", details=" + details +
                '}';
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy