package com.linkedin.thirdeye.client; import java.util.ArrayList; import java.util.List; import java.util.Map; import com.linkedin.thirdeye.api.TimeSpec; public abstract class BaseThirdEyeResponse implements ThirdEyeResponse { protected final List<MetricFunction> metricFunctions; protected final ThirdEyeRequest request; protected final TimeSpec dataTimeSpec; protected final List<String> groupKeyColumns; protected final String[] allColumnNames; public BaseThirdEyeResponse(ThirdEyeRequest request, TimeSpec dataTimeSpec) { this.request = request; this.dataTimeSpec = dataTimeSpec; this.metricFunctions = request.getMetricFunctions(); this.groupKeyColumns = new ArrayList<>(); if (request.getGroupByTimeGranularity() != null) { groupKeyColumns.add(dataTimeSpec.getColumnName()); } groupKeyColumns.addAll(request.getGroupBy()); ArrayList<String> allColumnNameList = new ArrayList<>(); allColumnNameList.addAll(request.getGroupBy()); for(MetricFunction function:request.getMetricFunctions()){ allColumnNameList.add(function.toString()); } allColumnNames = new String[allColumnNameList.size()]; allColumnNameList.toArray(allColumnNames); } @Override public List<MetricFunction> getMetricFunctions() { return metricFunctions; } @Override public abstract int getNumRows(); @Override public abstract ThirdEyeResponseRow getRow(int rowId); @Override public abstract int getNumRowsFor(MetricFunction metricFunction); @Override public abstract Map<String, String> getRow(MetricFunction metricFunction, int rowId); @Override public ThirdEyeRequest getRequest() { return request; } @Override public TimeSpec getDataTimeSpec() { return dataTimeSpec; } @Override public List<String> getGroupKeyColumns() { return groupKeyColumns; } public String[] getAllColumnNames() { return allColumnNames; } @Override public String toString() { return super.toString(); } }