package hdgl.db.store.impl.hdfs.mapreduce; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import hdgl.db.graph.Edge; import hdgl.db.graph.LabelValue; import hdgl.db.graph.Vertex; import hdgl.db.store.GraphStore; import hdgl.util.IterableHelper; public class HVertex implements Vertex { long id; String type; Map<String, byte[]> labelsMap = new HashMap<String, byte[]>(); Map<Long, Long> inlist = new HashMap<Long, Long>(); Map<Long, Long> outlist = new HashMap<Long, Long>(); GraphStore store; public HVertex(long id, String type, GraphStore store){ assert id>0; this.id = id; this.type = type; this.store = store; } public void setType(String type) { this.type = type; } public void addInEdge(long edgeId, long anotherVertex) { inlist.put(edgeId, anotherVertex); } public void addOutEdge(long edgeId, long anotherVertex) { outlist.put(edgeId, anotherVertex); } public void addLabel(String key, byte[] value) { labelsMap.put(key, value); } @Override public long getId() { return id; } @Override public String getType() { return type; } @Override public Iterable<LabelValue> getLabels() { return IterableHelper.select(labelsMap.entrySet(), new IterableHelper.Map<Map.Entry<String,byte[]>, LabelValue>() { @Override public LabelValue select(final Entry<String, byte[]> element) { return new LabelValue() { @Override public byte[] getValue() { return element.getValue(); } @Override public String getName() { return element.getKey(); } }; } }); } @Override public Iterable<Edge> getOutEdges() { return IterableHelper.select(outlist.entrySet(), new IterableHelper.Map<Map.Entry<Long,Long>, Edge>(){ @Override public Edge select(Map.Entry<Long,Long> element) { return new HPseudoEdge(element.getKey(), id, element.getValue(), store); } }); } @Override public Iterable<Edge> getInEdges() { return IterableHelper.select(inlist.entrySet(), new IterableHelper.Map<Map.Entry<Long,Long>, Edge>(){ @Override public Edge select(Map.Entry<Long,Long> element) { return new HPseudoEdge(element.getKey(), element.getValue(), id, store); } }); } @Override public Iterable<Edge> getEdges() { return IterableHelper.concat(getOutEdges(), getInEdges()); } @Override public byte[] getLabel(String name) { return labelsMap.get(name); } }