public function &initPivotTable() { $dataOut = new DataTable(); $dataIn =& $this->pivotDescription->getDataTable(); // First add all the row fields. // Just copy these as-is from the input DataTable $rowFieldIndexes = $this->getRowFieldIndexes(); foreach ($rowFieldIndexes as $columnIndex) { $columnDescription = $dataIn->getColumnDescription($columnIndex); $columnDescription->setCustomProperty('rowFieldIndex', $columnIndex); $dataOut->addColumn($columnDescription); } // Next add a column for each unique column in // the column key index $columnDescriptions = array(); $columnFieldIndexes = $this->getColumnFieldIndexes(); $numColumnFields = count($columnFieldIndexes); foreach ($columnFieldIndexes as $columnIndex) { $columnDescription = $dataIn->getColumnDescription($columnIndex); $columnDescriptions[] = $columnDescription; } $dataColumnDescriptions = array(); $dataFieldIndexes = $this->getDataFieldIndexes(); $numDataFields = count($dataFieldIndexes); foreach ($dataFieldIndexes as $columnIndex) { $columnDescription = $dataIn->getColumnDescription($columnIndex); $dataColumnDescriptions[] = $columnDescription; } $uniqueColumnKeys = $this->columnKeyIndex->getKeys(); foreach ($uniqueColumnKeys as $hash => $key) { $idParts = array(); $labelParts = array(); $columnValues = $key->getColumnValues(); for ($i = 0; $i < $numColumnFields; $i++) { $columnDescription = $columnDescriptions[$i]; $columnValue = $columnValues[$i]; $idParts[] = $columnDescription->getId() . '=' . $columnValue; $labelParts[] = $columnValue; } for ($di = 0; $di < $numDataFields; $di++) { $dataFieldIndex = $dataFieldIndexes[$di]; $dataColumnDescription = $dataColumnDescriptions[$di]; $fieldId = $dataColumnDescription->getId(); $fieldLabel = $dataColumnDescription->getLabel(); $aggregationType = $this->pivotDescription->getAggregationType($fieldId); $id = implode("__", $idParts) . "__" . $fieldId; $label = ($aggregationType ? $aggregationType->getCode() . ' ' : '') . implode(" ", $labelParts) . " " . $fieldLabel; // For now copy the same type as the input column. // In the future we may need to set this explicitly based on the calculation. $type = $dataColumnDescription->getType(); $columnDescription = new ColumnDescription($id, $type, $label); $columnDescription->setCustomProperty('columnKeyId', $key->__toString()); $columnDescription->setCustomProperty('dataFieldIndex', $dataFieldIndex); $dataOut->addColumn($columnDescription); } } return $dataOut; }
public function testColumnDescriptionJsonWithLabelAndPattern() { $expected = '{"id":"foo","label":"foo label","type":"date","pattern":"YYYY-mm-dd"}'; $cd = new ColumnDescription('foo', ValueType::DATE, 'foo label'); $cd->setPattern('YYYY-mm-dd'); $renderer = new JsonRenderer(); $actual = $renderer->renderColumnDescriptionJson($cd); $this->assertSame($expected, $actual, "ColumnDescription JSON render must match"); }
public function testGetCustomNonexistentProperty() { $cd = new ColumnDescription('first', ValueType::STRING); $this->assertNull($cd->getCustomProperty('no-such-property'), "Expect null return for no-such-property"); }
/** * @param ColumnDescription $column * @return string */ public function renderColumnDescriptionJson(ColumnDescription $column) { $output = "{"; $output .= "\"id\":" . json_encode($column->getId()); $output .= ",\"label\":" . json_encode($column->getLabel()); $output .= ",\"type\":" . json_encode($column->getType()->getTypeName()); $output .= ",\"pattern\":" . json_encode($column->getPattern()); $customProperties = $this->renderCustomPropertiesString($column->getCustomProperties()); if ($customProperties !== null) { $output .= ",\"p\":" . $customProperties; } $output .= "}"; return $output; }