package com.stxnext.management.android.storage.sqlite.dao; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.database.Cursor; import android.util.Log; import com.google.common.base.Strings; import com.stxnext.management.android.dto.local.IntranetUser; import com.stxnext.management.android.storage.sqlite.EntityMapper; public class IntranetUserDao extends AbstractDAO implements IntranetUserColumns { private EntityMapper<IntranetUser> mapper; public IntranetUserDao() { this.mapper = new IntranetUserMapper(true); } public List<IntranetUser> fetch() { List<IntranetUser> result = new ArrayList<IntranetUser>(); Cursor c = db.query(TABLE, null, null, null, null, null, null); result = mapper.mapEntity(c); c.close(); return result; } public List<IntranetUser> fetchFiltered() { List<IntranetUser> result = new ArrayList<IntranetUser>(); Cursor c = fetchFilteredCursor(null); result = mapper.mapEntity(c); c.close(); return result; } private static final String BASE_USER_QUERY = "select u."+EXTERNAL_ID+" as _id," + "ab."+AbsenceColumns.END+" as "+JOIN_ABSENCE_END+", " +"ab."+AbsenceColumns.START+" as "+JOIN_ABSENCE_START+", " +"ab."+AbsenceColumns.REMARKS+" as "+JOIN_ABSENCE_REMARKS+", " + "la."+LatenessColumns.END+" as "+JOIN_LATENESS_END+", " +"la."+LatenessColumns.START+" as "+JOIN_LATENESS_START+", " +"la."+LatenessColumns.EXPLANATION+" as "+JOIN_LATENESS_EXPLANATION +","+ " u.* from "+TABLE+" u" + " left join "+AbsenceColumns.TABLE+" ab on ab."+AbsenceColumns.USER_ID+"=u."+EXTERNAL_ID+"" + " left join "+LatenessColumns.TABLE+" la on la."+LatenessColumns.USER_ID+"=u."+EXTERNAL_ID+ " where u."+IS_CLIENT+"=? AND u."+IS_ACTIVE+"=? "; public Cursor fetchFilteredCursor(String query) { String[] queryParams = new String[] { "0", "1" }; String queryFilter = ""; if(!Strings.isNullOrEmpty(query)){ queryFilter = " AND u."+NAME+" like ? "; queryParams = new String[] { "0", "1","%"+query+"%" }; } Cursor cursor = db.rawQuery(BASE_USER_QUERY+queryFilter+" group by u."+EXTERNAL_ID+" order by u."+NAME+" asc", queryParams); return cursor; } public int getEntityCount(){ Cursor cursor = db.rawQuery("select count (_id) from ("+BASE_USER_QUERY+")", new String[] { "0", "1" }); cursor.moveToFirst(); int result = cursor.getInt(0); cursor.close(); return result; } public void persist(List<IntranetUser> users) { db.beginTransaction(); try { for (IntranetUser user : users) { ContentValues cv = new ContentValues(); cv.put(EXTERNAL_ID, user.getId().longValue()); cv.put(NAME, user.getName()); cv.put(IMG, user.getImageUrl()); cv.put(AVATAR_URL, user.getAvatarUrl()); cv.put(LOCATION, user.getLocationJson()); cv.put(IS_FREELANCER, user.getIsFreelancer()); cv.put(IS_CLIENT, user.getIsClient()); cv.put(IS_ACTIVE, user.getIsActive()); // TODO : create start stop work formatters! // cv.put(START_WORK, user.getStartWork()); // cv.put(START_FULLTIME_WORK, user.getStartWork()); cv.put(PHONE, user.getPhone()); cv.put(PHONE_ON_DESK, user.getPhoneDesk()); cv.put(SKYPE, user.getSkype()); cv.put(IRC, user.getIrc()); cv.put(EMAIL, user.getEmail()); cv.put(TASKS_LINK, user.getTasksLink()); cv.put(AVAILABILITY_LINK, user.getAvailabilityLink()); cv.put(ROLES, user.getRolesJson()); cv.put(GROUPS, user.getGroupsJson()); insertOrReplace(TABLE, cv); db.yieldIfContendedSafely(); } db.setTransactionSuccessful(); } catch (Exception e) { Log.e("", "", e); } finally { db.endTransaction(); } } @Override protected String getTableName() { return TABLE; } }