package co.touchlab.droidconandroid.tasks; import android.content.Context; import android.text.TextUtils; import java.util.ArrayList; import java.util.List; import co.touchlab.android.threading.eventbus.EventBusExt; import co.touchlab.android.threading.tasks.Task; import co.touchlab.droidconandroid.data.DatabaseHelper; import co.touchlab.droidconandroid.data.Event; import co.touchlab.droidconandroid.data.EventSpeaker; import co.touchlab.droidconandroid.data.UserAccount; import co.touchlab.squeaky.dao.Dao; /** * Created by kgalligan on 4/7/16. */ public class EventDetailLoadTask extends Task { public final long eventId; public Event event; public boolean conflict; public List<UserAccount> speakers; public EventDetailLoadTask(long eventId) { this.eventId = eventId; } @Override protected void run(Context context) throws Throwable { Dao<Event> dao = DatabaseHelper.getInstance(context).getEventDao(); event = dao.queryForId(eventId); if(event.isRsvped()) conflict = hasConflict(event, dao.queryForAll().list()); Dao<EventSpeaker> eventSpeakerDao = DatabaseHelper.getInstance(context).getEventSpeakerDao(); // val results = Where<EventSpeaker, Long>(eventSpeakerDao).eq("event_id", eventId)!!.query()!!.list()!! List<EventSpeaker> results = eventSpeakerDao.queryForEq("event_id", eventId).list(); speakers = new ArrayList(results.size()); for (EventSpeaker eventSpeaker : results) { speakers.add(eventSpeaker.userAccount); } event.speakerList = results; } public long getEventId() { return eventId; } public Event getEvent() { return event; } public boolean isConflict() { return conflict; } public List<UserAccount> getSpeakers() { return speakers; } @Override protected boolean handleError(Context context, Throwable e) { return false; } @Override protected void onComplete(Context context) { EventBusExt.getDefault().post(this); } public static boolean hasConflict(Event event, List dataSet) { for (Object ce : dataSet) { if(ce instanceof Event) { Event cee = (Event)ce; if (event.id != cee.id && ! TextUtils.isEmpty(cee.rsvpUuid) && event.startDateLong < cee.endDateLong && event.endDateLong > cee.startDateLong) return true; } } return false; } }