001/** 002 * Copyright 2011-2013 The Kuali Foundation Licensed under the 003 * Educational Community License, Version 2.0 (the "License"); you may 004 * not use this file except in compliance with the License. You may 005 * obtain a copy of the License at 006 * 007 * http://www.osedu.org/licenses/ECL-2.0 008 * 009 * Unless required by applicable law or agreed to in writing, 010 * software distributed under the License is distributed on an "AS IS" 011 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 012 * or implied. See the License for the specific language governing 013 * permissions and limitations under the License. 014 */ 015 016package org.kuali.mobility.emergencyinfo.dao; 017 018import java.util.ArrayList; 019import java.util.List; 020 021import javax.persistence.EntityManager; 022import javax.persistence.NoResultException; 023import javax.persistence.OptimisticLockException; 024import javax.persistence.PersistenceContext; 025import javax.persistence.Query; 026 027import org.apache.log4j.Logger; 028import org.kuali.mobility.emergencyinfo.entity.EmergencyInfo; 029 030import org.kuali.mobility.emergencyinfo.entity.EmergencyInfoJPAImpl; 031import org.springframework.stereotype.Repository; 032import org.springframework.transaction.annotation.Transactional; 033 034@Repository 035public class EmergencyInfoDaoImpl implements EmergencyInfoDao { 036 037 private static final Logger LOG = Logger.getLogger(EmergencyInfoDaoImpl.class); 038 039 @PersistenceContext 040 private EntityManager entityManager; 041 042 @SuppressWarnings("unchecked") 043 public List<EmergencyInfoJPAImpl> findAllEmergencyInfo() { 044 List<EmergencyInfoJPAImpl> contacts = new ArrayList<EmergencyInfoJPAImpl>(); 045 Query query = entityManager.createNamedQuery("EmergencyInfo.findAll"); 046 try { 047 contacts = query.getResultList(); 048 } catch (NoResultException e) { 049 LOG.error("No results found in Emergency Info table.", e); 050 } 051 return contacts; 052 } 053 054 public EmergencyInfo findEmergencyInfoById(Long id) { 055 EmergencyInfo contact = null; 056 Query query = entityManager.createNamedQuery("EmergencyInfo.findById"); 057 query.setParameter("id", id); 058 try { 059 contact = (EmergencyInfoJPAImpl) query.getSingleResult(); 060 } catch (NoResultException e) { 061 LOG.error("No emergency info found for id=" + id, e); 062 } 063 return contact; 064 } 065 066 @SuppressWarnings("unchecked") 067 public List<? extends EmergencyInfo> findAllEmergencyInfoByCampus(String campus) { 068 List<? extends EmergencyInfo> contacts = new ArrayList<EmergencyInfoJPAImpl>(); 069 Query query = entityManager.createNamedQuery("EmergencyInfo.findByCampus"); 070 query.setParameter("campus", campus); 071 try { 072 contacts = query.getResultList(); 073 } catch (NoResultException e) { 074 LOG.error("No results found in Emergency Info table for campus=" + campus, e); 075 } 076 return contacts; 077 } 078 079 @Transactional 080 public Long saveEmergencyInfo(EmergencyInfo emergencyInfo) { 081 Long id = null; 082 if (emergencyInfo != null) { 083 LOG.debug("BEGIN: Save emergency info for " + emergencyInfo.getTitle()); 084 try { 085 if (emergencyInfo.getEmergencyInfoId() == null) { 086 entityManager.persist(emergencyInfo); 087 } else { 088 entityManager.merge(emergencyInfo); 089 } 090 id = emergencyInfo.getEmergencyInfoId(); 091 } catch (OptimisticLockException oe) { 092 LOG.error("Unable to save emergency info for " + emergencyInfo.getTitle(), oe); 093 id = null; 094 } 095 LOG.debug("END: Save emergency info for " + emergencyInfo.getTitle()); 096 } 097 return id; 098 } 099 100 @Transactional 101 public void deleteEmergencyInfoById(Long id) { 102 if (null != id) { 103 Query query = entityManager.createNamedQuery("EmergencyInfo.deleteById"); 104 query.setParameter("id", id); 105 query.executeUpdate(); 106 } 107 } 108 109 @Transactional 110 public void reorder(Long id, boolean up) { 111 List<? extends EmergencyInfo> list = findAllEmergencyInfo(); 112 EmergencyInfo last = null; 113 boolean flag = false; 114 int index = -1; 115 int count = list.get(0).getOrder(); 116 for (EmergencyInfo emergencyInfo : list) { 117 index++; 118 if (emergencyInfo.getEmergencyInfoId().equals(id)) { 119 if (up && last != null) { 120 swap(last, emergencyInfo); 121 count = last.getOrder() + 1; 122 continue; 123 } else if (!up) { 124 EmergencyInfo next = list.get(index + 1); 125 swap(emergencyInfo, next); 126 count = next.getOrder() + 1; 127 continue; 128 } 129 flag = true; 130 } 131 if (flag) { 132 emergencyInfo.setOrder(count); 133 entityManager.merge(emergencyInfo); 134 } 135 count++; 136 last = emergencyInfo; 137 } 138 } 139 140 @Transactional 141 private void swap(EmergencyInfo one, EmergencyInfo two) { 142 int temp = one.getOrder(); 143 one.setOrder(two.getOrder()); 144 two.setOrder(temp); 145 entityManager.merge(one); 146 entityManager.merge(two); 147 } 148 149 public EntityManager getEntityManager() { 150 return entityManager; 151 } 152 153 public void setEntityManager(EntityManager entityManager) { 154 this.entityManager = entityManager; 155 } 156 157}