package esl.cuenet.algorithms.firstk.personal; import com.google.common.collect.*; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; import com.mongodb.util.JSON; import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.List; public class Ontology { private ImmutableList<URI> eventList = null; private HashMap<String, URI> uriIndex = new HashMap<String, URI>(); private Multimap<URI, URI> subeventIndex = HashMultimap.create(); private Multimap<URI, URI> supereventIndex = HashMultimap.create(); private Multimap<URI, URI> isAIndex = HashMultimap.create(); public static String PERSON = "Person"; public Ontology() { try { load(); } catch (IOException e) { e.printStackTrace(); } } public List<URI> getAllEvents() { return eventList; } public List<URI> getSubevents(URI event) { if ( !subeventIndex.containsKey(event) ) return null; return Lists.newArrayList(subeventIndex.get(event)); } public URI getSuperevent(URI event) { if (supereventIndex.containsKey(event)) return supereventIndex.get(event).iterator().next(); return null; } private void load() throws IOException { String data = FileUtils.readFileToString( new File("/home/arjun/Documents/Dropbox/Ontologies/cuenet-main/cuenet-main.js")); BasicDBObject object = (BasicDBObject) JSON.parse(data); BasicDBList events = (BasicDBList) object.get("events"); BasicDBList subevent = (BasicDBList) object.get("subevent"); BasicDBList isA = (BasicDBList) object.get("isA"); List<URI> tempEventList = Lists.newArrayList(); for (Object o: events) { URI uri = new URI(o.toString()); uriIndex.put(o.toString(), uri); tempEventList.add(uri); } ImmutableList.Builder<URI> builder = new ImmutableList.Builder<URI>(); builder.addAll(tempEventList); eventList = builder.build(); for (Object o: subevent) { BasicDBObject subeventRelation = (BasicDBObject) o; String _super = subeventRelation.getString("super"); String _sub = subeventRelation.getString("sub"); subeventIndex.put(uriIndex.get(_super), uriIndex.get(_sub)); supereventIndex.put(uriIndex.get(_sub), uriIndex.get(_super)); } for (Object o: isA) { BasicDBObject isARelation = (BasicDBObject) o; String _parent = isARelation.getString("parent"); String _child = isARelation.getString("child"); isAIndex.put(uriIndex.get(_child), uriIndex.get(_parent)); } } public void printAll() { System.out.println(eventList); System.out.println(subeventIndex); System.out.println(supereventIndex); System.out.println(isAIndex); } public static class URI { String uri; public URI(String uri) { this.uri = uri; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; URI uri1 = (URI) o; if (!uri.equals(uri1.uri)) return false; return true; } @Override public int hashCode() { return uri.hashCode(); } @Override public String toString() { return uri; } } }