package fr.whyt.craft;
import java.util.ArrayList;
import java.util.List;
import fr.whyt.item.Item;
/**
* Repr�sente un noeud dans l'arbre de cr�ation.<br>
* Il contient un objet ({@link Item}) et sa quantit�.<br>
* @author WhyT
*
*/
public class Node implements Cloneable {
private int quantity;
private final Item item;
private int level;
private List<Node> sons;
/**
* Cr�e un noeud contenant une quantit�, un item, un niveau et des fils
* @param quantity quantit� de l'objet � crafter.
* @param item objet � crafter.
* @param level niveau de l'Item dans la recette
* @param sons tableau de fils : ingr�dient servant � la fabrication de cet Item
*/
public Node (int quantity, Item item, int level, Node... sons) {
this.quantity = quantity;
this.item = item;
this.level = level;
if(sons != null) {
this.sons = new ArrayList<Node>(sons.length);
for(Node son : sons) {
this.sons.add(son);
}
} else {
this.sons = new ArrayList<Node>(0);
}
}
/**
* Cr�e un noeud contenant une quantit�, un item, un niveau et des fils
* @param quantity quantit� de l'objet � crafter.
* @param item objet � crafter.
* @param level niveau de l'Item dans la recette
* @param sons liste de fils : ingr�dient servant � la fabrication de cet Item
*/
public Node (int quantity, Item item, int level, List<Node> sons) {
this.quantity = quantity;
this.item = item;
this.level = level;
this.sons = sons;
}
public Long getID() {
return item.getId();
}
public int getLevel() {
return this.level;
}
public List<Node> getSons() {
return sons;
}
public boolean addSon(Node son) {
return sons.add(son);
}
private String indent() {
StringBuilder sb = new StringBuilder();
for(int i=0; i<this.level; i++) {
sb.append("\t");
}
return sb.toString();
}
/**
* Permet de changer la quantit� � crafter de cet objet.
* @param quantity quantit� de l'objet
*/
public void setQuantity (int quantity) {
this.quantity = quantity;
}
@Override
public Node clone() {
return new Node(this.quantity, this.item, this.level, this.sons);
}
@Override
public String toString () {
StringBuilder sb = new StringBuilder();
sb.append(indent())
.append(String.valueOf(quantity))
.append(" ")
.append(item.getName())
.append("\n");
for(Node son : sons) {
sb.append(son.toString());
}
return sb.toString();
}
}