package net.nationstatesplusplus.assembly.model.websocket;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DataRequest {
@JsonProperty
private String name;
@JsonProperty()
private Map<String, Object> data;
public DataRequest() {
data = new HashMap<String, Object>();
}
public DataRequest(String name) {
this.name = name;
data = new HashMap<String, Object>();
}
public DataRequest(RequestType type, Map<String, Object> data) {
this.name = type.getType();
this.data = data;
}
public String getName() {
return name;
}
public <V> V getValue(String name, V defaultVal, Class<V> type) {
if (data.containsKey(name)) {
if (Number.class.isAssignableFrom(type)) {
Object val = data.get(name);
if (val instanceof String) {
if (Integer.class == type) {
return type.cast(Integer.valueOf(Integer.parseInt((String)val)));
} else if (Double.class == type) {
return type.cast(Double.valueOf(Double.parseDouble((String)val)));
}
}
}
return type.cast(data.get(name));
}
return defaultVal;
}
@Override
public String toString() {
return "DataRequest { name: " + name + ", data: " + data.toString() + " }";
}
public static DataRequest parse(JsonNode n) {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.readValue(n.toString(), DataRequest.class);
} catch (Exception e) {
throw new RuntimeException("Unable to parse nation settings", e);
}
}
public static DataRequest getBlankRequest(RequestType type) {
return new DataRequest(type, Collections.<String, Object> emptyMap());
}
}