package net.codjo.segmentation.server.plugin; import net.codjo.database.api.Database; import net.codjo.mad.server.handler.HandlerException; import net.codjo.mad.server.handler.sql.Getter; import net.codjo.mad.server.handler.sql.SqlHandler; import net.codjo.segmentation.server.participant.context.ContextManager; import net.codjo.segmentation.server.preference.family.TableFieldInfo; import net.codjo.segmentation.server.preference.family.XmlFamilyPreference; import net.codjo.sql.builder.DefaultFieldInfoList; import net.codjo.sql.builder.FieldInfo; import net.codjo.sql.builder.QueryBuilder; import net.codjo.sql.builder.QueryBuilderFactory; import net.codjo.sql.builder.TableName; import net.codjo.variable.TemplateInterpreter; import net.codjo.variable.UnknownVariableException; import java.util.List; import java.util.Map; /** * */ public class GetSegmentationResultHandler extends SqlHandler { private final ContextManager contextManager; public GetSegmentationResultHandler(ContextManager contextManager, Database database) { super(new String[0], "", database); this.contextManager = contextManager; } @Override protected String buildQuery(final Map<String, String> arguments) throws HandlerException { XmlFamilyPreference familyPreference = contextManager.getFamilyPreference(arguments.get("familyId")); DefaultFieldInfoList fieldInfoList = new DefaultFieldInfoList(); List<TableFieldInfo> columns = familyPreference.getResultColumns(); clearGetters(); int index = 1; for (TableFieldInfo tableFieldInfo : columns) { String columnJavaName = tableFieldInfo.getColumnJavaName(); TableName tableName = new TableName(tableFieldInfo.getColumnTable()); String columnSqlName = tableFieldInfo.getColumnSqlName(); fieldInfoList.add(new FieldInfo(tableName, columnSqlName, index)); addGetter(columnJavaName, new Getter(index)); index++; } QueryBuilder builder = QueryBuilderFactory.newSelectQueryBuilder(familyPreference.getResultConfig()); String selectQuery = builder.buildQuery(fieldInfoList); try { return new TemplateInterpreter().evaluate(selectQuery, arguments); } catch (UnknownVariableException e) { throw new HandlerException(e); } } }