package com.lateensoft.pathfinder.toolkit.db.dao.table;
import android.content.ContentValues;
import android.content.Context;
import com.lateensoft.pathfinder.toolkit.dao.OwnedGenericDAO;
import com.lateensoft.pathfinder.toolkit.db.dao.Table;
import com.lateensoft.pathfinder.toolkit.model.IdNamePair;
import com.lateensoft.pathfinder.toolkit.model.NamedList;
import java.util.Hashtable;
import java.util.List;
public class PartyDAO<T> extends ListBasedDAO<NamedList<T>, T, IdNamePair> {
private static final String TABLE = "Party";
private static final String PARTY_ID = "party_id";
private static final String NAME = "Name";
private AbstractPartyMembershipDAO memberDao;
private OwnedGenericDAO<Long, ?, T> itemDao;
public PartyDAO(Context context, OwnedGenericDAO<Long, ?, T> itemDao) {
super(context);
memberDao = new PartyMemberIdDAO(context);
this.itemDao = itemDao;
}
@Override
protected Table initTable() {
return new Table(TABLE, PARTY_ID, NAME);
}
@Override
protected String getIdSelector(Long id) {
return PARTY_ID + "=" + id;
}
@Override
protected ContentValues getContentValues(IdNamePair party) {
ContentValues values = new ContentValues();
if (isIdSet(party)) {
values.put(PARTY_ID, party.getId());
}
values.put(NAME, party.getName());
return values;
}
@Override
protected IdNamePair buildFromHashTable(Hashtable<String, Object> hashTable) {
long id = (Long) hashTable.get(PARTY_ID);
String name = (String) hashTable.get(NAME);
return new IdNamePair(id, name);
}
@Override
protected IdNamePair getListFields(NamedList<T> list) {
return list.idNamePair();
}
@Override
protected OwnedGenericDAO<Long, ?, T> getItemDao() {
return itemDao;
}
@Override
protected NamedList<T> buildList(IdNamePair idNamePair, List<T> items) {
return new NamedList<T>(idNamePair, items);
}
@Override
protected String getDefaultOrderBy() {
return NAME + " ASC";
}
public List<IdNamePair> findAllWithMember(Long characterId) {
String tables = TABLE + ", " + AbstractPartyMembershipDAO.TABLE;
String[] columns = getTable().union(memberDao.getTable(), PARTY_ID, AbstractPartyMembershipDAO.PARTY_ID);
String partyMatchSelector = String.format("%s.%s=%s.%s", TABLE, PARTY_ID,
AbstractPartyMembershipDAO.TABLE, AbstractPartyMembershipDAO.PARTY_ID);
String characterSelector = AbstractPartyMembershipDAO.CHARACTER_ID + "=" + characterId;
String selector = andSelectors(partyMatchSelector, characterSelector);
return findFiltered(tables, columns, selector, null);
}
}