package internetz;
import java.text.DecimalFormat;
public class TaskInternals {
private Skill skill;
private WorkUnit workRequired;
private WorkUnit workDone;
private Task owner;
public TaskInternals(Skill skill, WorkUnit workRequired, WorkUnit workDone, Task owner){
assert workRequired.d >= workDone.d;
assert workRequired.d > 0.;
this.skill = skill;
this.workDone = workDone;
this.workRequired = workRequired;
this.owner = owner;
}
public Skill getSkill() {
return skill;
}
public String getSkillName() {
return skill.getName();
}
public void setSkill(Skill skill) {
this.skill = skill;
}
public Task getOwner() {
return owner;
}
public void setOwner(Task owner) {
this.owner = owner;
}
public WorkUnit getWorkRequired() {
return workRequired;
}
public void setWorkRequired(WorkUnit workRequired) {
this.workRequired = workRequired;
}
public WorkUnit getWorkDone() {
return workDone;
}
public void setWorkDone(WorkUnit workDone) {
this.workDone = workDone;
}
public boolean isWorkDone(){
return (this.getWorkDone().d >= this.getWorkRequired().d);
}
/**
* Get advancement (work done between 0 and 1) of the TaskInternal.
* In rare cases the task can be overworked (returns > 100%)
*
* @return Always returns a progress value between [0,1+
*/
public double getProgress(){
return Math.abs(this.workDone.d / this.workRequired.d);
}
public double getWorkLeft(){
return Math.abs(this.workRequired.d - this.workDone.d);
}
@Override
public int hashCode() {
return owner.hashCode() * skill.hashCode();
}
@Override
public boolean equals(Object obj) {
if ((this.owner.equals(((TaskInternals) obj).owner))
&& (this.skill == ((TaskInternals) obj).skill))
return true;
else
return false;
}
@Override
public String toString(){
DecimalFormat df = new DecimalFormat("#.######");
return this.skill.getName() + " " +
df.format(workDone.d) + "/" + df.format(workRequired.d);
}
}