// Path: src/main/java/yourwebproject2/framework/data/BaseJPARepository.java
// public interface BaseJPARepository<T extends Entity, ID extends Serializable> {
//     /**
//      * Method to setup the class type of the Entity for which
//      * the DAO works
//      *
//      * @param clazz
//      */
//     public void setupEntityClass(Class clazz);
// 
//     /**
//      * Method to insert the new row into config.database table
//      *
//      * @param object
//      *         The object entity to be persisted
//      */
//     public T insert(T object);
// 
//     /**
//      * Method to update an existing row in the config.database table
//      *
//      * @param object
//      *         The object entity to be updated
//      */
//     public T update(T object);
// 
//     /**
//      * Method to insert a new row or update a row if it was
//      * already existing in the system.
//      *
//      * @param object
//      *         The object entity to be updated
//      */
//     public T insertOrUpdate(T object);
// 
//     /**
//      * Method to delete an existing row in the config.database table
//      *
//      * @param object
//      *         The object entity to be deleted
//      */
//     public void delete(T object);
// 
//     /**
//      * Method to find a database item by id
//      *
//      * @param id
//      *         The id by which the row has to be found
//      */
//     public T findById(ID id);
// 
//     /**
//      * Method to find a collection of database entities by pages
//      *
//      * @param pageNum
//      * @param countPerPage
//      * @param order
//      *
//      * @return
//      *
//      * @throws Exception
//      */
//     public Collection<T> findAllByPage(int pageNum, int countPerPage, Order order);
// }
// 
// Path: src/main/java/yourwebproject2/model/entity/Job.java
// @Entity
// @Table(indexes = {  @Index(name="name_idx", columnList = "name", unique = true),
//         @Index(name="status_idx", columnList = "status"),
//         @Index(name="category_idx", columnList = "category")})
// public class Job extends JPAEntity<Long> {
//     public enum Status {
//         NEW, EXECUTING, PRIORITIZED, FAILED, RETRYING, SUCCESSFUL
//     }
// 
//     private String name;
//     private String metadataJson;
//     private String callbackUrl;
//     private Date submitTime;
//     private Status status;
//     private Date scheduledTime;
//     private Date completionTime;
//     private Integer retryCount;
//     private Category category;
// 
//     @NotNull @NotBlank
//     @Column
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     @Column
//     public String getCallbackUrl() {
//         return callbackUrl;
//     }
// 
//     public void setCallbackUrl(String callbackUrl) {
//         this.callbackUrl = callbackUrl;
//     }
// 
//     @Column
//     public String getMetadataJson() {
//         return metadataJson;
//     }
// 
//     public void setMetadataJson(String metadataJson) {
//         this.metadataJson = metadataJson;
//     }
// 
//     @NotNull
//     @Column
//     public Date getSubmitTime() {
//         return submitTime;
//     }
// 
//     public void setSubmitTime(Date submitTime) {
//         this.submitTime = submitTime;
//     }
// 
//     @OneToOne(fetch = FetchType.EAGER)
//     public Category getCategory() {
//         return category;
//     }
// 
//     public void setCategory(Category category) {
//         this.category = category;
//     }
// 
//     @NotNull
//     @Column
//     public Status getStatus() {
//         return status;
//     }
// 
//     public void setStatus(Status status) {
//         this.status = status;
//     }
// 
//     @Column
//     public Date getScheduledTime() {
//         return scheduledTime;
//     }
// 
//     public void setScheduledTime(Date scheduledTime) {
//         this.scheduledTime = scheduledTime;
//     }
// 
//     @Column
//     public Date getCompletionTime() {
//         return completionTime;
//     }
// 
//     public void setCompletionTime(Date completionTime) {
//         this.completionTime = completionTime;
//     }
// 
//     @Column
//     public Integer getRetryCount() {
//         return retryCount;
//     }
// 
//     public void setRetryCount(Integer retryCount) {
//         this.retryCount = retryCount;
//     }
// 
//     @Override
//     public String toString() {
//         return "Job{" +
//                 "name='" + name + '\'' +
//                 ", metadataJson='" + metadataJson + '\'' +
//                 ", callbackUrl='" + callbackUrl + '\'' +
//                 ", submitTime=" + submitTime +
//                 ", status=" + status +
//                 ", scheduledTime=" + scheduledTime +
//                 ", completionTime=" + completionTime +
//                 ", retryCount=" + retryCount +
//                 ", category=" + category +
//                 '}';
//     }
// }


import yourwebproject2.framework.data.BaseJPARepository;
import yourwebproject2.model.entity.Job;
import java.util.List;
package yourwebproject2.model.repository;



/**
 * @author: kameshr
 */
public interface JobRepository extends BaseJPARepository<Job, Long> {
    /**
     *
     * @param count
     * @return
     */
    public List<Job> fetchNewJobsToBeScheduledForExecutionPerPriority(int count);

    /**
     *
     * @param count
     * @return
     */
    public List<Job> fetchFailedJobsToBeScheduledForExecutionPerPriority(int count);

    /**
     *
     * @param count
     * @return
     */
    public List<Job> fetchNewJobsToBeScheduledForExecutionPerSubmissionTimePriority(int count);

    /**
     *
     * @param count
     * @return
     */
// Path: src/main/java/yourwebproject2/framework/data/BaseJPARepository.java
// public interface BaseJPARepository<T extends Entity, ID extends Serializable> {
//     /**
//      * Method to setup the class type of the Entity for which
//      * the DAO works
//      *
//      * @param clazz
//      */
//     public void setupEntityClass(Class clazz);
// 
//     /**
//      * Method to insert the new row into config.database table
//      *
//      * @param object
//      *         The object entity to be persisted
//      */
//     public T insert(T object);
// 
//     /**
//      * Method to update an existing row in the config.database table
//      *
//      * @param object
//      *         The object entity to be updated
//      */
//     public T update(T object);
// 
//     /**
//      * Method to insert a new row or update a row if it was
//      * already existing in the system.
//      *
//      * @param object
//      *         The object entity to be updated
//      */
//     public T insertOrUpdate(T object);
// 
//     /**
//      * Method to delete an existing row in the config.database table
//      *
//      * @param object
//      *         The object entity to be deleted
//      */
//     public void delete(T object);
// 
//     /**
//      * Method to find a database item by id
//      *
//      * @param id
//      *         The id by which the row has to be found
//      */
//     public T findById(ID id);
// 
//     /**
//      * Method to find a collection of database entities by pages
//      *
//      * @param pageNum
//      * @param countPerPage
//      * @param order
//      *
//      * @return
//      *
//      * @throws Exception
//      */
//     public Collection<T> findAllByPage(int pageNum, int countPerPage, Order order);
// }
// 
// Path: src/main/java/yourwebproject2/model/entity/Job.java
// @Entity
// @Table(indexes = {  @Index(name="name_idx", columnList = "name", unique = true),
//         @Index(name="status_idx", columnList = "status"),
//         @Index(name="category_idx", columnList = "category")})
// public class Job extends JPAEntity<Long> {
//     public enum Status {
//         NEW, EXECUTING, PRIORITIZED, FAILED, RETRYING, SUCCESSFUL
//     }
// 
//     private String name;
//     private String metadataJson;
//     private String callbackUrl;
//     private Date submitTime;
//     private Status status;
//     private Date scheduledTime;
//     private Date completionTime;
//     private Integer retryCount;
//     private Category category;
// 
//     @NotNull @NotBlank
//     @Column
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     @Column
//     public String getCallbackUrl() {
//         return callbackUrl;
//     }
// 
//     public void setCallbackUrl(String callbackUrl) {
//         this.callbackUrl = callbackUrl;
//     }
// 
//     @Column
//     public String getMetadataJson() {
//         return metadataJson;
//     }
// 
//     public void setMetadataJson(String metadataJson) {
//         this.metadataJson = metadataJson;
//     }
// 
//     @NotNull
//     @Column
//     public Date getSubmitTime() {
//         return submitTime;
//     }
// 
//     public void setSubmitTime(Date submitTime) {
//         this.submitTime = submitTime;
//     }
// 
//     @OneToOne(fetch = FetchType.EAGER)
//     public Category getCategory() {
//         return category;
//     }
// 
//     public void setCategory(Category category) {
//         this.category = category;
//     }
// 
//     @NotNull
//     @Column
//     public Status getStatus() {
//         return status;
//     }
// 
//     public void setStatus(Status status) {
//         this.status = status;
//     }
// 
//     @Column
//     public Date getScheduledTime() {
//         return scheduledTime;
//     }
// 
//     public void setScheduledTime(Date scheduledTime) {
//         this.scheduledTime = scheduledTime;
//     }
// 
//     @Column
//     public Date getCompletionTime() {
//         return completionTime;
//     }
// 
//     public void setCompletionTime(Date completionTime) {
//         this.completionTime = completionTime;
//     }
// 
//     @Column
//     public Integer getRetryCount() {
//         return retryCount;
//     }
// 
//     public void setRetryCount(Integer retryCount) {
//         this.retryCount = retryCount;
//     }
// 
//     @Override
//     public String toString() {
//         return "Job{" +
//                 "name='" + name + '\'' +
//                 ", metadataJson='" + metadataJson + '\'' +
//                 ", callbackUrl='" + callbackUrl + '\'' +
//                 ", submitTime=" + submitTime +
//                 ", status=" + status +
//                 ", scheduledTime=" + scheduledTime +
//                 ", completionTime=" + completionTime +
//                 ", retryCount=" + retryCount +
//                 ", category=" + category +
//                 '}';
//     }
// }


// Path: src/main/java/yourwebproject2/model/repository/JobRepository.java
import yourwebproject2.framework.data.BaseJPARepository;
import yourwebproject2.model.entity.Job;
import java.util.List;

package yourwebproject2.model.repository;



/**
 * @author: kameshr
 */
public interface JobRepository extends BaseJPARepository<Job, Long> {
    /**
     *
     * @param count
     * @return
     */
    public List<Job> fetchNewJobsToBeScheduledForExecutionPerPriority(int count);

    /**
     *
     * @param count
     * @return
     */
    public List<Job> fetchFailedJobsToBeScheduledForExecutionPerPriority(int count);

    /**
     *
     * @param count
     * @return
     */
    public List<Job> fetchNewJobsToBeScheduledForExecutionPerSubmissionTimePriority(int count);

    /**
     *
     * @param count
     * @return
     */
    public List<Job> fetchFailedJobsToBeScheduledForExecutionPerSubmissionTimePriority(int count);