package eu.leads.processor.execute.operators; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.util.StdConverter; import eu.leads.processor.plan.NodeStatus; import eu.leads.processor.utils.SQLUtils; import net.sf.jsqlparser.expression.Function; import net.sf.jsqlparser.schema.Column; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Created with IntelliJ IDEA. * User: vagvaz * Date: 11/3/13 * Time: 9:49 PM * To change this template use File | Settings | File Templates. */ //Class converting json tree node to groupby public class GroupByJsonDelegate extends StdConverter<JsonNode, GroupByOperator> { @Override public GroupByOperator convert(JsonNode jsonNode) { String name = jsonNode.path("name").asText(); String output = jsonNode.path("output").asText(); ArrayList<Column> columns = new ArrayList<Column>(); ObjectMapper mapper = new ObjectMapper(); Iterator<JsonNode> iterator = jsonNode.path("columns").elements(); while (iterator.hasNext()) { JsonNode col = iterator.next(); try { Column c = mapper.readValue(col.toString(), Column.class); columns.add(c); } catch (IOException e) { e.printStackTrace(); } } ArrayList<Function> functions = new ArrayList<Function>(); iterator = jsonNode.path("functions").elements(); while (iterator.hasNext()) { JsonNode func = iterator.next(); Function f = SQLUtils.extractFunction(func); functions.add(f); } List<String> sources = null; NodeStatus status = NodeStatus.PENDING; GroupByOperator result = new GroupByOperator(name, output, columns, functions); try { // status = mapper.readValue(jsonNode.path("status").toString(), NodeStatus.class); sources = mapper.readValue(jsonNode.path("sources").toString(), new TypeReference<List<String>>() { }); } catch (IOException e) { e.printStackTrace(); } result.setSources(sources); return result; } }