com.path.android.jobqueue.nonPersistentQueue
Class MergedQueue

java.lang.Object
  extended by com.path.android.jobqueue.nonPersistentQueue.MergedQueue
All Implemented Interfaces:
JobSet
Direct Known Subclasses:
NetworkAwarePriorityQueue, TimeAwarePriorityQueue

public abstract class MergedQueue
extends java.lang.Object
implements JobSet

A queue implementation that utilize two queues depending on one or multiple properties of the JobHolder While retrieving items, it uses a different comparison method to handle dynamic comparisons (e.g. time) between two queues


Nested Class Summary
protected static class MergedQueue.SetId
          simple enum to identify queues
 
Constructor Summary
MergedQueue(int initialCapacity, java.util.Comparator<JobHolder> comparator, java.util.Comparator<JobHolder> retrieveComparator)
           
 
Method Summary
 void clear()
          
 CountWithGroupIdsResult countReadyJobs(MergedQueue.SetId setId, java.util.Collection<java.lang.String> excludeGroups)
           
 CountWithGroupIdsResult countReadyJobs(MergedQueue.SetId setId, long now, java.util.Collection<java.lang.String> excludeGroups)
           
protected abstract  JobSet createQueue(MergedQueue.SetId setId, int initialCapacity, java.util.Comparator<JobHolder> comparator)
          called when we want to create the subsequent queues
protected abstract  MergedQueue.SetId decideQueue(JobHolder jobHolder)
          decides which queue should the job holder go if first queue, should return 0 if second queue, should return 1 is only called when an item is inserted.
 JobHolder findById(long id)
          Returns the JobHolder that has the given id
 boolean offer(JobHolder jobHolder)
          
 JobHolder peek(java.util.Collection<java.lang.String> excludeGroupIds)
          
protected  JobHolder peekFromQueue(MergedQueue.SetId queueId, java.util.Collection<java.lang.String> excludeGroupIds)
          used to peek from one of the queues
 JobHolder poll(java.util.Collection<java.lang.String> excludeGroupIds)
          
protected  JobHolder pollFromQueue(MergedQueue.SetId queueId, java.util.Collection<java.lang.String> excludeGroupIds)
          used to poll from one of the queues
 boolean remove(JobHolder holder)
          
 int size()
          
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface com.path.android.jobqueue.nonPersistentQueue.JobSet
countReadyJobs, countReadyJobs
 

Constructor Detail

MergedQueue

public MergedQueue(int initialCapacity,
                   java.util.Comparator<JobHolder> comparator,
                   java.util.Comparator<JobHolder> retrieveComparator)
Parameters:
initialCapacity - passed to createQueue(com.path.android.jobqueue.nonPersistentQueue.MergedQueue.SetId, int, java.util.Comparator)
comparator - passed to createQueue(com.path.android.jobqueue.nonPersistentQueue.MergedQueue.SetId, int, java.util.Comparator)
retrieveComparator - upon retrieval, if both queues return items, this comparator is used to decide which one should be returned
Method Detail

pollFromQueue

protected JobHolder pollFromQueue(MergedQueue.SetId queueId,
                                  java.util.Collection<java.lang.String> excludeGroupIds)
used to poll from one of the queues

Parameters:
queueId -
Returns:

peekFromQueue

protected JobHolder peekFromQueue(MergedQueue.SetId queueId,
                                  java.util.Collection<java.lang.String> excludeGroupIds)
used to peek from one of the queues

Parameters:
queueId -
Returns:

offer

public boolean offer(JobHolder jobHolder)

Specified by:
offer in interface JobSet

poll

public JobHolder poll(java.util.Collection<java.lang.String> excludeGroupIds)

Specified by:
poll in interface JobSet

peek

public JobHolder peek(java.util.Collection<java.lang.String> excludeGroupIds)

Specified by:
peek in interface JobSet

clear

public void clear()

Specified by:
clear in interface JobSet

remove

public boolean remove(JobHolder holder)

Specified by:
remove in interface JobSet

size

public int size()

Specified by:
size in interface JobSet

decideQueue

protected abstract MergedQueue.SetId decideQueue(JobHolder jobHolder)
decides which queue should the job holder go if first queue, should return 0 if second queue, should return 1 is only called when an item is inserted. methods like remove always call both queues.

Parameters:
jobHolder -
Returns:

createQueue

protected abstract JobSet createQueue(MergedQueue.SetId setId,
                                      int initialCapacity,
                                      java.util.Comparator<JobHolder> comparator)
called when we want to create the subsequent queues

Parameters:
initialCapacity -
comparator -
Returns:

countReadyJobs

public CountWithGroupIdsResult countReadyJobs(MergedQueue.SetId setId,
                                              long now,
                                              java.util.Collection<java.lang.String> excludeGroups)

countReadyJobs

public CountWithGroupIdsResult countReadyJobs(MergedQueue.SetId setId,
                                              java.util.Collection<java.lang.String> excludeGroups)

findById

public JobHolder findById(long id)
Returns the JobHolder that has the given id

Specified by:
findById in interface JobSet
Parameters:
id - id job the job
Returns: