001/** 002 * Copyright 2005-2017 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.kuali.rice.kew.stats.dao.impl; 017 018import java.sql.SQLException; 019import java.sql.Timestamp; 020import java.util.ArrayList; 021import java.util.Calendar; 022import java.util.Date; 023import java.util.List; 024 025import javax.persistence.EntityManager; 026import javax.persistence.Query; 027 028import org.kuali.rice.core.api.util.ConcreteKeyValue; 029import org.kuali.rice.core.api.util.KeyValue; 030import org.kuali.rice.kew.api.KewApiConstants; 031import org.kuali.rice.kew.stats.Stats; 032import org.kuali.rice.kew.stats.dao.StatsDAO; 033 034/** 035 * This is a description of what this class does - ddean don't forget to fill this in. 036 * 037 * @author Kuali Rice Team (rice.collab@kuali.org) 038 * 039 */ 040public class StatsDaoJpa implements StatsDAO { 041 042 public static final String STATS_DOCUMENTS_ROUTED_REPORT = "select count(drhv) as cnt, drhv.docRouteStatus " 043 + "from DocumentRouteHeaderValue drhv " 044 + "where drhv.createDate between :beginDate and :endDate group by drhv.docRouteStatus"; 045 public static final String STATS_NUM_ACTIVE_ITEMS_REPORT = "select count(ai) from ActionItem ai"; 046 public static final String STATS_NUM_INITIATED_DOCS_BY_DOC_TYPE_REPORT = "select count(drhv), dt.name from " 047 + "DocumentRouteHeaderValue drhv, DocumentType dt where drhv.createDate > :createDate and " 048 + "drhv.documentTypeId = dt.documentTypeId group by dt.name"; 049 public static final String STATS_NUM_USERS_REPORT = "select count(distinct(uo.workflowId)) from UserOptions uo"; 050 public static final String STATS_NUM_DOC_TYPES_REPORT = 051 "select count(dt) from DocumentType dt where dt.currentInd = true"; 052 053 private EntityManager entityManager; 054 055 @Override 056 public void DocumentsRoutedReport(Stats stats, Date begDate, Date endDate) throws SQLException { 057 Query query = getEntityManager().createQuery(STATS_DOCUMENTS_ROUTED_REPORT); 058 query.setParameter("beginDate", new Timestamp(begDate.getTime())); 059 query.setParameter("endDate", new Timestamp(endDate.getTime())); 060 061 @SuppressWarnings("unchecked") 062 List<Object[]> resultList = query.getResultList(); 063 064 for (Object[] result : resultList) { 065 String actionType = result[1].toString(); 066 String number = result[0].toString(); 067 if (actionType.equals(KewApiConstants.ROUTE_HEADER_CANCEL_CD)) { 068 stats.setCanceledNumber(number); 069 } else if (actionType.equals(KewApiConstants.ROUTE_HEADER_DISAPPROVED_CD)) { 070 stats.setDisapprovedNumber(number); 071 } else if (actionType.equals(KewApiConstants.ROUTE_HEADER_ENROUTE_CD)) { 072 stats.setEnrouteNumber(number); 073 } else if (actionType.equals(KewApiConstants.ROUTE_HEADER_EXCEPTION_CD)) { 074 stats.setExceptionNumber(number); 075 } else if (actionType.equals(KewApiConstants.ROUTE_HEADER_FINAL_CD)) { 076 stats.setFinalNumber(number); 077 } else if (actionType.equals(KewApiConstants.ROUTE_HEADER_INITIATED_CD)) { 078 stats.setInitiatedNumber(number); 079 } else if (actionType.equals(KewApiConstants.ROUTE_HEADER_PROCESSED_CD)) { 080 stats.setProcessedNumber(number); 081 } else if (actionType.equals(KewApiConstants.ROUTE_HEADER_SAVED_CD)) { 082 stats.setSavedNumber(number); 083 } 084 } 085 } 086 087 @Override 088 public void NumActiveItemsReport(Stats stats) throws SQLException { 089 stats.setNumActionItems(getEntityManager().createQuery(STATS_NUM_ACTIVE_ITEMS_REPORT) 090 .getSingleResult().toString()); 091 } 092 093 @Override 094 public void NumInitiatedDocsByDocTypeReport(Stats stats) throws SQLException { 095 Query query = getEntityManager().createQuery(STATS_NUM_INITIATED_DOCS_BY_DOC_TYPE_REPORT); 096 Calendar calendar = Calendar.getInstance(); 097 calendar.add(Calendar.DAY_OF_YEAR, -29); 098 calendar.set(Calendar.HOUR_OF_DAY, 0); 099 calendar.set(Calendar.MINUTE, 0); 100 calendar.set(Calendar.SECOND, 0); 101 calendar.set(Calendar.MILLISECOND, 0); 102 query.setParameter("createDate", new Timestamp(calendar.getTime().getTime())); 103 104 @SuppressWarnings("unchecked") 105 List<Object[]> resultList = query.getResultList(); 106 107 List<KeyValue> numDocs = new ArrayList<KeyValue>(resultList.size()); 108 for (Object[] result : resultList) { 109 numDocs.add(new ConcreteKeyValue(result[1].toString(),result[0].toString())); 110 } 111 112 stats.setNumInitiatedDocsByDocType(numDocs); 113 } 114 115 @Override 116 public void NumUsersReport(Stats stats) throws SQLException { 117 stats.setNumUsers(getEntityManager().createQuery(STATS_NUM_USERS_REPORT).getSingleResult().toString()); 118 } 119 120 @Override 121 public void NumberOfDocTypesReport(Stats stats) throws SQLException { 122 stats.setNumDocTypes(getEntityManager().createQuery( 123 STATS_NUM_DOC_TYPES_REPORT).getSingleResult().toString()); 124 } 125 126 public EntityManager getEntityManager() { 127 return this.entityManager; 128 } 129 130 public void setEntityManager(EntityManager entityManager) { 131 this.entityManager = entityManager; 132 } 133 134}