package com.sohu.cache.machine;

import com.google.common.collect.ComparisonChain;

import java.io.Serializable;
import java.util.Comparator;

/**
 * 选择机器时根据机器的memory、traffic和load进行排序；
 * 在memory满足的情况，排序规则是：traffic > load > memory
 *
 * @author: lingguo
 * @time: 2014/9/17 12:04
 */
public class MachineProperty implements Comparator<MachineProperty>, Serializable {

    private static final long serialVersionUID = 2498956982032225654L;
    private long hostId;
    private long memory;
    private double traffic;
    private double load;

    public MachineProperty() {
    }

    public MachineProperty(long hostId, long memory, double traffic, double load) {
        this.hostId = hostId;
        this.memory = memory;
        this.traffic = traffic;
        this.load = load;
    }

    public long getHostId() {
        return hostId;
    }

    public void setHostId(long hostId) {
        this.hostId = hostId;
    }

    public long getMemory() {
        return memory;
    }

    public void setMemory(long memory) {
        this.memory = memory;
    }

    public double getTraffic() {
        return traffic;
    }

    public void setTraffic(double traffic) {
        this.traffic = traffic;
    }

    public double getLoad() {
        return load;
    }

    public void setLoad(double load) {
        this.load = load;
    }

    @Override
    public int compare(MachineProperty o1, MachineProperty o2) {
        return ComparisonChain.start()
                .compare(o1.traffic, o2.traffic)
                .compare(o1.load, o2.load)
                .compare(o2.memory, o1.memory)
                .result();
    }
}
