package fr.inra.lipm.jezlucene;
import java.io.IOException;
import java.util.Map;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexableField;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.ArrayNode;
import org.codehaus.jackson.node.ObjectNode;
import com.google.common.collect.Maps;
/**
* @author llegrand
*/
public abstract class Converter {
public static final String document2JSON(final Iterable<Document> documents) throws JsonGenerationException, JsonMappingException, IOException {
final ObjectMapper mapper = new ObjectMapper();
final ArrayNode rootNode = mapper.createArrayNode();
for (final Document doc : documents) {
final Map<String, String> fieldUnicity = Maps.newHashMap();
final ObjectNode docNode = mapper.createObjectNode();
for (final IndexableField field : doc.getFields()) {
if (fieldUnicity.containsKey(field.name()) || field.binaryValue() != null) {
continue;
}
fieldUnicity.put(field.name(), "");
final String[] value = doc.getValues(field.name());
if (value.length == 1) {
docNode.put(field.name(), value[0]);
}
else if (value.length > 1) {
final ArrayNode dataArray = mapper.createArrayNode();
for (int index = 1; index < value.length; index++) {
dataArray.add(value[index]);
}
docNode.put(field.name(), dataArray);
}
}
rootNode.add(docNode);
}
return mapper.writeValueAsString(rootNode);
}
}