package arida.ufc.br.moap.optics;
import java.util.List;
/**
* This class represents an OpticsObject with the relevant attributes for Optics
* @author igobrilhante
* @param <T>
*/
public class OpticsObject<T> implements Comparable<OpticsObject<T>> {
private final T object;
private boolean processed;
private double reachabilityDistance;
private double coreDistance;
private List<OpticsObject<T>> neighbors;
private int clusterID;
/**
*
* @param object
*/
public OpticsObject(T object) {
this.object = object;
this.processed = false;
this.reachabilityDistance = Optics.UNDEFINED;
this.coreDistance = Optics.UNDEFINED;
}
public T getObject() {
return object;
}
public int getClusterID() {
return clusterID;
}
public void setClusterID(int clusterID) {
this.clusterID = clusterID;
}
public boolean isProcessed() {
return processed;
}
public void setProcessed(boolean processed) {
this.processed = processed;
}
public double getReachabilityDistance() {
return reachabilityDistance;
}
public void setReachabilityDistance(double reachability_distance) {
this.reachabilityDistance = reachability_distance;
}
public double getCoreDistance() {
return coreDistance;
}
public void setCoreDistance(double core_distance) {
this.coreDistance = core_distance;
}
public List<OpticsObject<T>> getNeighbors() {
return neighbors;
}
public void setNeighbors(List<OpticsObject<T>> neighbors) {
this.neighbors = neighbors;
}
/**
* Stablish an order to OpticsObjects according to their reachability distance
* @param o
* @return
*/
@Override
public int compareTo(OpticsObject<T> o) {
// TODO Auto-generated method stub
if(this.getReachabilityDistance() < o.getReachabilityDistance()){
return -1;
}
if(this.getReachabilityDistance() > o.getReachabilityDistance()){
return 1;
}
return 0;
}
@Override
public String toString(){
return "OpticObject of "+object.toString() +"\n with reachability-distance "+reachabilityDistance +" and core-distance "+coreDistance+"\n Cluster:"+clusterID;
}
}