package org.openntf.domino.graph2.builtin.search; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.openntf.domino.big.IndexDatabase; 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.DVertexFrame; import org.openntf.domino.graph2.builtin.identity.Name; import org.openntf.domino.graph2.builtin.identity.Name.ContainsPart; import org.openntf.domino.graph2.builtin.search.Value.ContainsTerm; import com.tinkerpop.blueprints.Vertex; 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; @SuppressWarnings("rawtypes") @TypeValue(IndexDatabase.TERM_FORM_NAME) @JavaHandlerClass(Term.TermImpl.class) public interface Term extends DVertexFrame { @TypedProperty("value") public String getValue(); @TypedProperty("value") public void setValue(String value); @TypedProperty("lemma") public String getLemma(); @TypedProperty("lemma") public void setLemma(String lemma); // interesting parts of speech // NNP, VB, JJ, NNS, NN, VBD, CD, JJS, VBN, WP, RB, MD, VBG, // uninteresting parts of speech // IN, CC, HYPH, VBZ, DT, PRP, \,, ., ?, !, @TypedProperty("POS") public String getPartOfSpeech(); @TypedProperty("POS") public void setPartOfSpeech(String pos); @JavaHandler @TypedProperty("Hits") public Map getHits(); @JavaHandler @TypedProperty("HitRepls") public List<CharSequence> getHitRepls(); @AdjacencyUnique(label = ContainsTerm.LABEL) public Iterable<Value> getValues(); @AdjacencyUnique(label = ContainsTerm.LABEL) public ContainsTerm addValue(Value value); @AdjacencyUnique(label = ContainsTerm.LABEL) public void removeValue(Value value); @IncidenceUnique(label = ContainsTerm.LABEL) public Iterable<ContainsTerm> getContainsTerms(); @IncidenceUnique(label = ContainsTerm.LABEL) public int countContainsTerms(); @IncidenceUnique(label = ContainsTerm.LABEL) public void removeContainsTerm(ContainsTerm containsTerm); @AdjacencyUnique(label = ContainsPart.LABEL) public Iterable<Name> getNames(); @AdjacencyUnique(label = ContainsPart.LABEL) public ContainsPart addName(Name name); @AdjacencyUnique(label = ContainsPart.LABEL) public void removeName(Name name); @IncidenceUnique(label = ContainsPart.LABEL) public Iterable<ContainsPart> getContainsParts(); @IncidenceUnique(label = ContainsPart.LABEL) public int countContainsParts(); @IncidenceUnique(label = ContainsPart.LABEL) public void removeContainsPart(ContainsPart containsPart); public static abstract class TermImpl extends DVertexFrameImpl implements Term, JavaHandlerContext<Vertex> { @Override public Map getHits() { Map<CharSequence, Object> result = new LinkedHashMap<CharSequence, Object>(); for (CharSequence replid : getHitRepls()) { String itemname = IndexDatabase.TERM_MAP_PREFIX + replid; // System.out.println("TEMP DEBUG getting value from item " + itemname); result.put(replid, this.asVertex().getProperty(itemname)); } return result; } @Override public List<CharSequence> getHitRepls() { List<CharSequence> result = new ArrayList<CharSequence>(); Map<CharSequence, Object> map = this.asMap(); for (CharSequence cs : map.keySet()) { String str = cs.toString(); if (str.startsWith(IndexDatabase.TERM_MAP_PREFIX)) { result.add(str.substring(IndexDatabase.TERM_MAP_PREFIX.length())); } } return result; } } }