export function getTransformer()

in zeppelin-web/src/app/tabledata/advanced-transformation-util.js [507:634]


export function getTransformer(conf, rows, axisSpecs, axis) {
  let transformer = () => {};

  const transformSpec = getCurrentChartTransform(conf);
  if (!transformSpec) {
    return transformer;
  }

  const method = transformSpec.method;

  const columns = getColumnsFromAxis(axisSpecs, axis);
  const keyColumns = columns.key;
  const groupColumns = columns.group;
  const aggregatorColumns = columns.aggregator;
  const customColumns = columns.custom;

  let column = {
    key: keyColumns, group: groupColumns, aggregator: aggregatorColumns, custom: customColumns,
  };

  if (method === TransformMethod.RAW) {
    transformer = () => {
      return rows;
    };
  } else if (method === TransformMethod.OBJECT) {
    transformer = () => {
      const {cube, schema, keyColumnName, keyNames, groupNameSet, selectorNameWithIndex} =
        getKGACube(rows, keyColumns, groupColumns, aggregatorColumns);

      const {
        transformed, groupNames, sortedSelectors,
      } = getObjectRowsFromKGACube(cube, schema, aggregatorColumns,
        keyColumnName, keyNames, groupNameSet, selectorNameWithIndex);

      return {
        rows: transformed,
        keyColumnName,
        keyNames,
        groupNames: groupNames,
        selectors: sortedSelectors,
      };
    };
  } else if (method === TransformMethod.ARRAY) {
    transformer = () => {
      const {cube, schema, keyColumnName, keyNames, groupNameSet, selectorNameWithIndex} =
        getKGACube(rows, keyColumns, groupColumns, aggregatorColumns);

      const {
        transformed, groupNames, sortedSelectors,
      } = getArrayRowsFromKGACube(cube, schema, aggregatorColumns,
        keyColumnName, keyNames, groupNameSet, selectorNameWithIndex);

      return {
        rows: transformed,
        keyColumnName,
        keyNames,
        groupNames: groupNames,
        selectors: sortedSelectors,
      };
    };
  } else if (method === TransformMethod.ARRAY_2_KEY) {
    const keyAxisColumn = getColumnsForMultipleAxes(AxisType.KEY, axisSpecs, axis);
    column.key = keyAxisColumn;

    let key1Columns = [];
    let key2Columns = [];

    // since ARRAY_2_KEY :)
    let i = 0;
    for (let axisName in keyAxisColumn) {
      if (i === 2) {
        break;
      }

      if (i === 0) {
        key1Columns = keyAxisColumn[axisName];
      } else if (i === 1) {
        key2Columns = keyAxisColumn[axisName];
      }
      i++;
    }

    const {cube, schema,
      key1ColumnName, key1Names, key2ColumnName, key2Names,
      groupNameSet, selectorNameWithIndex,
    } = getKKGACube(rows, key1Columns, key2Columns, groupColumns, aggregatorColumns);

    const {
      transformed, groupNames, sortedSelectors,
      key1NameWithIndex, key2NameWithIndex,
    } = getArrayRowsFromKKGACube(cube, schema, aggregatorColumns,
      key1Names, key2Names, groupNameSet, selectorNameWithIndex);

    transformer = () => {
      return {
        rows: transformed,
        key1Names: key1Names,
        key1ColumnName: key1ColumnName,
        key1NameWithIndex: key1NameWithIndex,
        key2Names: key2Names,
        key2ColumnName: key2ColumnName,
        key2NameWithIndex: key2NameWithIndex,
        groupNames: groupNames,
        selectors: sortedSelectors,
      };
    };
  } else if (method === TransformMethod.DRILL_DOWN) {
    transformer = () => {
      const {cube, schema, keyColumnName, keyNames, groupNameSet, selectorNameWithIndex} =
        getKAGCube(rows, keyColumns, groupColumns, aggregatorColumns);

      const {
        transformed, groupNames, sortedSelectors,
      } = getDrilldownRowsFromKAGCube(cube, schema, aggregatorColumns,
        keyColumnName, keyNames, groupNameSet, selectorNameWithIndex);

      return {
        rows: transformed,
        keyColumnName,
        keyNames,
        groupNames: groupNames,
        selectors: sortedSelectors,
      };
    };
  }

  return {transformer: transformer, column: column};
}