package com.tinkerpop.frames.modules;
import org.junit.Assert;
import org.junit.Test;
import com.tinkerpop.blueprints.Edge;
import com.tinkerpop.blueprints.Graph;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.impls.tg.TinkerGraphFactory;
import com.tinkerpop.frames.FramedGraph;
import com.tinkerpop.frames.FramedGraphConfiguration;
import com.tinkerpop.frames.FramedGraphFactory;
import com.tinkerpop.frames.domain.classes.Person;
import com.tinkerpop.frames.domain.incidences.Knows;
import com.tinkerpop.frames.modules.AbstractModule;
import com.tinkerpop.frames.modules.TypeResolver;
/**
* @author Bryn Cooke
*/
public class TypeResolverTest {
private FramedGraph<Graph> framedGraph;
public static interface AdditionalVertex {
}
public static interface ExtendedPerson extends Person {
}
public static interface AdditionalEdge {
}
@Test
public void testAdditionalTypes() {
Graph graph = TinkerGraphFactory.createTinkerGraph();
FramedGraphFactory factory = new FramedGraphFactory(new AbstractModule() {
@Override
public void doConfigure(FramedGraphConfiguration config) {
config.addTypeResolver(new TypeResolver() {
@Override
public Class<?>[] resolveTypes(Edge e, Class<?> defaultType) {
return new Class[] { AdditionalEdge.class };
}
@Override
public Class<?>[] resolveTypes(Vertex v, Class<?> defaultType) {
return new Class[] { AdditionalVertex.class };
}
});
}
});
framedGraph = factory.create(graph);
Person marko = framedGraph.getVertex(1, Person.class);
Assert.assertTrue(marko instanceof AdditionalVertex);
Assert.assertFalse(marko instanceof AdditionalEdge);
Knows knows = marko.getKnows().iterator().next();
Assert.assertTrue(knows instanceof AdditionalEdge);
Assert.assertFalse(knows instanceof AdditionalVertex);
}
@Test
public void testExtendedTypes() {
Graph graph = TinkerGraphFactory.createTinkerGraph();
FramedGraphFactory factory = new FramedGraphFactory(new AbstractModule() {
@Override
public void doConfigure(FramedGraphConfiguration config) {
config.addTypeResolver(new TypeResolver() {
@Override
public Class<?>[] resolveTypes(Edge e, Class<?> defaultType) {
return new Class[0];
}
@Override
public Class<?>[] resolveTypes(Vertex v, Class<?> defaultType) {
return new Class[] { ExtendedPerson.class };
}
});
}
});
framedGraph = factory.create(graph);
Person marko = framedGraph.getVertex(1, Person.class);
Assert.assertTrue(marko instanceof ExtendedPerson);
}
}