grid.setTitle( name ); grid.setSubtitle( gridTitle ); grid.setTitle( gridTitle ); grid.addHeader( new GridHeader( name + " ID", col + "id", ValueType.TEXT, String.class.getName(), true, true ) ); grid.addHeader( new GridHeader( name, col + "name", ValueType.TEXT, String.class.getName(), false, true ) ); grid.addHeader( new GridHeader( name + " code", col + "code", ValueType.TEXT, String.class.getName(), true, true ) ); grid.addHeader( new GridHeader( name + " description", col + "description", ValueType.TEXT, String.class.getName(), true, true ) ); grid.addHeader( new GridHeader( "Reporting month", REPORTING_MONTH_COLUMN_NAME, ValueType.TEXT, String.class.getName(), true, true ) ); grid.addHeader( new GridHeader( "Organisation unit parameter", PARAM_ORGANISATIONUNIT_COLUMN_NAME, ValueType.TEXT, String.class.getName(), true, true ) ); grid.addHeader( new GridHeader( "Organisation unit is parent", ORGANISATION_UNIT_IS_PARENT_COLUMN_NAME, ValueType.TEXT, String.class.getName(), true, true ) ); final int startColumnIndex = grid.getHeaders().size(); final int numberOfColumns = getGridColumns().size(); grid.addHeader( new GridHeader( getColumnName( column ), getPrettyColumnName( column, displayProperty ), ValueType.NUMBER, Double.class.getName(), false, false ) ); grid.addRow(); grid.addValue( object.getDimensionItem() ); grid.addValue( object.getDisplayProperty( displayProperty ) ); grid.addValue( object.getCode() ); grid.addValue( object.getDisplayDescription() );
@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; }
List<Object> aocCol = Lists.newArrayList(); int dxInx = grid.getIndexOfHeader( DATA_X_DIM_ID ); int vlInx = grid.getWidth() - 1; for ( List<Object> row : grid.getRows() ) 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 );
public static void addValues( List<List<String>> ids, Grid grid, Grid outputGrid ) { Map<String, Object> valueMap = getAggregatedEventDataMapping( grid ); boolean hasValues = false; for ( List<String> idList : ids ) { Collections.sort( idList ); String key = StringUtils.join( idList, DIMENSION_SEP ); Object value = valueMap.get( key ); hasValues = hasValues || value != null; outputGrid.addValue( value ); } if ( !hasValues ) { outputGrid.removeCurrentWriteRow(); } } }
/** * 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; }
/** * Fill grid with aggregated data map with key and value * * @param params the {@link DataQueryParams}. * @param grid the grid * @param aggregatedDataMap the aggregated data map */ private void fillGridWithAggregatedDataMap( DataQueryParams params, Grid grid, Map<String, Double> aggregatedDataMap) { for ( Map.Entry<String, Double> entry : aggregatedDataMap.entrySet() ) { Double value = params.isSkipRounding() ? entry.getValue() : MathUtils.getRounded( entry.getValue() ); grid.addRow() .addValues( entry.getKey().split( DIMENSION_SEP ) ) .addValue( value ); if ( params.isIncludeNumDen() ) { grid.addNullValues( 3 ); } } }
grid.setTitle( groupSet.getName() + TITLE_SEP + organisationUnit.getName() ); grid.addHeader( new GridHeader( FIRST_COLUMN_TEXT, FIRST_COLUMN_TEXT, ValueType.TEXT, String.class.getName(), false, true ) ); grid.addHeader( new GridHeader( group.getName(), false, false ) ); grid.addHeader( new GridHeader( HEADER_TOTAL, false, false ) ); grid.addRow(); grid.addValue( unit.getName() ); grid.addValue( count ); grid.addValue( totalGroup );
grid.addHeader( new GridHeader( TRACKED_ENTITY_INSTANCE_ID, "Instance" ) ); grid.addHeader( new GridHeader( CREATED_ID, "Created" ) ); grid.addHeader( new GridHeader( LAST_UPDATED_ID, "Last updated" ) ); grid.addHeader( new GridHeader( ORG_UNIT_ID, "Organisation unit" ) ); grid.addHeader( new GridHeader( ORG_UNIT_NAME, "Organisation unit name" ) ); grid.addHeader( new GridHeader( TRACKED_ENTITY_ID, "Tracked entity type" ) ); grid.addHeader( new GridHeader( INACTIVE_ID, "Inactive" ) ); grid.addHeader( new GridHeader( DELETED, "Deleted", ValueType.BOOLEAN, "boolean", false, false ) ); grid.addHeader( new GridHeader( item.getItem().getUid(), item.getItem().getName() ) ); grid.addRow(); grid.addValue( entity.get( TRACKED_ENTITY_INSTANCE_ID ) ); grid.addValue( entity.get( CREATED_ID ) ); grid.addValue( entity.get( LAST_UPDATED_ID ) ); grid.addValue( entity.get( ORG_UNIT_ID ) ); grid.addValue( entity.get( ORG_UNIT_NAME ) ); grid.addValue( entity.get( TRACKED_ENTITY_ID ) ); grid.addValue( entity.get( INACTIVE_ID ) ); grid.addValue( entity.get( DELETED ) ); grid.addValue( entity.get( item.getItemId() ) ); grid.setMetaData( metaData );
grid.setTitle( title ); grid.addHeader( new GridHeader( getValue( cell ), false, false ) ); grid.addEmptyHeaders( ( colSpan - 1 ) ); grid.addRow(); grid.addValue( getValue( cell ) ); grid.addEmptyValues( ( colSpan - 1 ) );
setSubtitle( unit.getName() + SPACE + format.formatPeriod( period ) ); grid.addHeader( new GridHeader( i18n.getString( "dataelement" ), false, true ) ); grid.addHeader( new GridHeader( optionCombo.isDefault() ? DEFAULT_HEADER : optionCombo.getName(), false, false ) ); grid.addHeader( new GridHeader( categoryOption.getName(), false, false ) ); grid.addHeader( new GridHeader( TOTAL_HEADER, false, false ) ); grid.addRow(); grid.addValue( new GridValue( dataElement.getFormNameFallback() ) ); // Data element name grid.addValue( new GridValue( value, attributes ) ); grid.addValue( new GridValue( value ) ); grid.addValue( new GridValue( value ) );
/** * 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++; } } }
grid.addHeader( new GridHeader( DimensionalObject.DATA_COLLAPSED_DIM_ID, DataQueryParams.DISPLAY_NAME_DATA_X, ValueType.TEXT, String.class.getName(), false, true ) ); grid.addHeader( new GridHeader( item.getItem().getUid(), item.getItem().getName(), item.getValueType(), item.getTypeAsString(), false, true, item.getOptionSet(), item.getLegendSet() ) ); grid.addHeader( new GridHeader( dimension.getDimension(), dimension.getDisplayName(), ValueType.TEXT, String.class.getName(), false, true ) ); 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 ) ); if ( maxLimit > 0 && grid.getHeight() > maxLimit ) if ( params.hasSortOrder() && grid.getHeight() > 0 ) grid.sortGrid( 1, params.getSortOrderAsInt() ); if ( params.hasLimit() && grid.getHeight() > params.getLimit() ) grid.limitGrid( params.getLimit() );
int dxInx = grid.getIndexOfHeader( DimensionalObject.DATA_X_DIM_ID ); int ouInx = grid.getIndexOfHeader( DimensionalObject.ORGUNIT_DIM_ID ); int aoInx = hasAttributeOptions ? grid.getIndexOfHeader( DimensionalObject.ATTRIBUTEOPTIONCOMBO_DIM_ID ) : 0; int vlInx = grid.getWidth() - 1; .collect( Collectors.toMap( d -> d.getDimensionItem(), d -> d ) ); for ( List<Object> row : grid.getRows() )
grid.addRow(); grid.addValue( itemId ); grid.addValue( params.getProgramIndicator().getUid() ); grid.addValue( gridValue ); grid.addValue( dimensionValue ); grid.addValue( params.isSkipRounding() ? value : getRounded( value ) ); grid.addValue( AnalyticsUtils.getRoundedValue( params, indicator.getDecimals(), value ) ); grid.addValue( value ); grid.addNullValues( 5 );
grid.addRow() .addValues( DimensionItem.getItemIdentifiers( row ) ) .addValue( AnalyticsUtils.getRoundedValue( dataSourceParams, indicator.getDecimals(), value.getValue() ) ); grid.addValue( AnalyticsUtils.getRoundedValue( dataSourceParams, indicator.getDecimals(), value.getNumeratorValue() ) ) .addValue( AnalyticsUtils.getRoundedValue( dataSourceParams, indicator.getDecimals(), value.getDenominatorValue() ) ) .addValue( AnalyticsUtils.getRoundedValue( dataSourceParams, indicator.getDecimals(), value.getFactor() ) ) .addValue( value.getMultiplier() ) .addValue( value.getDivisor() );
grid.addHeader( new GridHeader( ITEM_EVENT, NAME_EVENT, ValueType.TEXT, String.class.getName(), false, true ) ) .addHeader( new GridHeader( ITEM_PROGRAM_STAGE, NAME_PROGRAM_STAGE, ValueType.TEXT, String.class.getName(), false, true ) ) .addHeader( new GridHeader( ITEM_EVENT_DATE, NAME_EVENT_DATE, ValueType.DATE, Date.class.getName(), false, true ) ) .addHeader( new GridHeader( ITEM_LONGITUDE, NAME_LONGITUDE, ValueType.NUMBER, Double.class.getName(), false, true ) ) .addHeader( new GridHeader( ITEM_LATITUDE, NAME_LATITUDE, ValueType.NUMBER, Double.class.getName(), false, true ) ) .addHeader( new GridHeader( ITEM_ORG_UNIT_NAME, NAME_ORG_UNIT_NAME, ValueType.TEXT, String.class.getName(), false, true ) ) .addHeader( new GridHeader( ITEM_ORG_UNIT_CODE, NAME_ORG_UNIT_CODE, ValueType.TEXT, String.class.getName(), false, true ) ); grid.addHeader( new GridHeader( dimension.getDimension(), dimension.getDisplayName(), ValueType.TEXT, String.class.getName(), false, true ) ); grid.addHeader( new GridHeader( item.getItem().getUid(), item.getItem().getName(), item.getValueType(), item.getTypeAsString(), false, true, item.getOptionSet(), item.getLegendSet() ) ); timer.getTime( "Got events " + grid.getHeight() ); grid.getMetaData().put( PAGER.getKey(), pager );
@Override public Grid getSqlViewGrid( SqlView sqlView, Map<String, String> criteria, Map<String, String> variables, List<String> filters, List<String> fields ) { validateSqlView( sqlView, criteria, variables ); Grid grid = new ListGrid(); grid.setTitle( sqlView.getName() ); grid.setSubtitle( sqlView.getDescription() ); validateSqlView( sqlView, criteria, variables ); log.info( String.format( "Retriving data for SQL view: '%s'", sqlView.getUid() ) ); String sql = sqlView.isQuery() ? getSqlForQuery( grid, sqlView, criteria, variables, filters, fields ) : getSqlForView( grid, sqlView, criteria, filters, fields ); sqlViewStore.populateSqlViewGrid( grid, sql ); return grid; }
/** * 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(); } }