package no.priv.garshol.duke.databases;
import java.util.Map;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.Collection;
import no.priv.garshol.duke.Record;
import no.priv.garshol.duke.Property;
import no.priv.garshol.duke.Database;
import no.priv.garshol.duke.Configuration;
/**
* Naïve in-memory store of records. Matches all records against all
* other records.
*/
public class InMemoryDatabase implements Database {
private Configuration config;
private Map<String, Record> idindex;
private Collection<Record> records;
public InMemoryDatabase() {
this.idindex = new HashMap();
this.records = new ArrayList();
}
public void setConfiguration(Configuration config) {
this.config = config;
}
public void setOverwrite(boolean overwrite) {
}
/**
* Returns true iff the database is held entirely in memory, and
* thus is not persistent.
*/
public boolean isInMemory() {
return true;
}
/**
* Add the record to the index.
*/
public void index(Record record) {
for (Property p : config.getIdentityProperties()) {
Collection<String> values = record.getValues(p.getName());
if (values == null)
continue;
for (String id : values)
idindex.put(id, record);
}
records.add(record);
}
/**
* Look up record by identity.
*/
public Record findRecordById(String id) {
return idindex.get(id);
}
/**
* Look up potentially matching records.
*/
public Collection<Record> findCandidateMatches(Record record) {
return records;
}
/**
* Flushes all changes to disk. For in-memory databases this is a
* no-op.
*/
public void commit() {
}
/**
* Stores state to disk and closes all open resources.
*/
public void close() {
}
public String toString() {
return "InMemoryDatabase";
}
}