private final void populateFieldFromMapTypeFamily( T entity, Field field, KijiColumn column, KijiRowData row) throws IOException, IllegalAccessException { LOG.debug("Populating field '{}' from map-type family '{}'.", field, column.family()); if (column.pageSize() > 0) { // Field is a closeable iterator of map-family entries (qualifier, timestamp, value). LOG.debug( "Populating field '{}' from paging-enabled map-type family '{}'.", field, column.family()); final MapFamilyVersionIterator<?> iterator = new MapFamilyVersionIterator<Object>( row, column.family(), column.pageSize(), column.pageSize()); field.set(entity, iterator); } else if (column.maxVersions() == 1) { // Field is a map: qualifier -> single value: LOG.debug("Populating single version map field '{}'.", field); Object value = null; if (field.getType() == KijiCellIterator.class) { Iterator<KijiCell<Object>> it = row.iterator(column.family()); value = new KijiCellIterator<Object>(it); } else if (field.getType() == MapTypeCell.class) { value = new MapTypeCell<Object>(row.getMostRecentCells(column.family())); } else if (field.getType() == MapTypeValue.class) { value = new MapTypeValue<Object>(row.getMostRecentValues(column.family())); } field.set(entity, value); } else { // Field is a map: qualifier -> time-series LOG.debug("Populating map field '{}'.", field); Object value = null; if (field.getType() == KijiCellIterator.class) { Iterator<KijiCell<Object>> it = row.iterator(column.family()); value = new KijiCellIterator<Object>(it); } else if (field.getType() == TSMapTypeValue.class) { // TODO: ARGH. This is awful. TSMapTypeValue<Object> tsValues = new TSMapTypeValue<Object>(); for (String s : row.getQualifiers(column.family())) { final TimeSeries<Object> timeseries = new TimeSeries<Object>(); for (final KijiCell<Object> cell : row.asIterable(column.family(), s)) { timeseries.put(cell.getTimestamp(), cell.getData()); } tsValues.put(s, timeseries); } value = tsValues; } field.set(entity, value); } }
private final void populateFieldFromFullyQualifiedColumn( T entity, Field field, KijiColumn column, KijiRowData row) throws IOException, IllegalAccessException { if (column.maxVersions() == 1) { // Field represents a single value from a fully-qualified column: LOG.debug( "Populating field '{}' from column '{}:{}'.", field, column.family(), column.qualifier()); KijiCell<?> cell = row.getMostRecentCell(column.family(), column.qualifier()); if (cell == null) return; Object value = cell.getData(); if (field.getType() == KijiCell.class) { value = cell; } else if (field.getType() == String.class && value != null) { value = value.toString(); } // If there is no cell for a field with a primitive type, use the default value: if ((null == value) && field.getType().isPrimitive()) { value = Defaults.defaultValue(field.getType()); } field.set(entity, value); } else { // Field represents a time-series from a fully-qualified column: if (column.pageSize() > 0) { final ColumnVersionIterator<?> iterator = new ColumnVersionIterator<Object>( row, column.family(), column.qualifier(), column.pageSize()); field.set(entity, iterator); } else { Object value = null; if (field.getType() == KijiCellValueIterator.class) { value = new KijiCellValueIterator<Object>( row.iterator(column.family(), column.qualifier())); } else if (field.getType() == TimeSeries.class) { final TimeSeries<Object> timeseries = new TimeSeries<Object>(); for (final KijiCell<Object> cell : row.asIterable(column.family(), column.qualifier())) { timeseries.put(cell.getTimestamp(), cell.getData()); } value = timeseries; } field.set(entity, value); } } }