package esl.cuenet.algorithms.firstk.structs.eventgraph; import esl.cuenet.algorithms.BaseAlgorithm; import esl.cuenet.algorithms.firstk.exceptions.EventGraphException; import esl.cuenet.mapper.parser.ParseException; import esl.datastructures.graph.*; import org.apache.log4j.Logger; import org.junit.Test; import test.TestBase; import java.io.FileNotFoundException; import java.io.IOException; import java.util.List; public class EventGraphTest extends TestBase { private Logger logger = Logger.getLogger(EventGraphTest.class); @Test public void simpleEventGraphTest() throws IOException, ParseException, EventGraphException { BaseAlgorithm algorithm = new ConcreteAlgorithmClass(); EventGraph graph = new EventGraph(algorithm.getModel()); Event conference = graph.createEvent("conference"); Event session1 = graph.createEvent("session"); Event session2 = graph.createEvent("session"); Event lunch = graph.createEvent("lunch"); Entity person1 = graph.createPerson(); Entity person2 = graph.createPerson(); graph.addSubevent(conference, session1); graph.addSubevent(conference, session2); graph.addSubevent(conference, lunch); graph.addParticipant(conference, person1); graph.addParticipant(session2, person2); TraversalContext context = new TraversalContext(); context.setCx(""); logger.info(" === Traversing with complete graph === "); BFSEventGraphTraverser traverser = new BFSEventGraphTraverser(graph); traverser.setNodeVisitorCallback(new NodeVisitor() { @Override public void visit(Node node, TraversalContext traversalContext) { logger.info(node.name()); } }); traverser.setEdgeVisitorCallback(new EdgeVisitor() { @Override public void visit(Edge edge, TraversalContext traversalContext) { logger.info(edge.label()); } }); traverser.start(); logger.info(" === Removing person1 === "); graph.removeEntity(person1); traverser.start(); logger.info(" === Adding person1 to lunch === "); person1 = (Entity) graph.addIndividual(person1.getIndividual(), EventGraph.NodeType.ENTITY); graph.addParticipant(lunch, person1); traverser.start(); logger.info(" === Removing conference === "); graph.removeEvent(conference); traverser.start(); } @Test public void findParticipantsSubevents() throws IOException, ParseException, EventGraphException { BaseAlgorithm algorithm = new ConcreteAlgorithmClass(); EventGraph graph = new EventGraph(algorithm.getModel()); Event conference = graph.createEvent("conference"); Event session1 = graph.createEvent("session"); Event session2 = graph.createEvent("session"); Event lunch = graph.createEvent("lunch"); Entity person1 = graph.createPerson(); Entity person2 = graph.createPerson(); graph.addSubevent(conference, session1); graph.addSubevent(conference, session2); graph.addSubevent(conference, lunch); graph.addParticipant(session2, person1); graph.addParticipant(session2, person2); List<Event> subevents = graph.getSubevents (conference); for (Event e: subevents) logger.info("Subevent: " + e.name()); List<Entity> entities = graph.getParticipants(session2); for (Entity e: entities) logger.info("Participant: " + e.name()); } @Test public void dropEdgeTest() throws IOException, ParseException, EventGraphException { BaseAlgorithm algorithm = new ConcreteAlgorithmClass(); EventGraph graph = new EventGraph(algorithm.getModel()); Event conference = graph.createEvent("conference"); Event session1 = graph.createEvent("session"); Event session2 = graph.createEvent("session"); Event lunch = graph.createEvent("lunch"); Entity person1 = graph.createPerson(); Entity person2 = graph.createPerson(); graph.addSubevent(conference, session1); graph.addSubevent(conference, session2); graph.addSubevent(conference, lunch); graph.addParticipant(conference, person1); graph.addParticipant(session2, person2); TraversalContext context = new TraversalContext(); context.setCx(""); graph.dropParticipantEdge(conference, person1); logger.info(" -- Dropped participant person1 -- "); graph.dropSubeventEdge(conference, lunch); logger.info(" -- Dropped subevent edge between conference and lunch -- "); BFSEventGraphTraverser traverser = new BFSEventGraphTraverser(graph); traverser.setNodeVisitorCallback(new NodeVisitor() { @Override public void visit(Node node, TraversalContext traversalContext) { logger.info(node.name()); } }); traverser.setEdgeVisitorCallback(new EdgeVisitor() { @Override public void visit(Edge edge, TraversalContext traversalContext) { logger.info(edge.label()); } }); traverser.start(); } public static class ConcreteAlgorithmClass extends BaseAlgorithm { public ConcreteAlgorithmClass() throws IOException, ParseException { super(); } } }