package esl.cuenet.algorithms.firstk.personal.accessor;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.mongodb.BasicDBObject;
import esl.cuenet.algorithms.firstk.personal.EventContextNetwork;
import esl.cuenet.algorithms.firstk.personal.Location;
import esl.cuenet.algorithms.firstk.personal.Time;
import esl.cuenet.query.drivers.mongodb.MongoDB;
import org.apache.log4j.Logger;
import java.io.FileWriter;
import java.util.List;
public class Conference implements Source {
private Candidates candidateSet = Candidates.getInstance();
private Logger logger = Logger.getLogger(Conference.class);
private Multimap<Candidates.CandidateReference, ConferenceObject> candidateIndex = HashMultimap.create();
protected Conference() {
(new ConferenceLoader()).load();
}
private static Conference instance = new Conference();
public static Conference getInstance() {
return instance;
}
@Override
public List<EventContextNetwork> eventsContaining(Candidates.CandidateReference person, Time interval, Location location) {
return null;
}
@Override
public List<EventContextNetwork> participants(EventContextNetwork.Event event) {
return null;
}
@Override
public List<EventContextNetwork> subevents(EventContextNetwork.Event event) {
return null;
}
@Override
public List<Candidates.CandidateReference> knows(Candidates.CandidateReference person) {
return null;
}
@Override
public List<EventContextNetwork> knowsAtTime(Candidates.CandidateReference person, Time time) {
return null;
}
@Override
public void writeInstances(FileWriter instanceFile) {
}
private class ConferenceObject {
Time interval;
Location location;
List<Candidates.CandidateReference> participants = Lists.newArrayList();
BasicDBObject information = new BasicDBObject();
}
public class ConferenceLoader extends MongoDB {
public ConferenceLoader() {
super(PConstants.DBNAME);
// super("jain");
}
public List<ConferenceObject> load() {
MongoDB.DBReader reader = startReader("conferences");
reader.getAll(new BasicDBObject());
List<ConferenceObject> conferenceObjs = Lists.newArrayList();
while (reader.hasNext()) {
BasicDBObject object = (BasicDBObject) reader.next();
ConferenceObject confObject = new ConferenceObject();
long _sdate = object.getLong("start-date");
long _edate = object.getLong("end-date");
String _title = object.getString("title");
String _short = object.getString("short");
String _url = object.getString("url");
confObject.interval = Time.createFromInterval(_sdate, _edate);
confObject.information.put("title", _title);
confObject.information.put("short", _short);
confObject.information.put("url", _url);
if (object.containsField("hashtag"))
confObject.information.put("hashtag", object.getString("hashtag"));
conferenceObjs.add(confObject);
}
for (ConferenceObject confObject: conferenceObjs)
confObject.participants = loadParticipant(confObject);
return conferenceObjs;
}
private List<Candidates.CandidateReference> loadParticipant(ConferenceObject confObject) {
MongoDB.DBReader reader = startReader("conf_attendees");
reader.query(new BasicDBObject("url", confObject.information.getString("url")));
List<Candidates.CandidateReference> attendees = Lists.newArrayList();
List<String> name = Lists.newArrayList(Candidates.NAME_KEY);
while (reader.hasNext()) {
BasicDBObject object = (BasicDBObject) reader.next();
Candidates.CandidateReference attn = candidateSet.createEntity(name, Lists.newArrayList(object.getString("name")));
attendees.add(attn);
candidateIndex.put(attn, confObject);
}
logger.info(attendees.size() + " attendees loaded for " + confObject.information.getString("url"));
return attendees;
}
}
}