package hdgl.db.store.impl.hdfs.mapreduce;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import hdgl.db.exception.HdglException;
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 HEdge implements Edge {
long id;
String type;
long start;
long end;
Map<String, byte[]> labelsMap = new HashMap<String, byte[]>();
GraphStore store;
public HEdge(long id, String type, long start, long end, GraphStore store){
assert id<0;
assert start>0;
assert end>0;
this.id = id;
this.type = type;
this.start = start;
this.end = end;
this.store = store;
}
public void setType(String type)
{
this.type = type;
}
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 Vertex getInVertex() {
return new HPseudoVertex(start, store);
}
@Override
public Vertex getOutVertex() {
return new HPseudoVertex(end, store);
}
@Override
public Vertex getOtherVertex(Vertex one) {
if(one.getId()==start){
return getOutVertex();
}else if(one.getId() == end){
return getInVertex();
}else{
throw new HdglException("vertex(id="+one.getId()+") not found");
}
}
@Override
public byte[] getLabel(String name) {
return labelsMap.get(name);
}
}