package org.openntf.domino.graph2.builtin.identity;
import org.openntf.domino.graph2.annotations.AdjacencyUnique;
import org.openntf.domino.graph2.annotations.IncidenceUnique;
import org.openntf.domino.graph2.annotations.TypedProperty;
import org.openntf.domino.graph2.builtin.DEdgeFrame;
import org.openntf.domino.graph2.builtin.DVertexFrame;
import org.openntf.domino.graph2.builtin.search.Term;
import org.openntf.domino.graph2.builtin.social.Socializer;
import org.openntf.domino.graph2.impl.DProxyVertex;
import com.tinkerpop.blueprints.Direction;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.frames.InVertex;
import com.tinkerpop.frames.OutVertex;
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.TypeValue;
@TypeValue("Name")
@JavaHandlerClass(Name.NameImpl.class)
public interface Name extends DVertexFrame, Socializer {
@TypeValue(ContainsPart.LABEL)
public static interface ContainsPart extends DEdgeFrame {
public static final String LABEL = "ContainsPart";
@InVertex
public Name getName();
@OutVertex
public Term getTerm();
}
@JavaHandler
@TypedProperty("Name")
public String getName();
@TypedProperty("Name")
public void setName(String name);
@AdjacencyUnique(label = ContainsPart.LABEL, direction = Direction.IN)
public Iterable<Term> getParts();
@AdjacencyUnique(label = ContainsPart.LABEL, direction = Direction.IN)
public ContainsPart addPart(Term term);
@AdjacencyUnique(label = ContainsPart.LABEL, direction = Direction.IN)
public void removePart(Term term);
@IncidenceUnique(label = ContainsPart.LABEL, direction = Direction.IN)
public Iterable<ContainsPart> getContainsParts();
@IncidenceUnique(label = ContainsPart.LABEL, direction = Direction.IN)
public int countContainsParts();
@IncidenceUnique(label = ContainsPart.LABEL, direction = Direction.IN)
public void removeContainsPart(ContainsPart containsPart);
public abstract static class NameImpl extends DVertexFrameImpl implements Name, JavaHandlerContext<Vertex> {
@Override
public String getName() {
try {
Vertex v = this.asVertex();
String form = v.getProperty("form");
if (v instanceof DProxyVertex) {
Vertex pv = ((DProxyVertex) v).getProxyDelegate();
if (pv != null) {
form = pv.getProperty("form");
}
}
// System.out.println("TEMP DEBUG Getting a name from a Name object backed by a " + form);
if (form.equalsIgnoreCase("person")) {
Object raw = v.getProperty("fullname");
if (raw instanceof String) {
return (String) raw;
}
} else if (form.equalsIgnoreCase("group")) {
//TODO verify this!
Object raw = v.getProperty("groupname");
if (raw instanceof String) {
return (String) raw;
}
}
} catch (Throwable t) {
t.printStackTrace();
}
return "";
}
}
}