@Override public int getIndexOfHeader( String name ) { return headers.indexOf( new GridHeader( name, null ) ); }
@Override public Grid addCumulativeColumn( int columnIndex, boolean addHeader ) { verifyGridState(); List<Object> column = getColumn( columnIndex ); List<Object> cumulativeColumn = new ArrayList<>(); double sum = 0d; for ( Object value : column ) { double number = value != null ? Double.parseDouble( String.valueOf( value ) ) : 0d; sum += number; cumulativeColumn.add( sum ); } addColumn( cumulativeColumn ); if ( addHeader && columnIndex < headers.size() ) { GridHeader header = headers.get( columnIndex ); if ( header != null ) { GridHeader regressionHeader = new GridHeader( header.getName() + CUMULATIVE_SUFFIX, header.getColumn() + CUMULATIVE_SUFFIX, header.getValueType(), header.getType(), header.isHidden(), header.isMeta() ); addHeader( regressionHeader ); } } return this; }
private void substituteData( EventQueryParams params, Grid grid ) { for ( int i = 0; i < grid.getHeaders().size(); i++ ) { GridHeader header = grid.getHeaders().get( i ); if ( header.hasOptionSet() ) { Map<String, String> optionMap = header.getOptionSetObject().getOptionCodePropertyMap( IdScheme.NAME ); grid.substituteMetaData( i, i, optionMap ); } else if ( header.hasLegendSet() ) { Map<String, String> legendMap = header.getLegendSetObject().getLegendUidPropertyMap( IdScheme.NAME ); grid.substituteMetaData( i, i, legendMap ); } } }
@Override public Grid substituteMetaData( Map<? extends Object, ? extends Object> metaDataMap ) { if ( metaDataMap == null || headers == null || headers.isEmpty() ) { return this; } for ( int colIndex = 0; colIndex < headers.size(); colIndex++ ) { GridHeader header = headers.get( colIndex ); // Header Object headerMetaName = metaDataMap.get( header.getName() ); if ( headerMetaName != null ) { header.setName( String.valueOf( headerMetaName ) ); } if ( header.isMeta() ) { // Column cells substituteMetaData( colIndex, colIndex, metaDataMap ); } } return this; }
/** * 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(); }
private void getEvents( EventQueryParams params, Grid grid, String sql ) { log.debug( String.format( "Analytics event query SQL: %s", sql ) ); SqlRowSet rowSet = jdbcTemplate.queryForRowSet( sql ); while ( rowSet.next() ) { grid.addRow(); int index = 1; for ( GridHeader header : grid.getHeaders() ) { if ( ITEM_LONGITUDE.equals( header.getName() ) || ITEM_LATITUDE.equals( header.getName() ) ) { double val = rowSet.getDouble( index ); grid.addValue( Precision.round( val, COORD_DEC ) ); } else if ( Double.class.getName().equals( header.getType() ) && !header.hasLegendSet() ) { double val = rowSet.getDouble( index ); grid.addValue( params.isSkipRounding() ? val : MathUtils.getRounded( val ) ); } else { grid.addValue( rowSet.getString( index ) ); } index++; } } }
@Override public String toString() { StringBuilder builder = new StringBuilder( "[\n" ); if ( headers != null && headers.size() > 0 ) { List<String> headerNames = new ArrayList<>(); for ( GridHeader header : headers ) { headerNames.add( header.getName() ); } builder.append( headerNames ).append( "\n" ); } for ( List<Object> row : grid ) { builder.append( row ).append( "\n" ); } return builder.append( "]" ).toString(); }
/** * Updates the mapping between header columns and grid indexes. This method * should be invoked whenever the columns are manipulated. */ private void updateColumnIndexMap() { columnIndexMap.clear(); for ( int i = 0; i < headers.size(); i++ ) { columnIndexMap.put( headers.get( i ).getColumn(), i ); } }
@Override public JFreeChart getOrganisationUnitDistributionChart( OrganisationUnitGroupSet groupSet, OrganisationUnit organisationUnit ) { Map<String, Double> categoryValues = new HashMap<>(); Grid grid = getOrganisationUnitDistribution( groupSet, organisationUnit, true ); if ( grid == null || grid.getHeight() != 1 ) { return null; } for ( int i = 1; i < grid.getWidth() - 2; i++ ) // Skip name, none and total column { categoryValues.put( grid.getHeaders().get( i ).getName(), Double.valueOf( String.valueOf( grid.getRow( 0 ).get( i ) ) ) ); } String title = groupSet.getName() + TITLE_SEP + organisationUnit.getName(); JFreeChart chart = chartService.getJFreeChart( title, PlotOrientation.VERTICAL, CategoryLabelPositions.DOWN_45, categoryValues ); return chart; }
/** * 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(); } }
@Override public Grid addEmptyHeaders( int number ) { for ( int i = 0; i < number; i++ ) { headers.add( new GridHeader( "", false, false ) ); } updateColumnIndexMap(); return this; }
GridHeader regressionHeader = new GridHeader( header.getName() + REGRESSION_SUFFIX, header.getColumn() + REGRESSION_SUFFIX, header.getValueType(), header.getType(), header.isHidden(), header.isMeta() );
sheet.addCell( new Label( columnIndex++, rowNumber, header.getColumn(), XLS_FORMAT_LABEL ) );
@Override public Grid addHeaders( ResultSet rs ) { try { ResultSetMetaData rsmd = rs.getMetaData(); int columnNo = rsmd.getColumnCount(); for ( int i = 1; i <= columnNo; i++ ) { addHeader( new GridHeader( rsmd.getColumnLabel( i ), false, false ) ); } } catch ( SQLException ex ) { throw new RuntimeException( ex ); } return this; }
table.addCell( getItalicCell( header.getColumn() ) );
/** * Adds grid columns for each organisation unit level. */ @SuppressWarnings( "unchecked" ) private void addHierarchyColumns( Grid grid, int ouIdColumnIndex ) { Map<Object, List<?>> ancestorMap = (Map<Object, List<?>>) grid.getInternalMetaData().get( AnalyticsMetaDataKey.ORG_UNIT_ANCESTORS.getKey() ); Assert.notEmpty( ancestorMap, "Ancestor map cannot be null or empty when show hierarchy is enabled" ); int newColumns = ancestorMap.values().stream().mapToInt( List::size ).max().orElseGet( () -> 0 ); List<GridHeader> headers = new ArrayList<>(); for ( int i = 0; i < newColumns; i++ ) { int level = i + 1; String name = String.format( "Org unit level %d", level ); String column = String.format( "orgunitlevel%d", level ); headers.add( new GridHeader( name, column, ValueType.TEXT, String.class.getName(), false, true ) ); } grid.addHeaders( ouIdColumnIndex, headers ); grid.addAndPopulateColumnsBefore( ouIdColumnIndex, ancestorMap, newColumns ); }
grid.addHeader( new GridHeader( col.getDimension(), col.getDisplayName(), ValueType.TEXT, String.class.getName(), false, true ) ); grid.addHeader( new GridHeader( level.getDimension(), level.getDisplayName(), ValueType.TEXT, String.class.getName(), false, true ) ); grid.addHeader( new GridHeader( PERIOD_START_DATE_ID, PERIOD_START_DATE_NAME, ValueType.DATETIME, Date.class.getName(), false, false ) ); grid.addHeader( new GridHeader( PERIOD_END_DATE_ID, PERIOD_END_DATE_NAME, ValueType.DATETIME, Date.class.getName(), false, false ) ); grid.addHeader( new GridHeader( VALUE_ID, VALUE_HEADER_NAME, ValueType.NUMBER, Double.class.getName(), false, false ) ); grid.addHeader( new GridHeader( NUMERATOR_ID, NUMERATOR_HEADER_NAME, ValueType.NUMBER, Double.class.getName(), false, false ) ) .addHeader( new GridHeader( DENOMINATOR_ID, DENOMINATOR_HEADER_NAME, ValueType.NUMBER, Double.class.getName(), false, false ) ) .addHeader( new GridHeader( FACTOR_ID, FACTOR_HEADER_NAME, ValueType.NUMBER, Double.class.getName(), false, false ) ) .addHeader( new GridHeader( MULTIPLIER_ID, MULTIPLIER_HEADER_NAME, ValueType.NUMBER, Double.class.getName(), false, false ) ) .addHeader( new GridHeader( DIVISOR_ID, DIVISOR_HEADER_NAME, ValueType.NUMBER, Double.class.getName(), false, false ) );
@Override public Grid addHeaders( SqlRowSet rs ) { SqlRowSetMetaData rsmd = rs.getMetaData(); int columnNo = rsmd.getColumnCount(); for ( int i = 1; i <= columnNo; i++ ) { addHeader( new GridHeader( rsmd.getColumnLabel( i ), false, false ) ); } return this; }
grid.addHeader( vlInx, new GridHeader( ATTRIBUTEOPTIONCOMBO_DIM_ID, ATTRIBUTEOPTIONCOMBO_DIM_ID, ValueType.TEXT, String.class.getName(), false, true ) ) .addHeader( vlInx, new GridHeader( CATEGORYOPTIONCOMBO_DIM_ID, CATEGORYOPTIONCOMBO_DIM_ID, ValueType.TEXT, String.class.getName(), false, true ) ) .addColumn( vlInx, aocCol ) .addColumn( vlInx, cocCol );
String col = StringUtils.defaultIfEmpty( COLUMN_NAMES.get( row ), row ); outputGrid.addHeader( new GridHeader( name, col, ValueType.TEXT, String.class.getName(), false, true ) ); TOTAL_COLUMN_PRETTY_NAME; outputGrid.addHeader( new GridHeader( display, display, ValueType.NUMBER, Double.class.getName(), false, false ) ); } );