package net.notdot.bdbdatastore.server;
import java.util.Set;
import net.notdot.bdbdatastore.Indexing;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.appengine.entity.Entity;
import com.google.protobuf.ByteString;
import com.google.protobuf.InvalidProtocolBufferException;
import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.SecondaryDatabase;
import com.sleepycat.je.SecondaryMultiKeyCreator;
public class SinglePropertyIndexer implements SecondaryMultiKeyCreator {
static final Logger logger = LoggerFactory.getLogger(SinglePropertyIndexer.class);
public void createSecondaryKeys(SecondaryDatabase db, DatabaseEntry key,
DatabaseEntry data, Set<DatabaseEntry> results)
throws DatabaseException {
try {
Entity.EntityProto entity = Indexing.EntityData.parseFrom(data.getData()).getData();
Entity.Path path = entity.getKey().getPath();
ByteString kind = path.getElement(path.getElementCount() - 1).getType();
for(Entity.Property prop : entity.getPropertyList()) {
results.add(new DatabaseEntry(Indexing.PropertyIndexKey.newBuilder()
.setKind(kind)
.setName(prop.getName())
.setValue(prop.getValue()).build().toByteArray()));
}
} catch (InvalidProtocolBufferException e) {
// TODO: Make this error message more useful somehow.
logger.error("Attempted to index invalid entity");
}
}
}