package com.revolsys.record.io;
import java.util.Map;
import com.revolsys.io.AbstractRecordWriter;
import com.revolsys.record.Record;
import com.revolsys.record.schema.RecordDefinition;
import com.revolsys.record.schema.RecordStore;
public class RecordStoreRecordWriter extends AbstractRecordWriter {
private final RecordStore recordStore;
private final RecordWriter writer;
private final RecordDefinition recordDefinition;
public RecordStoreRecordWriter(final RecordStore recordStore,
final RecordDefinition recordDefinition) {
this.recordStore = recordStore;
this.recordDefinition = recordStore.getRecordDefinition(recordDefinition);
if (this.recordDefinition == null) {
throw new IllegalArgumentException(
"Cannot find recordDefinition=" + recordDefinition.getPathName() + " for " + recordStore);
}
this.writer = recordStore.newRecordWriter(recordDefinition);
}
@Override
public void close() {
try {
this.writer.close();
} finally {
this.recordStore.close();
}
}
@Override
public void flush() {
this.writer.flush();
}
@Override
public RecordDefinition getRecordDefinition() {
return this.recordDefinition;
}
@Override
public Record newRecord() {
final RecordDefinition recordDefinition = getRecordDefinition();
return this.recordStore.newRecord(recordDefinition);
}
@Override
public Record newRecord(final Map<String, ? extends Object> values) {
final RecordDefinition recordDefinition = getRecordDefinition();
return this.recordStore.newRecord(recordDefinition, values);
}
@Override
public void write(final Record record) {
if (this.writer != null) {
this.writer.write(record);
}
}
}