private String parseAndSerialize(TopologyWindow topologyWindow) throws JsonProcessingException {
if (topologyWindow.getStreams() == null || topologyWindow.getStreams().isEmpty()) {
LOG.error("Streams should be specified.");
return StringUtils.EMPTY;
}
Rule rule = new Rule();
rule.setId(topologyWindow.getId());
rule.setName(topologyWindow.getName());
rule.setDescription(topologyWindow.getDescription());
rule.setWindow(topologyWindow.getWindow());
rule.setActions(topologyWindow.getActions());
String sql = getSqlString(topologyWindow.getStreams(),
topologyWindow.getProjections(),
topologyWindow.getCondition(),
topologyWindow.getGroupbykeys());
updateRuleWithSql(rule, sql, topologyWindow.getTopologyId(), topologyWindow.getVersionId());
validateProjection(rule.getProjection().getExpressions(), rule.getGroupBy().getExpressions());
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(rule);
}