package com.joe.utilities.core.util; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.builder.ToStringBuilder; /** * A ReturnStatusItem reports on the status of one or more status items contained by a ResultStatus object * * @author Dave Ousey Creation date: 1/5/2007 9 AM Copyright (c) 2007 MEDecision, Inc. All rights reserved. */ public class ReturnStatusItem implements Comparable<ReturnStatusItem> { /** Enum value of status: ERROR, WARNING, OK */ private ReturnStatus.Status status; /** Default message description */ private String defaultMessage; /** Unique code identifier for status item. This is the unique business code ID for the message */ private String code; /** Parameter map. For messages that contain parameterized values, this map will hold the values keyed by parameter ID. */ private Map<String, String> parameterMap = new HashMap<String, String>(); /** * @param code * @param status */ public ReturnStatusItem(String code, ReturnStatus.Status status) { this(code, status, null, null); } /** * @param code * @param status * @param defaultMessage */ public ReturnStatusItem(String code, ReturnStatus.Status status, String defaultMessage) { this(code, status, defaultMessage, null); } /** * @param code * @param status * @param defaultMessage * @param parameterMap */ public ReturnStatusItem(String code, ReturnStatus.Status status, String defaultMessage, Map<String, String> parameterMap) { this.code = code; this.status = status; this.defaultMessage = defaultMessage; if (parameterMap != null) this.parameterMap.putAll(parameterMap); } /** * Method getCode. * * @return String */ public String getCode() { return code; } /** * Method getDefaultMessage. * * @return String */ public String getDefaultMessage() { return defaultMessage; } /** * Method getParameterMap. * * @return Map<String,String> */ public Map<String, String> getParameterMap() { return parameterMap; } /** * Method getStatus. * * @return ReturnStatus.Status */ public ReturnStatus.Status getStatus() { return status; } /** * Method isError. * * @return boolean */ public boolean isError() { return status == ReturnStatus.Status.ERROR; } /** * Method isSuccess. * * @return boolean */ public boolean isSuccess() { return status != ReturnStatus.Status.ERROR; } /** * Method createParameterMap. Utility method to create a parameter map with one initial entry. Typically this is common for invalid * value evaluations in which the invalid value will be the parameter value. * * @param parameterID * @param parameterValue * @return Map<String,String> */ public static Map<String, String> createParameterMap(String parameterID, String parameterValue) { Map<String, String> parameterMap = new HashMap<String, String>(4); parameterMap.put(parameterID, parameterValue); return parameterMap; } /** * @see java.lang.Object#toString() */ @Override public String toString() { return new ToStringBuilder(this).append("code", code).append("status", status).append("message", defaultMessage).toString(); } /** @see java.lang.Object#equals(Object) */ @Override public boolean equals(Object o) { if (this == null) { return true; } if (o == null || !(o instanceof ReturnStatusItem)) { return false; } ReturnStatusItem test = (ReturnStatusItem) o; java.util.Set<String> thisParamKeys = null; java.util.Set<String> testParamKeys = null; String thisValue = null; String testValue = null; // Not equal: Either test or this object has null values and the other object does not if ((this.code == null && test.code != null) || (this.code != null && test.code == null) || (this.defaultMessage == null && test.defaultMessage != null) || (this.defaultMessage != null && test.defaultMessage == null) || (this.status == null && test.status != null) || (this.status != null && test.status == null) || (this.parameterMap == null && test.parameterMap != null) || (this.parameterMap != null && test.parameterMap == null)) { return false; } // Not equal: Code, Default message or status are not the save value for either test or this object. if ((this.code != null && !this.code.equals(test.code)) || (this.defaultMessage != null && !this.defaultMessage.equals(test.defaultMessage)) || (this.status != null && !this.status.equals(test.status))) { return false; } if ((this.code == null && test.code == null) && (this.defaultMessage == null && test.defaultMessage == null) && (this.status == null && test.status == null) && (this.parameterMap == null && test.parameterMap == null)) { return true; } if (this.parameterMap == null && test.parameterMap == null) { return true; } thisParamKeys = this.parameterMap.keySet(); testParamKeys = test.parameterMap.keySet(); if (!testParamKeys.containsAll(thisParamKeys) || !thisParamKeys.containsAll(testParamKeys)) { return false; } for (String key : thisParamKeys) { thisValue = this.parameterMap.get(key); testValue = test.parameterMap.get(key); if (thisValue == null && testValue != null || thisValue != null && testValue == null) { return false; } if (thisValue != null && !thisValue.equals(testValue)) { return false; } } return true; } /** @see java.lang.Comparable#compareTo(Object) */ public int compareTo(ReturnStatusItem item) { if (this.equals(item)) { return 0; } return this.toString().compareTo(item.toString()); } }