package fr.lyrgard.hexScape.model.marker;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@Type(value = MarkerInstance.class, name = "MarkerInstance"),
@Type(value = RevealableMarkerInstance.class, name = "RevealableMarkerInstance"),
@Type(value = StackableMarkerInstance.class, name = "StackableMarkerInstance"),
@Type(value = HiddenMarkerInstance.class, name = "HiddenMarkerInstance"),
@Type(value = UnknownTypeMarkerInstance.class, name = "UnknownTypeMarkerInstance"),
})
public class MarkerInstance implements Comparable<MarkerInstance>{
private String id;
private String markerDefinitionId;
@JsonCreator
public MarkerInstance(@JsonProperty("markerDefinitionId") String markerDefinitionId) {
this.markerDefinitionId = markerDefinitionId;
}
public String getMarkerDefinitionId() {
return markerDefinitionId;
}
public void setMarkerDefinitionId(String markerDefinitionId) {
this.markerDefinitionId = markerDefinitionId;
}
public String getId() {
return id;
}
@Override
public int compareTo(MarkerInstance m2) {
int result = getMarkerDefinitionId().compareTo(m2.getMarkerDefinitionId());
if (result == 0) {
if (this instanceof HiddenMarkerInstance) {
if (((HiddenMarkerInstance)this).getHiddenMarkerDefinitionId() == null) {
if (((HiddenMarkerInstance)m2).getHiddenMarkerDefinitionId() == null) {
result = 0;
} else {
result = 1;
}
} else {
if (((HiddenMarkerInstance)m2).getHiddenMarkerDefinitionId() == null) {
result = -1;
} else {
result = ((HiddenMarkerInstance)this).getHiddenMarkerDefinitionId().compareTo(((HiddenMarkerInstance)m2).getHiddenMarkerDefinitionId());
}
}
}
}
if (result == 0) {
result = getId().compareTo(m2.getId());
}
return result;
}
public void setId(String id) {
this.id = id;
}
}