blob: e5f42fe26e13dcfb040dda4cb7b9afe75cd0589b [file] [log] [blame]
/*
* Copyright 2009-2010 by The Regents of the University of California
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* you may obtain a copy of the License from
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package edu.uci.ics.pregelix.api.graph;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.conf.Configurable;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.WritableComparable;
import edu.uci.ics.pregelix.api.util.BspUtils;
/**
* The Edge class, represent an outgoing edge inside an {@link Vertex} object.
*
* @param <I>
* Vertex index
* @param <E>
* Edge value
*/
@SuppressWarnings("rawtypes")
public class Edge<I extends WritableComparable, E extends Writable> implements Writable, Configurable, Comparable {
/** Destination vertex id */
private I destVertexId = null;
/** Edge value */
private E edgeValue = null;
/** Configuration - Used to instantiate classes */
private Configuration conf = null;
/** Whether the edgeValue field is not null */
private boolean hasEdgeValue = false;
/**
* Constructor for reflection
*/
public Edge() {
}
/**
* Create the edge with final values
*
* @param destVertexId
* @param edgeValue
*/
public Edge(I destVertexId, E edgeValue) {
this.destVertexId = destVertexId;
this.edgeValue = edgeValue;
if (edgeValue != null)
hasEdgeValue = true;
}
/**
* Get the destination vertex index of this edge
*
* @return Destination vertex index of this edge
*/
public I getDestVertexId() {
return destVertexId;
}
/**
* set the destination vertex id
*
* @param destVertexId
*/
public void setDestVertexId(I destVertexId) {
this.destVertexId = destVertexId;
}
/**
* Get the edge value of the edge
*
* @return Edge value of this edge
*/
public E getEdgeValue() {
return edgeValue;
}
/**
* set the edge of value
*
* @param edgeValue
*/
public void setEdgeValue(E edgeValue) {
this.edgeValue = edgeValue;
if (edgeValue != null)
hasEdgeValue = true;
}
@Override
public String toString() {
return "(DestVertexIndex = " + destVertexId + ", edgeValue = " + edgeValue + ")";
}
@SuppressWarnings("unchecked")
@Override
public void readFields(DataInput input) throws IOException {
if (destVertexId == null)
destVertexId = (I) BspUtils.createVertexIndex(getConf());
destVertexId.readFields(input);
hasEdgeValue = input.readBoolean();
if (hasEdgeValue) {
if (edgeValue == null) {
edgeValue = (E) BspUtils.createEdgeValue(getConf());
}
edgeValue.readFields(input);
}
}
@Override
public void write(DataOutput output) throws IOException {
if (destVertexId == null) {
throw new IllegalStateException("write: Null destination vertex index");
}
destVertexId.write(output);
output.writeBoolean(hasEdgeValue);
if (hasEdgeValue) {
edgeValue.write(output);
}
}
@Override
public Configuration getConf() {
return conf;
}
@Override
public void setConf(Configuration conf) {
this.conf = conf;
}
public boolean equals(Edge<I, E> edge) {
return this.destVertexId.equals(edge.getDestVertexId());
}
@SuppressWarnings("unchecked")
@Override
public int compareTo(Object o) {
Edge<I, E> edge = (Edge<I, E>) o;
return destVertexId.compareTo(edge.getDestVertexId());
}
}