package com.kritsit.casetracker.client.domain.services;
import java.util.ArrayList;
import java.util.List;
public class InputToModelParseResult<T> {
boolean isSuccessful;
String reason;
List<String> failedInputs;
T result;
public InputToModelParseResult(boolean isSuccessful) {
this(isSuccessful, null, null);
}
public InputToModelParseResult(boolean isSuccessful, T result) {
this(isSuccessful, null, result);
}
public InputToModelParseResult(boolean isSuccessful, String reason) {
this(isSuccessful, reason, null);
}
public InputToModelParseResult(boolean isSuccessful, String reason, T result) {
this.isSuccessful = isSuccessful;
this.reason = reason;
this.result = result;
failedInputs = new ArrayList<>();
}
public void addFailedInput(String input) {
setIsSuccessful(false);
failedInputs.add(input);
}
public boolean contains(String input) {
return failedInputs.contains(input);
}
public T getResult() {
return result;
}
public boolean isSuccessful() {
return isSuccessful;
}
public void setIsSuccessful(boolean isSuccessful) {
this.isSuccessful = isSuccessful;
}
public void setResult(T result) {
this.result = result;
}
public String getReason() {
if (isSuccessful()) {
return reason;
}
if (reason != null && !reason.isEmpty() && failedInputs.isEmpty()) {
return reason;
}
if (failedInputs.isEmpty()) {
return "Input failed to parse into model";
}
StringBuilder message = new StringBuilder(failedInputs.get(0));
for (int i = 1; i < failedInputs.size(); i++) {
message.append(", ");
message.append(failedInputs.get(i));
}
int andIndex = message.lastIndexOf(",");
if (andIndex != -1) {
message.replace(andIndex, andIndex + 1, " and");
}
message.append(" required");
return message.toString();
}
}