package pdp.scrabble.game.impl;
import java.util.Iterator;
import org.jdom.Element;
import org.jdom.Attribute;
import pdp.scrabble.game.GameEnvironment;
import pdp.scrabble.game.Letter;
import pdp.scrabble.game.Rack;
import pdp.scrabble.game.Bag;
import pdp.scrabble.Factory;
import java.util.ArrayList;
public class RackImplNew implements Rack{
private ArrayList<Letter> lettres;
private Bag sac = null;
public RackImplNew(Bag s){
lettres = new ArrayList<Letter>();
this.sac= s;
}
/* Old version
*
* @Override
public void save(Element root) {
Element element = new Element("Rack");
root.addContent(element);
for (int i = 0; i < MAX_RACK_LETTERS; i++) {
if (this.letters[i] != null) {
this.letters[i].save(element);
}
}
}
@Override
public void load(Element root) {
for (int i = 0; i < MAX_RACK_LETTERS; i++) {
this.letters[i] = null;
}
Element element = root.getChild("Rack");
@SuppressWarnings("unchecked")
Iterator<Element> Eletters = element.getChildren().iterator();
int i = 0;
while (Eletters.hasNext()) {
Element Eletter = Eletters.next();
Letter letter = FACTORY.createLetter(' ', 0, 0);
letter.load(Eletter);
this.letters[i] = letter;
i++;
}
}
*/
@Override
public void save(Element root) {
Element e = new Element("Rack");
root.addContent(e);
for(int i = 0; i<getNumberOfLetters();i++)
lettres.get(i).save(e);
}
@Override
public void load(Element root) {
Element element = root.getChild("Rack");
@SuppressWarnings("unchecked")
Iterator<Element> Eletters = element.getChildren().iterator();
while (Eletters.hasNext()) {
Element Eletter = Eletters.next();
Letter letter = Factory.FACTORY.createLetter(' ', 0, 0);
letter.load(Eletter);
lettres.add(letter);
}
}
@Override
public void addLetter(Letter letter) {
if(this.getNumberOfLetters()<MAX_RACK_LETTERS)
lettres.add(letter);
}
@Override
public Letter removeLetter(Letter letter) {
lettres.remove(letter);
return letter;
}
@Override
public void fill() {
while(!this.sac.isEmpty() && this.getNumberOfLetters()<MAX_RACK_LETTERS)
this.addLetter(sac.getRandomLetter());
}
@Override
public void clear() {
for(int i=0; i<getNumberOfLetters(); i++) {
this.sac.addLetter(lettres.remove(i));
}
}
@Override
public Letter getLetter(int i) {
return lettres.get(i);
}
@Override
public int getNumberOfLetters() {
return lettres.size();
}
@Override
public int getLetterAmount(char c) {
int a= 0;
for(int i=0; i<getNumberOfLetters(); i++)
if(Character.toLowerCase(lettres.get(i).getName()) == Character.toLowerCase(c))
a = a + 1;
return a;
}
@Override
public String getLetters() {
String a= "";
for(int i=0; i<getNumberOfLetters(); i++)
a +=lettres.get(i).getName();
return a;
}
@Override
public int getSize() {
return MAX_RACK_LETTERS;
}
@Override
public Iterator<Letter> iterator() {
return lettres.iterator();
}
@Override
public Rack clone() {
Rack clone = new RackImplNew(sac);
for (Letter l : this)
clone.addLetter(l.clone());
return clone;
}
@Override
public Letter getLetter(char c) {
for(Letter l : this)
if (l.getName() == c)
return l;
return null;
}
@Override
public void changeEnvironment(GameEnvironment env) {
this.sac = env.bag();
}
}