001    package org.apache.oozie.executor.jpa;
002    
003    import java.sql.Timestamp;
004    import java.util.ArrayList;
005    import java.util.Date;
006    import java.util.List;
007    
008    import javax.persistence.EntityManager;
009    import javax.persistence.Query;
010    
011    import org.apache.oozie.CoordinatorJobBean;
012    import org.apache.oozie.ErrorCode;
013    import org.apache.oozie.util.ParamChecker;
014    
015    /**
016     * JPA command to get coordinator jobs which are qualify for Materialization.
017     */
018    public class CoordJobsToBeMaterializedJPAExecutor implements JPAExecutor<List<CoordinatorJobBean>> {
019    
020        private Date dateInput;
021        private int limit;
022        private List<CoordinatorJobBean> jobList;
023    
024        /**
025         * @param date
026         * @param limit
027         */
028        public CoordJobsToBeMaterializedJPAExecutor(Date date, int limit) {
029            ParamChecker.notNull(date, "Coord Job Materialization Date");
030            this.dateInput = date;
031            this.limit = limit;
032            jobList = new ArrayList<CoordinatorJobBean>();
033        }
034    
035        /* (non-Javadoc)
036         * @see org.apache.oozie.executor.jpa.JPAExecutor#execute(javax.persistence.EntityManager)
037         */
038        @SuppressWarnings("unchecked")
039        @Override
040        public List<CoordinatorJobBean> execute(EntityManager em) throws JPAExecutorException {
041            try {
042                Query q = em.createNamedQuery("GET_COORD_JOBS_OLDER_THAN");
043                q.setParameter("matTime", new Timestamp(this.dateInput.getTime()));
044                if (limit > 0) {
045                    q.setMaxResults(limit);
046                }
047    
048                List<CoordinatorJobBean> cjBeans = q.getResultList();
049                // copy results to a new object
050                for (CoordinatorJobBean j : cjBeans) {
051                    jobList.add(j);
052                }
053            }
054            catch (IllegalStateException e) {
055                throw new JPAExecutorException(ErrorCode.E0601, e.getMessage(), e);
056            }
057            return jobList;
058        }
059    
060        @Override
061        public String getName() {
062            return "CoordJobsToBeMaterializedJPAExecutor";
063        }
064    
065        /**
066         * @return the dateInput
067         */
068        public Date getDateInput() {
069            return dateInput;
070        }
071    
072        /**
073         * @param dateInput the dateInput to set
074         */
075        public void setDateInput(Date dateInput) {
076            this.dateInput = dateInput;
077        }
078    
079        /**
080         * @return the limit
081         */
082        public int getLimit() {
083            return limit;
084        }
085    
086        /**
087         * @param limit the limit to set
088         */
089        public void setLimit(int limit) {
090            this.limit = limit;
091        }
092    }