package com.tinkerpop.frames.domain.classes; import java.util.Map; import com.tinkerpop.blueprints.Direction; import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.frames.Adjacency; import com.tinkerpop.frames.Incidence; import com.tinkerpop.frames.Property; import com.tinkerpop.frames.annotations.gremlin.GremlinGroovy; import com.tinkerpop.frames.annotations.gremlin.GremlinParam; import com.tinkerpop.frames.domain.incidences.Created; import com.tinkerpop.frames.domain.incidences.CreatedInfo; import com.tinkerpop.frames.domain.incidences.Knows; import com.tinkerpop.frames.modules.javahandler.JavaHandler; import com.tinkerpop.frames.modules.javahandler.JavaHandlerContext; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ public interface Person extends NamedObject { enum Gender { FEMALE, MALE } @Property("age") public Integer getAge(); @Property("age") public void setAge(Integer age); @Property("age") public void removeAge(); @Property("gender") public void setGender(Gender gender); @Property("gender") public Gender getGender(); @Property("gender") public void removeGender(); @Incidence(label = "knows") public Iterable<Knows> getKnows(); @Adjacency(label = "knows") public Iterable<Person> getKnowsPeople(); @Adjacency(label = "knows") public void setKnowsPeople(final Iterable<Person> knows); @Incidence(label = "created") public Iterable<Created> getCreated(); @Incidence(label = "created") public Iterable<CreatedInfo> getCreatedInfo(); @Adjacency(label = "created") public Iterable<Project> getCreatedProjects(); @Adjacency(label = "knows") public void addKnowsPerson(final Person person); @Adjacency(label = "knows") public Person addKnowsNewPerson(); @Incidence(label = "knows") public Knows addKnows(final Person person); @Adjacency(label = "created") public void addCreatedProject(final Project project); @Incidence(label = "created") public Created addCreated(final Project project); @Incidence(label = "created") public CreatedInfo addCreatedInfo(final Project project); @Adjacency(label = "knows") public void removeKnowsPerson(final Person person); @Incidence(label = "knows") public void removeKnows(final Knows knows); @Adjacency(label = "latestProject") public Project getLatestProject(); @Adjacency(label = "latestProject") public void setLatestProject(final Project latestProject); @GremlinGroovy("it.as('x').out('created').in('created').except('x')") public Iterable<Person> getCoCreators(); @GremlinGroovy("_().as('x').out('created').in('created').except('x').shuffle") public Person getRandomCoCreators(); @GremlinGroovy("_().as('x').out('created').in('created').except('x').has('age',age)") public Person getCoCreatorOfAge(@GremlinParam("age") int age); @GremlinGroovy(value = "'aStringProperty'", frame = false) public String getAStringProperty(); @GremlinGroovy(value = "['a','b','c']", frame = false) public Iterable<String> getListOfStrings(); @GremlinGroovy("it.as('x').out('created').in('created').except('x').groupCount.cap.next()") public Map<Person, Long> getRankedCoauthors(); @GremlinGroovy("person.asVertex().in('knows')") public Iterable<Person> getKnownRootedFromParam(@GremlinParam("person") Person person); @Deprecated @GremlinGroovy("_().out('knows')") public Iterable<Person> getDeprecatedKnowsPeople(); @Property("boolean") public void setBoolean(boolean b); @Property("boolean") public boolean isBooleanPrimitive(); @Property("boolean") public Boolean isBoolean(); @Property("boolean") public boolean canBooleanPrimitive(); @Property("boolean") public Boolean canBoolean(); @Adjacency(label = "knows", direction=Direction.BOTH) public void addKnowsPersonDirectionBothError(final Person person); @Adjacency(label = "knows", direction=Direction.BOTH) public void setKnowsPersonDirectionBothError(final Person person); @Incidence(label = "created", direction=Direction.BOTH) public Created addCreatedDirectionBothError(final Project project); @JavaHandler public String getNameAndAge(); @JavaHandler public Iterable<Person> getCoCreatorsJava(); @JavaHandler public void notImplemented(); abstract class Impl implements JavaHandlerContext<Vertex>, Person { @Override @JavaHandler public String getNameAndAge() { return getName() + " (" + getAge() + ")"; } @Override @JavaHandler public Iterable<Person> getCoCreatorsJava() { return frameVertices(gremlin().as("x").out("created").in("created").except("x")); } } public void unhandledNoAnnotation(); @GremlinGroovy("") public void unhandledNoHandler(); }