/** * Mad-Advertisement * Copyright (C) 2011 Thorsten Marx <thmarx@gmx.net> * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see <http://www.gnu.org/licenses/>. */ package net.mad.ads.base.api.service.site; import java.util.Collection; import java.util.Date; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Transaction; import org.hibernate.Session; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import net.mad.ads.base.api.exception.ServiceException; import net.mad.ads.base.api.model.ResultList; import net.mad.ads.base.api.model.site.Place; import net.mad.ads.base.api.model.site.Site; import net.mad.ads.base.api.model.user.User; import net.mad.ads.base.api.model.user.impl.AdminUser; import net.mad.ads.base.api.service.HibernateService; public class HibernateSiteService extends HibernateService implements SiteService { @Override public void add(Site obj) throws ServiceException { Session session = null; try { session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); obj.setCreated(new Date()); session.save(obj); tx.commit(); } catch (Exception e) { throw new ServiceException(e.getMessage()); } finally { if (session != null) { session.close(); } } } @Override public void update(Site obj) throws ServiceException { Session session = null; try { session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); Site temp = findByPrimaryKey(obj.getId()); temp.setDescription(obj.getDescription()); temp.setName(obj.getName()); temp.setUrl(obj.getUrl()); session.update(temp); tx.commit(); } catch (Exception e) { throw new ServiceException(e.getMessage()); } finally { if (session != null) { session.close(); } } } @Override public void delete(Site obj) throws ServiceException { Session session = null; try { session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); Site temp = findByPrimaryKey(obj.getId()); session.delete(temp); tx.commit(); } catch (Exception e) { throw new ServiceException(e.getMessage()); } finally { if (session != null) { session.close(); } } } @Override public Site findByPrimaryKey(long id) throws ServiceException { Session session = null; try { session = sessionFactory.openSession(); Criteria crit = session.createCriteria(Site.class).add(Restrictions.eq("id", id)); crit.setMaxResults(1); List<Site> sites = crit.list(); if (sites.size() == 1) { return sites.get(0); } return null; } catch (Exception e) { throw new ServiceException(e.getMessage()); } finally { if (session != null) { session.close(); } } } @Override public List<Site> findAll() throws ServiceException { return findAll(0, 0); } @Override public List<Site> findAll(int page, int perPage) throws ServiceException { Session session = null; try { session = sessionFactory.openSession(); Criteria crit = session.createCriteria(Site.class); if (page > 0 && perPage > 0) { int offset = 0; if (page > 1) { offset = (page - 1) * perPage; } crit.setFirstResult(offset); crit.setMaxResults(perPage); } ResultList<Site> sites = new ResultList<Site>(); sites.addAll(crit.list()); sites.setCount(crit.list().size()); sites.setPage(page); sites.setPerPage(perPage); return sites; } catch (Exception e) { throw new ServiceException(e.getMessage()); } finally { if (session != null) { session.close(); } } } @Override public long count() throws ServiceException { Session session = null; try { session = sessionFactory.openSession(); Criteria crit = session.createCriteria(Site.class); crit.setProjection(Projections.rowCount()); List<Long> result = crit.list(); if (!result.isEmpty()) { return result.get(0); } return 0; } catch (Exception e) { throw new ServiceException(e.getMessage()); } finally { if (session != null) { session.close(); } } } }