@Override public Grid addRows( Grid grid ) { List<List<Object>> rows = grid.getRows(); for ( List<Object> row : rows ) { this.grid.add( row ); currentRowWriteIndex++; } return this; }
/** * Creates a list of aggregated map values. */ private List<MapValue> getMapValues( Grid grid ) { List<MapValue> mapValues = new ArrayList<>(); for ( List<Object> row : grid.getRows() ) { if ( row != null && row.size() >= 3 ) { int ouIndex = row.size() - 2; int valueIndex = row.size() - 1; String ou = (String) row.get( ouIndex ); Double value = (Double) row.get( ( valueIndex ) ); mapValues.add( new MapValue( ou, value ) ); } } return mapValues; }
/** * Generates a mapping where the key represents the dimensional item identifiers * concatenated by {@link DimensionalObject#DIMENSION_SEP} and the value is * the corresponding aggregated data value based on the given grid. Assumes * that the value column is the last column in the grid. * * @param grid the grid. * @return a mapping between item identifiers and aggregated values. */ public static Map<String, Object> getAggregatedDataValueMapping( Grid grid ) { Map<String, Object> map = new HashMap<>(); int metaCols = grid.getWidth() - 1; int valueIndex = grid.getWidth() - 1; for ( List<Object> row : grid.getRows() ) { StringBuilder key = new StringBuilder(); for ( int index = 0; index < metaCols; index++ ) { key.append( row.get( index ) ).append( DIMENSION_SEP ); } key.deleteCharAt( key.length() - 1 ); Object value = row.get( valueIndex ); map.put( key.toString(), value ); } return map; }
/** * Get event data mapping for values. * * @param grid the grid to collect data from * @return map with key and values */ public static Map<String, Object> getAggregatedEventDataMapping( Grid grid ) { Map<String, Object> map = new HashMap<>(); int metaCols = grid.getWidth() - 1; int valueIndex = grid.getWidth() - 1; for ( List<Object> row : grid.getRows() ) { List<String> ids = new ArrayList<>(); for ( int index = 0; index < metaCols; index++ ) { Object id = row.get( index ); if ( id != null ) { ids.add( (String) row.get( index ) ); } } Collections.sort( ids ); String key = StringUtils.join( ids, DIMENSION_SEP ); Object value = row.get( valueIndex ); map.put( key, value ); } return map; }
/** * Returns a mapping based on the given grid where the key is a joined string * of the string value of each value for meta columns. The value is the object * at the given value index. The map contains at maximum one entry per row in * the given grid, less if the joined key string are duplicates. The object * at the value index must be numeric. * * @param grid the grid. * @param valueIndex the index of the column holding the value, must be numeric. * @return a meta string to value object mapping. */ public static Map<String, Object> getMetaValueMapping( Grid grid, int valueIndex ) { Map<String, Object> map = new HashMap<>(); List<Integer> metaIndexes = grid.getMetaColumnIndexes(); for ( List<Object> row : grid.getRows() ) { List<Object> metaDataRowItems = ListUtils.getAtIndexes( row, metaIndexes ); String key = TextUtils.join( metaDataRowItems, DIMENSION_SEP, DimensionalObjectUtils.NULL_REPLACEMENT ); map.put( key, row.get( valueIndex ) ); } return map; }
.collect( Collectors.toMap( d -> d.getDimensionItem(), d -> d ) ); for ( List<Object> row : grid.getRows() )
Assert.isTrue( vlInx >= 0, "Value index must be greater than or equal to zero" ); for ( List<Object> row : grid.getRows() )
/** * Writes a CSV representation of the given Grid to the given OutputStream. */ public static void toCsv( Grid grid, Writer writer ) throws IOException { if ( grid == null ) { return; } CsvWriter csvWriter = new CsvWriter( writer, CSV_DELIMITER ); Iterator<GridHeader> headers = grid.getHeaders().iterator(); if ( !grid.getHeaders().isEmpty() ) { while ( headers.hasNext() ) { csvWriter.write( headers.next().getColumn() ); } csvWriter.endRecord(); } for ( List<Object> row : grid.getRows() ) { for ( Object value : row ) { csvWriter.write( value != null ? String.valueOf( value ) : StringUtils.EMPTY ); } csvWriter.endRecord(); } }
Map<String, OrganisationUnit> orgUnitLookup = orgUnits.stream().collect( Collectors.toMap( o -> o.getUid(), o -> o ) ); for ( List<Object> row : grid.getRows() )
for ( List<Object> row : grid.getRows() )
/** * Writes an XML representation of the given Grid to the given OutputStream. */ public static void toXml( Grid grid, OutputStream out ) { XMLWriter writer = XMLFactory.getXMLWriter( out ); writer.openDocument(); writer.openElement( ATTR_GRID, ATTR_TITLE, grid.getTitle(), ATTR_SUBTITLE, grid.getSubtitle(), ATTR_WIDTH, String.valueOf( grid.getWidth() ), ATTR_HEIGHT, String.valueOf( grid.getHeight() ) ); writer.openElement( ATTR_HEADERS ); for ( GridHeader header : grid.getHeaders() ) { writer.writeElement( ATTR_HEADER, null, ATTR_NAME, header.getName(), ATTR_COLUMN, header.getColumn(), ATTR_TYPE, header.getType(), ATTR_HIDDEN, String.valueOf( header.isHidden() ), ATTR_META, String.valueOf( header.isMeta() ) ); } writer.closeElement(); writer.openElement( ATTR_ROWS ); for ( List<Object> row : grid.getRows() ) { writer.openElement( ATTR_ROW ); for ( Object field : row ) { writer.writeElement( ATTR_FIELD, field != null ? String.valueOf( field ) : EMPTY ); } writer.closeElement(); } writer.closeElement(); writer.closeElement(); writer.closeDocument(); }