package esl.cuenet.source.accessors;
import com.hp.hpl.jena.enhanced.EnhGraph;
import com.hp.hpl.jena.ontology.*;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import com.hp.hpl.jena.util.PrintUtil;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import esl.cuenet.model.Constants;
import esl.datastructures.Location;
import org.apache.log4j.Logger;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MailDateFormat;
import java.io.IOException;
import java.text.ParseException;
import java.util.*;
public class Utils {
private static Logger logger = Logger.getLogger(Utils.class);
private static MailDateFormat format = new MailDateFormat();
public static Individual createPersonFromNameEmail(String email, String name, OntModel model) {
OntClass person = model.getOntClass(Constants.CuenetNamespace + "person");
DatatypeProperty nameProperty = model.getDatatypeProperty(
Constants.CuenetNamespace + "name");
DatatypeProperty emailProperty = model.getDatatypeProperty(
Constants.CuenetNamespace + "email");
String id = (name != null) ? name : null;
if (id == null) id = (email != null) ? email : "";
Individual personIndividual = person.createIndividual(Constants.CuenetNamespace + id);
if (name != null)
personIndividual.addLiteral(nameProperty, model.createTypedLiteral(name));
if (email != null)
personIndividual.addLiteral(emailProperty, model.createTypedLiteral(email));
return personIndividual;
}
public static Individual createPersonFromFacebookRecord(BasicDBObject personDBObject, OntModel model) {
OntClass person = model.getOntClass(Constants.CuenetNamespace + "person");
DatatypeProperty nameProperty = model.getDatatypeProperty(
Constants.CuenetNamespace + "name");
DatatypeProperty emailProperty = model.getDatatypeProperty(
Constants.CuenetNamespace + "email");
ObjectProperty livesAt = model.getObjectProperty(
Constants.CuenetNamespace + "lives-at");
ObjectProperty worksAt = model.getObjectProperty(
Constants.CuenetNamespace + "works-at");
Individual personIndividual = person.createIndividual(Constants.CuenetNamespace + "fb_" + personDBObject.get("id"));
if (personDBObject.containsField("name"))
personIndividual.addLiteral(nameProperty, model.createTypedLiteral(personDBObject.getString("name")));
if (personDBObject.containsField("email"))
personIndividual.addLiteral(emailProperty, model.createTypedLiteral(personDBObject.getString("email")));
if (personDBObject.containsField("location")) {
BasicDBObject loc = (BasicDBObject) personDBObject.get("location");
if (loc.containsField("name")) {
Location location = null;
try {
location = Location.createFromAddress(loc.getString("name"), model);
} catch (IOException e) {
logger.warn("Location Fetch Failed: " + e.getMessage());
}
if (location != null) personIndividual.addProperty(livesAt, location);
}
}
if (personDBObject.containsField("work")) {
BasicDBList workplacelist = (BasicDBList) personDBObject.get("work");
for (Object o: workplacelist) {
BasicDBObject workplace = (BasicDBObject) o;
if (workplace.containsField("location")) {
BasicDBObject workplaceLocation = (BasicDBObject) workplace.get("location");
String name = workplaceLocation.getString("name");
if (name != null) {
Location wp = null;
try {
wp = Location.createFromAddress(name, model);
} catch (IOException e) {
e.printStackTrace();
}
if (wp != null) personIndividual.addProperty(worksAt, wp);
}
}
}
}
return personIndividual;
}
public static List<Map.Entry<String, String>> parseEmailAddresses(String addressList) {
List<Map.Entry<String, String>> entries = new ArrayList<Map.Entry<String, String>>();
try {
for (InternetAddress ia: InternetAddress.parse(addressList)) {
Map.Entry<String, String> entry =
new AbstractMap.SimpleEntry<java.lang.String, java.lang.String>(ia.getAddress(), ia.getPersonal());
entries.add(entry);
}
} catch (AddressException e) {
e.printStackTrace();
}
return entries;
}
public static Date parseEmailDate (String sDate) {
if (sDate == null) return new Date(0);
Date dt;
try {
dt = format.parse(sDate);
} catch (ParseException e) {
logger.error("Date couldn't be parsed: " + sDate);
logger.error("MESSAGE: " + e.getMessage());
dt = new Date(0);
}
return dt;
}
}