/** * Builds the master crosstab, including all dimensions and categories that * will be included in the final result. * * By default this method will use the first result's crosstab dimensions * and categories, assuming that they are all the same. * * Subclasses can override this method to build the other dimensions. * * @param results * @return */ protected Crosstab<Serializable> createMasterCrosstab(final Collection<? extends R> results) { final R firstResult = results.iterator().next(); final Crosstab<?> firstCrosstab = firstResult.getCrosstab(); final Class<?> valueClass = firstCrosstab.getValueClass(); final CrosstabDimension dimension1 = firstCrosstab.getDimension(0); final CrosstabDimension dimension2 = firstCrosstab.getDimension(1); @SuppressWarnings({ "unchecked", "rawtypes" }) final Crosstab<Serializable> masterCrosstab = new Crosstab(valueClass, dimension1, dimension2); return masterCrosstab; }
@Override public R reduce(final Collection<? extends R> results) { final Crosstab<Serializable> masterCrosstab = createMasterCrosstab(results); final Class<?> valueClass = masterCrosstab.getValueClass(); final CrosstabDimension dimension1 = masterCrosstab.getDimension(0); final CrosstabDimension dimension2 = masterCrosstab.getDimension(1); final CrosstabNavigator<Serializable> masterNav = masterCrosstab.navigate(); for (final String category1 : dimension1) { masterNav.where(dimension1.getName(), category1); final Crosstab<?> slaveCrosstab = result.getCrosstab(); try { final Object slaveValue = slaveCrosstab.getValue(categories); slaveValues.add(slaveValue); final ResultProducer resultProducer = slaveCrosstab.explore(categories); if (resultProducer != null) { slaveResultProducers.add(resultProducer);
@Override public Number getValue(final String parameter) { return _columnStatisticsCrosstab .where(BooleanAnalyzer.DIMENSION_MEASURE, BooleanAnalyzer.MEASURE_NULL_COUNT) .where(BooleanAnalyzer.DIMENSION_COLUMN, parameter).safeGet(0); }
public CrosstabDimension getDimension(final String dimensionName) { return getDimension(getDimensionIndex(dimensionName)); }
/** * Puts the given value to the navigated position in the crosstab. * * @param value * the value to put. * @param createCategories * if true, the chosen categories will automatically be created * if they do not already exists in the dimensions of the * crosstab. * @throws IllegalArgumentException * if the position or value is invalid, typically because one or * more dimensions lacks a specified category or the value type * is not acceptable (typically because of class casting issues) * @throws NullPointerException * if some of the specified categories are null */ public void put(final E value, final boolean createCategories) throws IllegalArgumentException, NullPointerException { if (createCategories) { for (int i = 0; i < categories.length; i++) { final String category = categories[i]; final CrosstabDimension dimension = crosstab.getDimension(i); dimension.addCategory(category); } } crosstab.putValue(value, categories); }
@Metric(order = 1, value = "Row count") public Number getRowCount() { final CrosstabDimension columnDimension = _columnStatisticsCrosstab.getDimension(BooleanAnalyzer.DIMENSION_COLUMN); return _columnStatisticsCrosstab.where(BooleanAnalyzer.DIMENSION_MEASURE, BooleanAnalyzer.MEASURE_ROW_COUNT) .where(columnDimension, columnDimension.getCategories().get(0)).get(); }
@Override public CrosstabResult getResult() { final CrosstabDimension columnDimension = new CrosstabDimension("Column"); final CrosstabDimension yearDimension = new CrosstabDimension("Year"); final SortedSet<Integer> years = new TreeSet<>(); for (final InputColumn<Date> col : dateColumns) { final Map<Integer, AtomicInteger> countMap = distributionMap.get(col); final Set<Integer> yearsOfColumn = countMap.keySet(); years.addAll(yearsOfColumn); } for (final Integer year : years) { yearDimension.addCategory(year + ""); } final Crosstab<Integer> crosstab = new Crosstab<>(Integer.class, columnDimension, yearDimension); for (final InputColumn<Date> col : dateColumns) { columnDimension.addCategory(col.getName()); final CrosstabNavigator<Integer> nav = crosstab.where(columnDimension, col.getName()); final Map<Integer, AtomicInteger> countMap = distributionMap.get(col); for (final Entry<Integer, AtomicInteger> entry : countMap.entrySet()) { final Integer year = entry.getKey(); final AtomicInteger count = entry.getValue(); nav.where(yearDimension, year + "").put(count.intValue()); } } return new CrosstabResult(crosstab); }
crosstab.getDimension(PatternFinderAnalyzer.DIMENSION_NAME_PATTERN); final List<String> patterns = patternDimension.getCategories(); crosstab.where(PatternFinderAnalyzer.DIMENSION_NAME_PATTERN, pattern); final Number matchCount = (Number) navigator .where(PatternFinderAnalyzer.DIMENSION_NAME_MEASURES, PatternFinderAnalyzer.MEASURE_MATCH_COUNT) for (final Entry<TokenPattern, AtomicInteger> entry : sortedEntrySet) { final CrosstabNavigator<Serializable> nav = crosstab.navigate(); final TokenPattern pattern = entry.getKey(); nav.where(PatternFinderAnalyzer.DIMENSION_NAME_PATTERN, pattern.toSymbolicString());
public static boolean findDimension(final Crosstab<Number> crosstab, final String dimensionName) { try { final CrosstabDimension dimension = crosstab.getDimension(dimensionName); if (dimension == null) { return false; } } catch (final Exception e) { return false; } return true; }
final Crosstab<Number> crosstab = new Crosstab<>(Number.class, columnDimension, measureDimension); for (final InputColumn<Boolean> column : _columns) { final CrosstabNavigator<Number> nav = crosstab.navigate().where(columnDimension, column.getName()); final BooleanAnalyzerColumnDelegate delegate = _columnDelegates.get(column); valueCombinationCrosstab = new Crosstab<>(Number.class, columnDimension, measureDimension); final CrosstabNavigator<Number> nav = valueCombinationCrosstab.where(measureDimension, measureName);
new Crosstab<>(Number.class, columnStatisticCrosstabDimensions); final Crosstab<Number> newResultColumnValueCombination = new Crosstab<>(Number.class, columnValueCombinationCrosstabDimensions); if (partialColumnStatisticsCrosstab != null) { final CrosstabDimension columnDimension = partialColumnStatisticsCrosstab.getDimension(BooleanAnalyzer.DIMENSION_COLUMN); final CrosstabDimension measureDimension = partialColumnStatisticsCrosstab.getDimension(BooleanAnalyzer.DIMENSION_MEASURE); CrosstabReducerHelper .addData(newResultColumnStatistics, partialColumnStatisticsCrosstab, columnDimension,
public CrosstabNavigator<E> where(final CrosstabDimension dimension, final String isCategory) { return navigate().where(dimension, isCategory); }
public static Crosstab<Serializable> createCrosstab() { final CrosstabDimension measuresDimension = new CrosstabDimension(DIMENSION_NAME_MEASURES); measuresDimension.addCategory(MEASURE_MATCH_COUNT); measuresDimension.addCategory(MEASURE_SAMPLE); final CrosstabDimension patternDimension = new CrosstabDimension(DIMENSION_NAME_PATTERN); return new Crosstab<>(Serializable.class, measuresDimension, patternDimension); }
public <E> E render(final CrosstabRendererCallback<E> callback) { autoAssignDimensions(); final List<CrosstabDimension> dimensions = crosstab.getDimensions(); if (CollectionUtils.isNullOrEmpty(dimensions)) { return callback.getResult(); final CrosstabNavigator<?> navigator = crosstab.navigate();
public CrosstabNavigator(final Crosstab<E> crosstab) { this.crosstab = crosstab; categories = new String[crosstab.getDimensionCount()]; }
public CrosstabNavigator<E> where(final String dimension, final String isCategory) { final int index = crosstab.getDimensionIndex(dimension); categories[index] = isCategory; return this; }
@Override public void beginTable(final Crosstab<?> crosstab, final List<CrosstabDimension> horizontalDimensions, final List<CrosstabDimension> verticalDimensions) { sb = new StringBuilder(); horizontalDimensionWidth = 0; for (final CrosstabDimension dimension : horizontalDimensions) { final List<String> categories = dimension.getCategories(); for (final String category : categories) { horizontalDimensionWidth = Math.max(horizontalDimensionWidth, category.length()); } } // minimum width = 6 horizontalDimensionWidth = Math.max(horizontalDimensionWidth, 6); if (ReflectionUtils.is(crosstab.getValueClass(), Number.class)) { leftAligned = false; } else { leftAligned = true; } }
private int getTotalCount() { int sum = 0; final Crosstab<?> crosstab = getSingleCrosstab(); final CrosstabDimension patternDimension = crosstab.getDimension(PatternFinderAnalyzer.DIMENSION_NAME_PATTERN); final List<String> categories = patternDimension.getCategories(); for (final String category : categories) { final Object value = crosstab.where(patternDimension, category) .where(PatternFinderAnalyzer.DIMENSION_NAME_MEASURES, PatternFinderAnalyzer.MEASURE_MATCH_COUNT) .get(); if (value instanceof Number) { sum += ((Number) value).intValue(); } } return sum; }
@Override public CrosstabResult getResult() { final CrosstabDimension columnDimension = new CrosstabDimension("Column"); final CrosstabDimension weekNumberDimension = new CrosstabDimension("Week number"); final SortedSet<Integer> weekNumbers = new TreeSet<>(); for (final InputColumn<Date> col : dateColumns) { final Map<Integer, AtomicInteger> countMap = distributionMap.get(col); final Set<Integer> weekNumbersOfColumn = countMap.keySet(); weekNumbers.addAll(weekNumbersOfColumn); } for (final Integer weekNumber : weekNumbers) { weekNumberDimension.addCategory(weekNumber + ""); } final Crosstab<Integer> crosstab = new Crosstab<>(Integer.class, columnDimension, weekNumberDimension); for (final InputColumn<Date> col : dateColumns) { columnDimension.addCategory(col.getName()); final CrosstabNavigator<Integer> nav = crosstab.where(columnDimension, col.getName()); final Map<Integer, AtomicInteger> countMap = distributionMap.get(col); for (final Entry<Integer, AtomicInteger> entry : countMap.entrySet()) { final Integer weekNumber = entry.getKey(); final AtomicInteger count = entry.getValue(); nav.where(weekNumberDimension, weekNumber + "").put(count.intValue()); } } return new CrosstabResult(crosstab); }