package model; public class ResultContainer { private final T result; private final boolean success; private final String message; private final long timestamp; private ResultContainer(T result, boolean success, String message) { this.result = result; this.success = success; this.message = message; this.timestamp = System.currentTimeMillis(); } public static ResultContainer success(T result) { if (result == null) { throw new IllegalArgumentException("Result cannot be null for success container"); } return new ResultContainer<>(result, true, "Success"); } public static ResultContainer success(T result, String message) { if (result == null) { throw new IllegalArgumentException("Result cannot be null for success container"); } return new ResultContainer<>(result, true, message); } public static ResultContainer failure(String message) { return new ResultContainer<>(null, false, message); } public static ResultContainer failure(String message, Throwable cause) { return new ResultContainer<>(null, false, message + ": " + cause.getMessage()); } public T getResult() { if (!success) { throw new IllegalStateException("Cannot get result from failed container"); } return result; } public T getResultOrDefault(T defaultValue) { return success ? result : defaultValue; } public boolean isSuccess() { return success; } public boolean isFailure() { return !success; } public String getMessage() { return message; } public long getTimestamp() { return timestamp; } public String toString() { return String.format("ResultContainer{success=%s, message='%s', timestamp=%d}", success, message, timestamp); } }