package org.jboss.windup.graph.test.polymorf; import org.jboss.windup.graph.model.WindupVertexFrame; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.tinkerpop.blueprints.Graph; import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.frames.FramedGraph; import com.tinkerpop.frames.FramedGraphFactory; import com.tinkerpop.frames.modules.Module; import com.tinkerpop.frames.modules.gremlingroovy.GremlinGroovyModule; import com.tinkerpop.frames.modules.typedgraph.TypedGraphModuleBuilder; /** * * @author <a href="mailto:ozizka@redhat.com">Ondrej Zizka</a> */ public class NodeTypeChangeTest { private Graph g; @Before public void setUpEnv() { this.g = GraphCreator.createFamilyGraph(); } @After public void tearDown() { this.g.shutdown(); } @Test public void testNodeTypeChange() { Module tgmp = new TypedGraphModuleBuilder() .withClass(SpecialPerson.class).build(); FramedGraphFactory factory = new FramedGraphFactory(new GremlinGroovyModule(), tgmp); FramedGraph<Graph> framed = factory.create(g); final Vertex v = g.getVertices().iterator().next(); // Should be Person. Person foo = framed.frame(v, Person.class); System.out.println("Person: " + foo + " " + asString(foo)); // Try to retype v.setProperty(WindupVertexFrame.TYPE_PROP, "special"); // Should be SpecialPerson. SpecialPerson foo2 = (SpecialPerson) framed.frame(v, Person.class); System.out.println("SpecialPerson: " + foo2 + " " + asString(foo2)); // Unknown type - should be Person. v.setProperty(WindupVertexFrame.TYPE_PROP, "aaaaaa"); foo = framed.frame(v, Person.class); System.out.println("Not SpecialPerson: " + foo + " " + asString(foo)); } private static String asString(Person p) { if (p == null) return "(null)"; return "Person name: " + p.getName() + " " + p.getClass().getSimpleName(); } }