package com.universalbits.conorganizer.badger.model;
import org.json.JSONException;
import org.json.JSONObject;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;
public class BadgeInfo extends HashMap<String, String> implements Comparable<BadgeInfo> {
private static final long serialVersionUID = 1L;
private static final String DEFAULT_TYPE = "BADGE";
public static final String TYPE = "TYPE";
public static final String ID_BADGE = "ID_BADGE";
public static final String ID_USER = "ID_USER";
public static final String BARCODE = "BARCODE";
public static final String QRCODE = "QRCODE";
public static final String PICTURE = "PICTURE";
public static final String DESCRIPTION = "DESCRIPTION";
public static final String TEMPLATE = "TEMPLATE";
public static final String ERROR = "__ERROR";
private String toString;
private Object context;
public BadgeInfo() {
super();
}
public BadgeInfo(JSONObject jsonBadge) throws ParseException, JSONException {
super();
for (Object objectKey : jsonBadge.keySet()) {
final String key = objectKey.toString();
final String value = getJsonString(jsonBadge, key);
put(key, value);
}
}
public BadgeInfo(Map<String, String> fields) {
super(fields);
}
public void setContext(Object context) {
this.context = context;
}
public Object getContext() {
return this.context;
}
private String getJsonString(JSONObject json, String key) throws JSONException {
String value = null;
if (!json.isNull(key)) {
value = json.get(key).toString();
}
return value;
}
public JSONObject toJsonObject() {
JSONObject json = new JSONObject();
for (String key : keySet()) {
json.put(key, get(key));
}
return json;
}
@Override
public String get(Object key) {
String value = super.get(key);
if (value == null && TYPE.equals(key)) {
value = DEFAULT_TYPE;
}
return value;
}
@Override
public String put(String key, String value) {
toString = null;
return super.put(key, value);
}
@Override
public String toString() {
if (toString == null) {
String description = get(DESCRIPTION);
if (description != null) {
toString = description;
} else {
final StringBuilder b = new StringBuilder();
final String type = get(TYPE);
if (type != null) {
b.append(type);
b.append(" ");
}
final String userId = get(ID_USER);
if (userId != null) {
b.append(userId);
}
final String badgeId = get(ID_BADGE);
if (userId != null && badgeId != null) {
b.append("-");
}
if (badgeId != null) {
b.append(badgeId);
}
if (userId != null || badgeId != null) {
b.append(" ");
}
final String error = get(ERROR);
if (error != null) {
b.append(" (ERROR:");
b.append(error);
b.append(")");
}
toString = b.toString();
}
}
return toString;
}
@Override
public int compareTo(BadgeInfo o) {
final String type = get(TYPE);
final String oType = o.get(TYPE);
final String badgeId = get(ID_BADGE);
final String oBadgeId = o.get(ID_BADGE);
int result = type.compareTo(oType);
if (result == 0) {
result = badgeId.compareTo(oBadgeId);
}
return result;
}
@Override
public boolean equals(Object o) {
return (o instanceof BadgeInfo) ? compareTo((BadgeInfo)o) == 0 : false;
}
}