package com.lateensoft.pathfinder.toolkit.model.character.stats;
import java.util.*;
import com.google.common.collect.Lists;
import android.os.Parcel;
import android.os.Parcelable;
import org.jetbrains.annotations.Nullable;
public class SaveSet extends ValidatedTypedStatSet<Save, SaveType> implements Parcelable, Iterable<Save> {
private List<Save> saves;
public SaveSet() {
super();
}
public SaveSet(List<Save> items, @Nullable CorrectionListener<Save> listener) {
super(items, listener);
}
public SaveSet(Parcel in) {
saves = Lists.newArrayListWithCapacity(getSortedTypes().size());
in.readTypedList(saves, Save.CREATOR);
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeTypedList(saves);
}
@Override
protected void initWithValidatedItems(List<Save> items) {
saves = items;
}
@Override
protected List<SaveType> getSortedTypes() {
return SaveType.getKeySortedValues();
}
@Override
protected Save newItemOfType(SaveType type) {
return new Save(type);
}
@Override
protected ItemValidityChecker newItemValidityChecker() {
return new ItemValidityChecker() {
@Override public boolean isValid(Save item) {
return numberOfTypePreviouslyFound(item.getType()) == 0;
}
};
}
public Save getSave(SaveType saveKey) {
for (Save save : saves) {
if (save.getType() == saveKey) {
return save;
}
}
return null;
}
public Save getSaveByIndex(int index) {
return saves.get(index);
}
@Override
public int size() {
return saves.size();
}
@Override
public Iterator<Save> iterator() {
return new Iterator<Save>() {
Iterator<Save> _iterator = saves.iterator();
@Override public boolean hasNext() {
return _iterator.hasNext();
}
@Override public Save next() {
return _iterator.next();
}
@Override public void remove() {
throw new UnsupportedOperationException(SaveSet.class.getSimpleName() + ".iterator.remove");
}
};
}
@Override
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<SaveSet> CREATOR = new Parcelable.Creator<SaveSet>() {
public SaveSet createFromParcel(Parcel in) {
return new SaveSet(in);
}
public SaveSet[] newArray(int size) {
return new SaveSet[size];
}
};
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof SaveSet)) return false;
SaveSet saves = (SaveSet) o;
if (!this.saves.equals(saves.saves)) return false;
return true;
}
@Override
public int hashCode() {
return saves.hashCode();
}
}