package com.sissi.server.exchange.impl;
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DBObject;
import com.mongodb.WriteConcern;
import com.sissi.config.Dictionary;
import com.sissi.config.MongoConfig;
import com.sissi.config.impl.MongoUtils;
import com.sissi.server.exchange.Tracer;
import com.sissi.server.exchange.TracerContext;
/**
* 索引策略: {"pid":1}
* @author kim 2014年5月8日
*/
public class MongoTracerContext implements TracerContext {
private final DBObject failed = BasicDBObjectBuilder.start("$set", BasicDBObjectBuilder.start(Dictionary.FIELD_ACTIVATE, false).get()).get();
private final MongoConfig config;
public MongoTracerContext(MongoConfig config) {
super();
this.config = config;
}
@Override
public boolean trace(Tracer tracer) {
return MongoUtils.success(this.config.collection().save(BasicDBObjectBuilder.start(tracer.plus()).add(Dictionary.FIELD_PID, tracer.id()).add(Dictionary.FIELD_FROM, tracer.initiator()).add(Dictionary.FIELD_ACTIVATE, true).add(Dictionary.FIELD_TO, tracer.target()).add(Dictionary.FIELD_TIMESTAMP, System.currentTimeMillis()).get(), WriteConcern.SAFE));
}
public boolean trace(String id) {
return MongoUtils.asBoolean(this.config.collection().findAndModify(BasicDBObjectBuilder.start().add(Dictionary.FIELD_PID, id).get(), this.failed), Dictionary.FIELD_ACTIVATE, false);
}
}