001/**
002 * Copyright 2011 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.push.dao;
017
018import java.util.List;
019
020import javax.persistence.EntityManager;
021import javax.persistence.NoResultException;
022import javax.persistence.PersistenceContext;
023import javax.persistence.Query;
024
025import org.kuali.mobility.push.entity.Sender;
026import org.springframework.stereotype.Repository;
027import org.springframework.transaction.annotation.Transactional;
028
029/**
030 * Implementation of the Sender Data Access Object.
031 * 
032 * @author Kuali Mobility Team (mobility.dev@kuali.org)
033 * @since 2.0.0
034 */
035@Repository
036public class SenderDaoImpl implements SenderDao{
037
038        /** A reference to a logger */
039        private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(DeviceDaoImpl.class);              
040        
041        @PersistenceContext
042    private EntityManager entityManager;
043        
044        /**
045         * Creates new instance of the <code>DeviceDaoImpl</code>.
046         */
047        public SenderDaoImpl(){}
048        
049        /*
050         * (non-Javadoc)
051         * @see org.kuali.mobility.push.dao.SenderDao#findAllSenders()
052         */
053        public List<Sender> findAllSenders(){
054        Query query = entityManager.createQuery("select s from Sender s order by s.name");
055        return query.getResultList();   
056        }
057
058        /*
059         * (non-Javadoc)
060         * @see org.kuali.mobility.push.dao.SenderDao#findAllUnhiddenSenders()
061         */
062        public List<Sender> findAllUnhiddenSenders(){
063        Query query = entityManager.createQuery("select s from Sender s where s.hidden = 0 order by s.name");
064        return query.getResultList();   
065        }
066        
067        /*
068         * (non-Javadoc)
069         * @see org.kuali.mobility.push.dao.SenderDao#findSenderById(long)
070         */
071        public Sender findSenderById(long id){
072        Query query = entityManager.createQuery("select s from Sender s where s.id = :id");
073        query.setParameter("id", id);        
074        Sender s;
075        try{
076                s = (Sender)query.getSingleResult();
077        }catch(NoResultException e){
078                LOG.info("Sender with id " + id + " was not found or was invalid.");
079                return null;
080        }
081        return s;       }
082        
083        /*
084         * (non-Javadoc)
085         * @see org.kuali.mobility.push.dao.SenderDao#findSenderByName(java.lang.String)
086         */
087        public Sender findSenderByName(String name){
088        Query query = entityManager.createQuery("select s from Sender s where s.name = :name");
089        query.setParameter("name", name);        
090        Sender s;
091        try{
092                s = (Sender)query.getSingleResult();
093        }catch(NoResultException e){
094                LOG.info("Sender with name " + name + " was not found or was invalid.");
095                return null;
096        }
097        return s;       
098        }
099
100        /*
101         * (non-Javadoc)
102         * @see org.kuali.mobility.push.dao.SenderDao#findSenderBySenderKey(java.lang.String)
103         */
104        public Sender findSenderBySenderKey(String senderKey){
105        Query query = entityManager.createQuery("select s from Sender s where s.senderKey = :senderKey");
106        query.setParameter("senderKey", senderKey);  
107        Sender s;
108        try{
109                s = (Sender)query.getSingleResult();
110        }catch(NoResultException e){
111                LOG.info("Sender with senderKey " + senderKey + " was not found or was invalid.");
112                return null;
113        }
114        return s;
115        }
116        
117        /*
118         * (non-Javadoc)
119         * @see org.kuali.mobility.push.dao.SenderDao#findSenderByShortName(java.lang.String)
120         */
121        public Sender findSenderByShortName(String shortName){
122        Query query = entityManager.createQuery("select s from Sender s where s.shortName = :shortName");
123        query.setParameter("shortName", shortName); 
124        Sender s;
125        try{
126                s = (Sender)query.getSingleResult();
127        }catch(NoResultException e){
128                LOG.info("Sender with Shortname " + shortName + " was not found or was invalid.");
129                return null;
130        }
131        return s;
132        }
133        
134        /*
135         * (non-Javadoc)
136         * @see org.kuali.mobility.push.dao.SenderDao#isValidSenderKey(java.lang.String)
137         */
138        public  boolean isValidSenderKey(String senderKey){
139        Query query = entityManager.createQuery("select s from Sender s where s.senderKey = :senderKey");
140        query.setParameter("senderKey", senderKey);        
141        try{
142                query.getSingleResult();
143        }catch(Exception e){
144                LOG.info("SenderKey " + senderKey + " was not found or was invalid.");
145                return false;
146        }
147        return true;        
148        }
149        
150        /*
151         * (non-Javadoc)
152         * @see org.kuali.mobility.push.dao.SenderDao#saveSender(org.kuali.mobility.push.entity.Sender)
153         */
154        public void saveSender(Sender sender){
155                LOG.info("SenderDaoImpl.saveSender");
156                if(sender == null){
157                return;
158        }
159                LOG.info("SenderDaoImpl.saveSender : id = " + sender.getId());
160                if(sender.getId() == null){
161                LOG.info("SenderDaoImpl.saveSender : persist");
162                entityManager.persist(sender);
163        }else{
164                LOG.info("SenderDaoImpl.saveSender : merge");
165                entityManager.merge(sender);
166        }
167        }
168        
169        /*
170         * (non-Javadoc)
171         * @see org.kuali.mobility.push.dao.SenderDao#removeSender(org.kuali.mobility.push.entity.Sender)
172         */
173        @Transactional
174        public boolean removeSender(Sender sender){
175        boolean result = true;
176        if(sender == null){
177                return false;
178        }
179        if(sender.getId() != null){
180                try{
181                        Sender s = entityManager.find(Sender.class, sender.getId());
182                        entityManager.remove(s);
183                }catch(Exception e){
184                        LOG.info("Exception Caught: " + e.getMessage());
185                        result = false;
186                }
187        }
188        return result;
189        }
190        
191        /** A reference to the <code>EntityManager</code> */ /**
192         * Returns the reference to the <code>EntityManager</code>
193         * @return The reference to the <code>EntityManager</code>
194         */
195    public EntityManager getEntityManager() {
196        return entityManager;
197    }
198
199        /**
200         * Sets the reference to the <code>EntityManager</code>
201         * @param entityManager The reference to the <code>EntityManager</code>
202         */
203    public void setEntityManager(EntityManager entityManager) {
204        this.entityManager = entityManager;
205    }
206}