package com.revolsys.record.io.format.directory; import javax.annotation.PreDestroy; import com.revolsys.io.AbstractRecordWriter; import com.revolsys.record.Record; import com.revolsys.record.RecordState; import com.revolsys.record.schema.RecordDefinition; public class DirectoryRecordStoreWriter extends AbstractRecordWriter { private DirectoryRecordStore recordStore; private RecordDefinition recordDefinition; public DirectoryRecordStoreWriter(final DirectoryRecordStore recordStore) { this.recordStore = recordStore; } public DirectoryRecordStoreWriter(final DirectoryRecordStore recordStore, final RecordDefinition recordDefinition) { this.recordStore = recordStore; this.recordDefinition = recordDefinition; } @PreDestroy @Override public void close() { super.close(); this.recordStore = null; this.recordDefinition = null; } @Override public RecordDefinition getRecordDefinition() { return this.recordDefinition; } @Override public void write(final Record record) { if (record != null) { try { final RecordState state = record.getState(); switch (state) { case MODIFIED: this.recordStore.updateRecord(record); break; case PERSISTED: this.recordStore.updateRecord(record); break; case DELETED: this.recordStore.deleteRecord(record); break; default: this.recordStore.insertRecord(record); break; } } catch (final RuntimeException e) { throw e; } catch (final Error e) { throw e; } catch (final Exception e) { throw new RuntimeException("Unable to write", e); } } } }