package org.openntf.domino.tests.paul; import com.tinkerpop.blueprints.Direction; import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.frames.Adjacency; import com.tinkerpop.frames.EdgeFrame; import com.tinkerpop.frames.InVertex; import com.tinkerpop.frames.Incidence; import com.tinkerpop.frames.OutVertex; import com.tinkerpop.frames.Property; import com.tinkerpop.frames.VertexFrame; import com.tinkerpop.frames.modules.javahandler.JavaHandler; import com.tinkerpop.frames.modules.javahandler.JavaHandlerClass; import com.tinkerpop.frames.modules.javahandler.JavaHandlerContext; import com.tinkerpop.frames.modules.typedgraph.TypeField; import com.tinkerpop.frames.modules.typedgraph.TypeValue; public class Graph2DataModel { private static final String directedBy = "DirectedBy"; private static final String appearsIn = "AppearsIn"; private static final String portrays = "Portrays"; private static final String starring = "Starring"; private static final String spawns = "Spawns"; private static final String kills = "Kills"; @TypeField("form") public interface DVertexFrame extends VertexFrame { } @TypeField("form") public interface DEdgeFrame extends EdgeFrame { } @TypeValue("movie") public interface Movie extends DVertexFrame { @Property("title") public String getTitle(); @Property("title") public void setTitle(String title); @Incidence(label = directedBy) public DirectedBy getDirectedBy(); @Incidence(label = directedBy) public DirectedBy addDirectedBy(Crew crew); @Incidence(label = directedBy) public void removeDirectedBy(Crew crew); @Adjacency(label = directedBy) public Crew getDirectedByCrew(); @Adjacency(label = directedBy) public Crew addDirectedByCrew(Crew crew); @Adjacency(label = directedBy) public Crew removeDirectedByCrew(Crew crew); @Incidence(label = starring) public Iterable<Starring> getStarring(); @Incidence(label = starring) public Starring addStarring(Crew crew); @Incidence(label = starring) public void removeStarring(Crew crew); @Adjacency(label = starring) public Iterable<Crew> getStarringCrew(); @Adjacency(label = starring) public Crew addStarringCrew(Crew crew); @Adjacency(label = starring) public Crew removeStarringCrew(Crew crew); } @TypeValue(directedBy) public interface DirectedBy extends DEdgeFrame { @Property("rating") public Integer getRating(); @Property("rating") public void setRating(Integer rating); @OutVertex Crew getDirector(); @InVertex Movie getMovie(); } @TypeValue(starring) public interface Starring extends DEdgeFrame { @OutVertex Movie getMovie(); @InVertex Crew getStar(); } @TypeValue(portrays) public interface Portrays extends DEdgeFrame { @OutVertex Crew getStar(); @InVertex Character getCharacter(); } @TypeValue(appearsIn) public interface AppearsIn extends DEdgeFrame { @OutVertex Character getCharacter(); @InVertex Movie getMovie(); } @TypeValue(spawns) public interface Spawns extends DEdgeFrame { @OutVertex Character getParent(); @InVertex Character getCreated(); } @TypeValue(kills) public interface Kills extends DEdgeFrame { @Property("film") public String getFilm(); @Property("film") public void setFilm(String film); @OutVertex Character getKiller(); @InVertex Character getVictim(); } @TypeValue("character") public interface Character extends DVertexFrame { @Property("name") public String getName(); @Property("name") public void setName(String name); @Adjacency(label = appearsIn) public Iterable<Movie> getAppearsInMovies(); @Incidence(label = appearsIn) public Iterable<AppearsIn> getAppearsIn(); @Incidence(label = appearsIn) public AppearsIn addAppearsIn(Movie movie); @Incidence(label = appearsIn) public void removeAppearsIn(AppearsIn appearance); @Adjacency(label = portrays, direction = Direction.IN) public Iterable<Crew> getPortrayedByCrew(); @Incidence(label = portrays, direction = Direction.IN) public Iterable<Portrays> getPortrayedBy(); @Incidence(label = portrays, direction = Direction.IN) public Portrays addPortrayedBy(Crew crew); @Incidence(label = portrays, direction = Direction.IN) public void removePortrayedBy(Portrays portrayal); @Adjacency(label = kills, direction = Direction.IN) public Iterable<Character> getKilledByCharacters(); @Incidence(label = kills, direction = Direction.IN) public Iterable<Kills> getKilledBy(); @Incidence(label = kills, direction = Direction.IN) public Kills addKilledBy(Character character); @Incidence(label = kills, direction = Direction.IN) public void removeKilledBy(Kills kill); @Adjacency(label = kills, direction = Direction.OUT) public Iterable<Character> getKillsCharacters(); @Incidence(label = kills, direction = Direction.OUT) public Iterable<Kills> getKills(); @Incidence(label = kills, direction = Direction.OUT) public Kills addKills(Character character); @Incidence(label = kills, direction = Direction.OUT) public void removeKills(Kills kill); @Adjacency(label = spawns, direction = Direction.IN) public Iterable<Character> getSpawnedByCharacters(); @Incidence(label = spawns, direction = Direction.IN) public Iterable<Spawns> getSpawnedBy(); @Incidence(label = spawns, direction = Direction.IN) public Spawns addSpawnedBy(Character character); @Incidence(label = spawns, direction = Direction.IN) public void removeSpawnedBy(Spawns spawn); @Adjacency(label = spawns, direction = Direction.OUT) public Iterable<Character> getSpawnsCharacters(); @Incidence(label = spawns, direction = Direction.OUT) public Iterable<Spawns> getSpawns(); @Incidence(label = spawns, direction = Direction.OUT) public Spawns addSpawns(Character character); @Adjacency(label = spawns, direction = Direction.OUT) public void removeSpawns(Character spawn); } @TypeValue("crew") @JavaHandlerClass(CrewImpl.class) public interface Crew extends DVertexFrame { @Property("firstName") public String getFirstName(); @Property("lastName") public String getLastName(); @Property("firstName") public void setFirstName(String firstName); @Property("lastName") public void setLastName(String lastName); @JavaHandler public void setFullName(String fullName); @Adjacency(label = portrays) public Iterable<Character> getPortraysCharacters(); @Incidence(label = portrays) public Iterable<Portrays> getPortrayals(); @Incidence(label = portrays) public Portrays addPortrayals(Character character); @Incidence(label = portrays) public void removePortrayals(Portrays portrayal); @Adjacency(label = starring) public Iterable<Movie> getStarsInMovies(); @Incidence(label = starring) public Iterable<Starring> getStarsIn(); @Incidence(label = starring) public Starring addStarsInMovie(Movie movie); @Adjacency(label = starring) public void removeStarsInMovie(Movie movie); } public static abstract class CrewImpl implements JavaHandlerContext<Vertex>, Crew { @Override public void setFullName(final String fullName) { int pos = fullName.lastIndexOf(' '); setFirstName(fullName.substring(0, pos)); setLastName(fullName.substring(pos + 1)); } } public Graph2DataModel() { } }