package com.revolsys.record.io;
import java.util.HashMap;
import java.util.Map;
import java.util.NoSuchElementException;
import com.revolsys.io.AbstractDirectoryReader;
import com.revolsys.io.Reader;
import com.revolsys.record.Record;
import com.revolsys.record.schema.RecordDefinition;
import com.revolsys.record.schema.RecordDefinitionFactory;
import com.revolsys.spring.resource.Resource;
import com.revolsys.util.count.LabelCountMap;
public class RecordDirectoryReader extends AbstractDirectoryReader<Record>
implements RecordDefinitionFactory {
private LabelCountMap labelCountMap = new LabelCountMap();
private final Map<String, RecordDefinition> typePathRecordDefinitionMap = new HashMap<>();
public RecordDirectoryReader() {
}
protected void addRecordDefinition(final RecordReader reader) {
final RecordDefinition recordDefinition = reader.getRecordDefinition();
if (recordDefinition != null) {
final String path = recordDefinition.getPath();
this.typePathRecordDefinitionMap.put(path, recordDefinition);
}
}
@Override
public RecordDefinition getRecordDefinition(final String path) {
final RecordDefinition recordDefinition = this.typePathRecordDefinitionMap.get(path);
return recordDefinition;
}
public LabelCountMap getStatistics() {
return this.labelCountMap;
}
@Override
protected Reader<Record> newReader(final Resource resource) {
final RecordReader reader = RecordReader.newRecordReader(resource);
addRecordDefinition(reader);
return reader;
}
/**
* Get the next data object read by this reader.
*
* @return The next Record.
* @exception NoSuchElementException If the reader has no more data objects.
*/
@Override
public Record next() {
final Record record = super.next();
this.labelCountMap.addCount(record);
return record;
}
public void setStatistics(final LabelCountMap labelCountMap) {
if (this.labelCountMap != labelCountMap) {
this.labelCountMap = labelCountMap;
labelCountMap.connect();
}
}
}