package com.lateensoft.pathfinder.toolkit.db.dao.table;
import android.content.ContentValues;
import android.content.Context;
import com.lateensoft.pathfinder.toolkit.dao.DataAccessException;
import com.lateensoft.pathfinder.toolkit.db.dao.set.AbilitySetDAO;
import com.lateensoft.pathfinder.toolkit.db.dao.set.SaveSetDAO;
import com.lateensoft.pathfinder.toolkit.db.dao.set.SkillSetDAO;
import com.lateensoft.pathfinder.toolkit.model.character.*;
import com.lateensoft.pathfinder.toolkit.model.character.items.Armor;
import com.lateensoft.pathfinder.toolkit.model.character.items.Item;
import com.lateensoft.pathfinder.toolkit.model.character.items.Weapon;
import java.util.Hashtable;
import java.util.List;
public class CharacterModelDAO extends AbstractCharacterDAO<PathfinderCharacter> {
private FluffDAO fluffDAO;
private AbilitySetDAO abilitySetDAO;
private CombatStatDAO combatStatDAO;
private SaveSetDAO saveSetDAO;
private SkillSetDAO skillSetDAO;
private ItemDAO itemDAO;
private WeaponDAO weaponDAO;
private ArmorDAO armorDAO;
private FeatDAO featDAO;
private SpellDAO spellDAO;
public CharacterModelDAO(Context context) {
super(context);
fluffDAO = new FluffDAO(context);
abilitySetDAO = new AbilitySetDAO(context);
combatStatDAO = new CombatStatDAO(context);
saveSetDAO = new SaveSetDAO(context);
skillSetDAO = new SkillSetDAO(context);
itemDAO = new ItemDAO(context);
weaponDAO = new WeaponDAO(context);
armorDAO = new ArmorDAO(context);
featDAO = new FeatDAO(context);
spellDAO = new SpellDAO(context);
}
@Override
public Long add(PathfinderCharacter object) throws DataAccessException {
long id = -1;
try {
beginTransaction();
id = super.add(object);
fluffDAO.add(id, object.getFluff());
abilitySetDAO.add(id, object.getAbilitySet());
combatStatDAO.add(id, object.getCombatStatSet());
saveSetDAO.add(id, object.getSaveSet());
skillSetDAO.add(id, object.getSkillSet());
List<Item> items = object.getInventory().getItems();
for (Item item : items) {
itemDAO.add(id, item);
}
List<Weapon> weapons = object.getInventory().getWeapons();
for (Weapon weapon : weapons) {
weaponDAO.add(id, weapon);
}
List<Armor> armors = object.getInventory().getArmors();
for (Armor armor : armors) {
armorDAO.add(id, armor);
}
FeatList featList = object.getFeatList();
for (Feat feat : featList) {
featDAO.add(id, feat);
}
SpellBook spells = object.getSpellBook();
for (Spell spell : spells) {
spellDAO.add(id, spell);
}
setTransactionSuccessful();
} finally {
endTransaction();
}
return id;
}
@Override
protected ContentValues getContentValues(PathfinderCharacter object) {
ContentValues values = new ContentValues();
if (isIdSet(object)) {
values.put(CHARACTER_ID, object.getId());
}
values.put(NAME, object.getName());
values.put(GOLD, object.getGold());
return values;
}
@Override
protected PathfinderCharacter buildFromHashTable(Hashtable<String, Object> hashTable) {
PathfinderCharacter.Builder builder = new PathfinderCharacter.Builder();
populateBuilderFromHashTable(hashTable, builder);
return builder.build();
}
protected void populateBuilderFromHashTable(Hashtable<String, Object> hashTable,
PathfinderCharacter.Builder builder) {
long id = (Long) hashTable.get(CHARACTER_ID);
builder.setId(id)
.setName((String) hashTable.get(NAME))
.setGold((Double) hashTable.get(GOLD))
.setFluffInfo(fluffDAO.find(id))
.setAbilitySet(abilitySetDAO.findSet(id))
.setCombatStatSet(combatStatDAO.find(id))
.setSaveSet(saveSetDAO.findSet(id))
.setSkillSet(skillSetDAO.findSet(id));
Inventory inventory = new Inventory();
inventory.getItems().addAll(itemDAO.findAllForOwner(id));
inventory.getWeapons().addAll(weaponDAO.findAllForOwner(id));
inventory.getArmors().addAll(armorDAO.findAllForOwner(id));
builder.setInventory(inventory)
.setFeats(new FeatList(featDAO.findAllForOwner(id)))
.setSpellBook(new SpellBook(spellDAO.findAllForOwner(id)));
}
}