blob: 95e32dbda6280b58a4570a1827a6311cd73a42a7 [file] [log] [blame]
package de.ids_mannheim.korap.query.serialize;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.util.Iterator;
/**
* @author hanl
* @date 04/06/2014
* <p/>
* create idn for korap:token
*/
public class IdWriter {
private JsonNode node;
private int counter;
private ObjectMapper mapper = new ObjectMapper();
public IdWriter (String json) {
node = mapper.valueToTree(json);
counter = 0;
}
public IdWriter process () {
process(node.path("query"));
return this;
}
private void process (JsonNode node) {
if (node.path("@type").asText().equals("korap:group")) {
Iterator<JsonNode> operands = node.path("operands").elements();
while (operands.hasNext())
process(operands.next());
}
else if (node.path("@type").asText().equals("korap:token"))
addId(node);
}
private JsonNode addId (JsonNode node) {
if (node.isObject()) {
ObjectNode o = (ObjectNode) node;
String s = extractToken(node);
if (s != null && !s.isEmpty())
o.put("idn", s + "_" + counter++);
}
return node;
}
private String extractToken (JsonNode token) {
if (!token.path("@type").equals("korap:term")) {
JsonNode wrap = token.path("wrap");
JsonNode op = token.path("operands");
if (!wrap.isMissingNode())
return extractToken(wrap);
if (!op.isMissingNode()) {
Iterator<JsonNode> operands = op.elements();
while (operands.hasNext())
return extractToken(operands.next());
}
}
return token.path("key").asText();
}
public String toJSON () {
try {
return mapper.writeValueAsString(node);
}
catch (JsonProcessingException e) {
return "";
}
}
}