blob: 223fbd2b5248b5616b73a83684ab62ea67eb4c48 [file] [log] [blame]
package de.ids_mannheim.korap.response;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.*;
import com.fasterxml.jackson.annotation.*;
public class SearchContext {
ObjectMapper mapper = new ObjectMapper();
private boolean spanType = false;
@JsonIgnore
public SearchContextSide left, right;
@JsonIgnore
public String spanContext;
{
left = new SearchContextSide();
right = new SearchContextSide();
};
public SearchContext () {};
public SearchContext (String spanContext) {
this.spanType = true;
this.spanContext = spanContext;
};
public SearchContext (boolean leftTokenContext, short leftContext,
boolean rightTokenContext, short rightContext) {
this.spanType = false;
this.left.setToken(leftTokenContext);
this.left.setLength(leftContext);
this.right.setToken(leftTokenContext);
this.right.setLength(rightContext);
};
public boolean isSpanDefined () {
return this.spanType;
};
public String getSpanContext () {
return this.spanContext;
};
public SearchContext setSpanContext (String spanContext) {
this.spanType = true;
// <LEGACY>
if (spanContext.equals("sentence")) {
spanContext = "s";
}
else if (spanContext.equals("paragraph")) {
spanContext = "p";
};
// </LEGACY>
this.spanContext = spanContext;
return this;
};
public class SearchContextSide {
private boolean type = true;
private short length = 6;
private short maxLength = 500;
public boolean isToken () {
return this.type;
};
public boolean isCharacter () {
return !(this.type);
};
public SearchContextSide setToken (boolean value) {
this.type = value;
return this;
};
public SearchContextSide setCharacter (boolean value) {
this.type = !(value);
return this;
};
public short getLength () {
return this.length;
};
public SearchContextSide setLength (short value) {
if (value >= 0) {
if (value <= maxLength) {
this.length = value;
}
else {
this.length = this.maxLength;
};
};
return this;
};
public SearchContextSide setLength (int value) {
return this.setLength((short) value);
};
public void fromJson (JsonNode json) {
String type = json.get(0).asText();
if (type.equals("token")) {
this.setToken(true);
}
else if (type.equals("char")) {
this.setCharacter(true);
};
this.setLength(json.get(1).asInt(this.length));
};
};
public void fromJson (JsonNode context) {
if (context.isContainerNode()) {
if (context.has("left"))
this.left.fromJson(context.get("left"));
if (context.has("right"))
this.right.fromJson(context.get("right"));
}
else if (context.isValueNode()) {
this.setSpanContext(context.asText());
};
};
public JsonNode toJsonNode () {
if (this.isSpanDefined())
return new TextNode(this.spanContext);
ArrayNode leftContext = mapper.createArrayNode();
leftContext.add(this.left.isToken() ? "token" : "char");
leftContext.add(this.left.getLength());
ArrayNode rightContext = mapper.createArrayNode();
rightContext.add(this.right.isToken() ? "token" : "char");
rightContext.add(this.right.getLength());
ObjectNode context = mapper.createObjectNode();
context.put("left", leftContext);
context.put("right", rightContext);
return context;
};
};