/**
* KMVertex.java
*/
package com.chinamobile.bcbsp.examples.kmeans;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.chinamobile.bcbsp.Constants;
import com.chinamobile.bcbsp.api.Vertex;
/**
* KMVertex
* Implementation of Vertex for K-Means
*
* @author Bai Qiushi
* @version 0.2
*/
public class KMVertex extends Vertex<Integer, Byte, KMEdge> {
int vertexID = 0;
byte vertexValue = 0;
List<KMEdge> edgesList = new ArrayList<KMEdge>();
@Override
public void addEdge(KMEdge edge) {
this.edgesList.add(edge);
}
@Override
public void fromString(String vertexData) {
String[] buffer = vertexData.split(Constants.KV_SPLIT_FLAG);
String[] vBuffer = buffer[0].split(Constants.SPLIT_FLAG);
this.vertexID = Integer.valueOf(vBuffer[0]);
this.vertexValue = Byte.valueOf(vBuffer[1]);
if (buffer.length > 1) { // There has edges.
String[] eBuffer = buffer[1].split(Constants.SPACE_SPLIT_FLAG);
for (int i = 0; i < eBuffer.length; i ++) {
KMEdge edge = new KMEdge();
edge.fromString(eBuffer[i]);
this.edgesList.add(edge);
}
}
}
@Override
public List<KMEdge> getAllEdges() {
return this.edgesList;
}
@Override
public int getEdgesNum() {
return this.edgesList.size();
}
@Override
public Integer getVertexID() {
return this.vertexID;
}
@Override
public Byte getVertexValue() {
return this.vertexValue;
}
@Override
public String intoString() {
String buffer = vertexID + Constants.SPLIT_FLAG + vertexValue;
buffer = buffer + Constants.KV_SPLIT_FLAG;
int numEdges = edgesList.size();
if (numEdges != 0) {
buffer = buffer + edgesList.get(0).intoString();
}
for (int i = 1; i < numEdges; i ++) {
buffer = buffer + Constants.SPACE_SPLIT_FLAG + edgesList.get(i).intoString();
}
return buffer;
}
@Override
public void removeEdge(KMEdge edge) {
this.edgesList.remove(edge);
}
@Override
public void setVertexID(Integer arg0) {
this.vertexID = arg0;
}
@Override
public void setVertexValue(Byte arg0) {
this.vertexValue = arg0;
}
@Override
public void updateEdge(KMEdge edge) {
removeEdge(edge);
this.edgesList.add(edge);
}
@Override
public void readFields(DataInput in) throws IOException {
this.vertexID = in.readInt();
this.vertexValue = in.readByte();
this.edgesList.clear();
int numEdges = in.readInt();
KMEdge edge;
for (int i = 0; i < numEdges; i++) {
edge = new KMEdge();
edge.readFields(in);
this.edgesList.add(edge);
}
}
@Override
public void write(DataOutput out) throws IOException {
out.writeInt(this.vertexID);
out.writeByte(this.vertexValue);
out.writeInt(this.edgesList.size());
for (KMEdge edge : edgesList) {
edge.write(out);
}
}
@Override
public int hashCode() {
return Integer.valueOf(this.vertexID).hashCode();
}
}