001 /** 002 * Copyright 2005-2012 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 */ 016 package org.kuali.rice.kew.stats.dao.impl; 017 018 import org.apache.ojb.broker.accesslayer.LookupException; 019 import org.kuali.rice.core.api.util.ConcreteKeyValue; 020 import org.kuali.rice.core.api.util.KeyValue; 021 import org.kuali.rice.kew.stats.Stats; 022 import org.kuali.rice.kew.stats.dao.StatsDAO; 023 import org.kuali.rice.kew.api.KewApiConstants; 024 025 import javax.persistence.EntityManager; 026 import javax.persistence.PersistenceContext; 027 import javax.persistence.Query; 028 import java.sql.SQLException; 029 import java.sql.Timestamp; 030 import java.util.ArrayList; 031 import java.util.Calendar; 032 import java.util.Date; 033 import java.util.List; 034 035 /** 036 * This is a description of what this class does - ddean don't forget to fill this in. 037 * 038 * @author Kuali Rice Team (rice.collab@kuali.org) 039 * 040 */ 041 // There isn't an obvious place to put these @NamedQueries since they are just doing select count(*) from various tables. 042 // Thus I'm using the query literals in this class, move these NamedQuerys to wherever they need to go. 043 // @NamedQueries({ 044 // @NamedQuery(name="Stats.DocumentsRoutedReport", query="select count(*) as count, drhv.docRouteStatus from DocumentRouteHeaderValue drhv where drhv.createDate between :beginDate and :endDate group by docRouteStatus"), 045 // @NamedQuery(name="Stats.NumActiveItemsReport", query="select count(*) from ActionItem ai"), 046 // @NamedQuery(name="Stats.NumInitiatedDocsByDocTypeReport", query="select count(*), dt.name from DocumentRouteHeaderValue drhv, DocumentType dt where drhv.createDate > :createDate and drhv.documentTypeId = dt.documentTypeId group by dt.name"), 047 // @NamedQuery(name="Stats.NumUsersReport", query="select count(distinct workflowId) from UserOptions uo"), 048 // @NamedQuery(name="Stats.NumberOfDocTypesReport", query="select count(*) from DocumentType dt where dt.currentInd = true") 049 // }) 050 public class StatsDaoJpaImpl implements StatsDAO { 051 052 @PersistenceContext 053 private EntityManager entityManager; 054 055 @Override 056 public void DocumentsRoutedReport(Stats stats, Date begDate, Date endDate) throws SQLException, LookupException { 057 Query query = entityManager.createQuery("select count(*) as count, drhv.docRouteStatus from DocumentRouteHeaderValue drhv where drhv.createDate between :beginDate and :endDate group by docRouteStatus"); 058 // Query query = entityManager.createNamedQuery("Stats.DocumentsRoutedReport"); 059 query.setParameter("beginDate", new Timestamp(begDate.getTime())); 060 query.setParameter("endDate", new Timestamp(endDate.getTime())); 061 062 @SuppressWarnings("unchecked") 063 List<Object[]> resultList = query.getResultList(); 064 065 for (Object[] result : resultList) { 066 String actionType = result[1].toString(); 067 String number = result[0].toString(); 068 if (actionType.equals(KewApiConstants.ROUTE_HEADER_CANCEL_CD)) { 069 stats.setCanceledNumber(number); 070 } else if (actionType.equals(KewApiConstants.ROUTE_HEADER_DISAPPROVED_CD)) { 071 stats.setDisapprovedNumber(number); 072 } else if (actionType.equals(KewApiConstants.ROUTE_HEADER_ENROUTE_CD)) { 073 stats.setEnrouteNumber(number); 074 } else if (actionType.equals(KewApiConstants.ROUTE_HEADER_EXCEPTION_CD)) { 075 stats.setExceptionNumber(number); 076 } else if (actionType.equals(KewApiConstants.ROUTE_HEADER_FINAL_CD)) { 077 stats.setFinalNumber(number); 078 } else if (actionType.equals(KewApiConstants.ROUTE_HEADER_INITIATED_CD)) { 079 stats.setInitiatedNumber(number); 080 } else if (actionType.equals(KewApiConstants.ROUTE_HEADER_PROCESSED_CD)) { 081 stats.setProcessedNumber(number); 082 } else if (actionType.equals(KewApiConstants.ROUTE_HEADER_SAVED_CD)) { 083 stats.setSavedNumber(number); 084 } 085 } 086 } 087 088 @Override 089 public void NumActiveItemsReport(Stats stats) throws SQLException, LookupException { 090 stats.setNumActionItems(entityManager.createQuery("select count(*) from ActionItem ai").getSingleResult().toString()); 091 // stats.setNumActionItems(entityManager.createNamedQuery("Stats.NumActiveItemsReport").getSingleResult().toString()); 092 } 093 094 @Override 095 public void NumInitiatedDocsByDocTypeReport(Stats stats) throws SQLException, LookupException { 096 Query query = entityManager.createQuery("select count(*), dt.name from DocumentRouteHeaderValue drhv, DocumentType dt where drhv.createDate > :createDate and drhv.documentTypeId = dt.documentTypeId group by dt.name"); 097 // Query query = entityManager.createNamedQuery("Stats.NumInitiatedDocsByDocTypeReport"); 098 Calendar calendar = Calendar.getInstance(); 099 calendar.add(Calendar.DAY_OF_YEAR, -29); 100 calendar.set(Calendar.HOUR_OF_DAY, 0); 101 calendar.set(Calendar.MINUTE, 0); 102 calendar.set(Calendar.SECOND, 0); 103 calendar.set(Calendar.MILLISECOND, 0); 104 query.setParameter("createDate", new Timestamp(calendar.getTime().getTime())); 105 106 @SuppressWarnings("unchecked") 107 List<Object[]> resultList = query.getResultList(); 108 109 List<KeyValue> numDocs = new ArrayList<KeyValue>(resultList.size()); 110 for (Object[] result : resultList) { 111 numDocs.add(new ConcreteKeyValue(result[1].toString(),result[0].toString())); 112 } 113 114 stats.setNumInitiatedDocsByDocType(numDocs); 115 } 116 117 @Override 118 public void NumUsersReport(Stats stats) throws SQLException, LookupException { 119 stats.setNumUsers(entityManager.createQuery("select count(distinct uo.workflowId) from UserOptions uo").getSingleResult().toString()); 120 // stats.setNumUsers(entityManager.createNamedQuery("Stats.NumUsersReport").getSingleResult().toString()); 121 } 122 123 @Override 124 public void NumberOfDocTypesReport(Stats stats) throws SQLException, LookupException { 125 stats.setNumDocTypes(entityManager.createQuery("select count(*) from DocumentType dt where dt.currentInd = true").getSingleResult().toString()); 126 // stats.setNumDocTypes(entityManager.createNamedQuery("Stats.NumberOfDocTypesReport").getSingleResult().toString()); 127 } 128 129 public EntityManager getEntityManager() { 130 return this.entityManager; 131 } 132 133 public void setEntityManager(EntityManager entityManager) { 134 this.entityManager = entityManager; 135 } 136 137 }