Package dao

Source Code of dao.DaoUser

package dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import externaldata.theoricaltimefile.TheoricalTrainData;
import pari.Pari;
import pari.PariHistorique;
import user.Friendship;
import user.User;

public class DaoUser extends DAO<User> {

  @Override
  public List<User> find(String id) {
    Session session = HibernateUtil.openSession();
    Transaction tr = null;
    Criteria criteria = session.createCriteria(User.class);
    List<User> rep = null;
    try{
      tr = session.beginTransaction();
      criteria.add(Restrictions.eq("mail", id));
      rep = criteria.list();
      tr.commit();
    }catch (Exception e) {
      tr.rollback();
      e.printStackTrace();
    } finally {
      session.close();
    }
    return rep;
  }

  @Override
  public Boolean create(User obj) {
    if(checkUserAlreadyExist(obj.getMail())){
      Session session = HibernateUtil.openSession();
      Transaction tr = null;
      try{
        tr = session.beginTransaction();
        session.save(obj);
        //session.flush();
        tr.commit();
        return true;
      }catch (Exception e) {
        tr.rollback();
        e.printStackTrace();
      } finally {
        session.close();
      }
    }
    return false;
  }

  @Override
  public Boolean update(User obj) {
    if(!checkUserAlreadyExist(obj.getMail())){
      Session session = HibernateUtil.openSession();
      Transaction tr = null;
      try{
        tr = session.beginTransaction();
        session.update(obj);
        session.flush();
        tr.commit();
        return true;
      }catch (Exception e) {
        tr.rollback();
        e.printStackTrace();
      } finally {
        session.close();
      }
    }
    return false;
  }


  //TODO : v�rifier le comportement des delete on cascade (utile pour la gestion d'amis et les paris (� voir pour les defis)
  @Override
  public Boolean delete(User obj) {
    if(!checkUserAlreadyExist(obj.getMail())){
      Session session = HibernateUtil.openSession();
      Transaction tr = null;
      try{
        tr = session.beginTransaction();
        session.delete(obj);
        session.flush();
        tr.commit();
        return true;
      }catch (Exception e) {
        tr.rollback();
        e.printStackTrace();
      } finally {
        session.close();
      }
    }
    return false;

  }
 
  public User findWithId(int id) {
    //TODO
    return null;
  }

  public Boolean checkUserAlreadyExist(String mail){
    Session session = HibernateUtil.openSession();
    Transaction tr = null;
    Criteria criteria = session.createCriteria(User.class);
    Boolean rep = false;
    try{
      tr = session.beginTransaction();
      criteria.add(Restrictions.eq("mail", mail));
      List<User> users = criteria.list();
      rep = users.isEmpty();
      tr.commit();
    }catch (Exception e) {
      tr.rollback();
      e.printStackTrace();
    } finally {
      session.close();
    }
    return rep;
  }

  public User login(String mail, String password) {
    Session session = HibernateUtil.openSession();
    Transaction tr = null;
    Criteria criteria = session.createCriteria(User.class);
    List<User> rep = null;
    try {
      tr = session.beginTransaction();
      criteria.add(Restrictions.eq("mail", mail));
      criteria.add(Restrictions.eq("password", password));
      rep = criteria.list();
      tr.commit();
    } catch(Exception e) {
      tr.rollback();
      e.printStackTrace();
    } finally {
      session.close();
    }
    if(rep.size() != 0)
      return rep.get(0);
    return null;
  }
 
  public User refresh(User user){
    Session session = HibernateUtil.openSession();
    Transaction tr = null;
    Criteria criteria = session.createCriteria(User.class);
    List<User> rep = null;
    try {
      tr = session.beginTransaction();
      criteria.add(Restrictions.eq("mail", user.getMail()));
      /*Hibernate.initialize(user.getParis());
      Hibernate.initialize(user.getDefis());
      Hibernate.initialize(user.getFriends());*/
      rep = criteria.list();
      tr.commit();
    } catch(Exception e) {
      tr.rollback();
      e.printStackTrace();
    } finally {
      session.close();
    }
    if(rep.size() != 0)
      return rep.get(0);
    return null;
  }

  public User subscribe(String mail, String pseudo, String password) {
    User user = new User(mail, pseudo, password);
    if(create(user))
      return findOne(mail);
    return null;
  }

  public User findOne(String mail) {
    Session session = HibernateUtil.openSession();
    Transaction tr = null;
    Criteria criteria = session.createCriteria(User.class);
    List<User> rep = null;
    try{
      tr = session.beginTransaction();
      criteria.add(Restrictions.eq("mail", mail));
      /*Hibernate.initialize(user.getParis());
      Hibernate.initialize(user.getDefis());
      Hibernate.initialize(user.getFriends());*/
      rep = criteria.list();
      tr.commit();
    }catch (Exception e) {
      tr.rollback();
      e.printStackTrace();
    } finally {
      session.close();
    }

    System.out.println("taille de rep " + rep.size());
    if(rep.size() != 0){
      System.out.println("yen a un");
      return rep.get(0);
    }
    return null;
  }

  public Boolean addBetToUser(Pari pari, String mail){
    User user = findOne(mail);
    if(user == null){
      return false;
    }
    if(user.getPoints() - pari.getMontant() >= 0){
      Session session = HibernateUtil.openSession();
      Transaction tr = null;
      try{
        tr = session.beginTransaction();
       
        /*Hibernate.initialize(user.getParis());*/
       
        pari.setUser(user);
        user.addPari(pari);
        user.setNbParisTotal(user.getNbParisTotal() + 1);
        user.setPoints(user.getPoints() - pari.getMontant());
        session.update(user);
        tr.commit();
        return true;
      }catch (Exception e) {
        tr.rollback();
        e.printStackTrace();
      } finally {
        session.close();
      }
      return false;
    }else{
      return false;
    }
  }


  public Boolean delBetToUser(Pari pari, String mail){
    User user = findOne(mail);
    if(user == null){
      return false;
    }
    Session session = HibernateUtil.openSession();
    Transaction tr = null;
    try{
      tr = session.beginTransaction();
      // ajout dans les pariHistorique avant de supprimer le pari
      PariHistorique pariHisto = new PariHistorique(pari, user.getId_user(), pari.getId_train().getStationDUA(),
          pari.getId_train().getNum_TheoricalTrainData());

      session.save(pariHisto);
      // supression du pari chez le user mais avant je check si je le credite ou pas d'un montant
      if(pari.getEtatPari() == 1){
        user.setNbParisJustes(user.getNbParisJustes() +1);
        user.setScore(user.getScore() + pari.getGainPossible());
        user.setPoints(user.getPoints() + pari.getGainPossible());

      }
      user.dellPari(pari);
      session.update(user);

      tr.commit();
      return true;
    }catch (Exception e) {
      tr.rollback();
      e.printStackTrace();
    } finally {
      session.close();
    }
    return false;
  }

  public List<User> getTopTenScore(){
    Session session = HibernateUtil.openSession();
    Transaction tr = null;
    Criteria criteria = session.createCriteria(User.class);
    criteria.addOrder(Order.desc("score"));
    criteria.setMaxResults(10);
    List<User> rep = null;
    try{
      tr = session.beginTransaction();
      rep = criteria.list();
      tr.commit();
    }catch (Exception e) {
      tr.rollback();
      e.printStackTrace();
    } finally {
      session.close();
    }
    return rep;

  }

  public List<User> getTopTenRatio(){
    Session session = HibernateUtil.openSession();
    Transaction tr = null;
    Criteria criteria = session.createCriteria(User.class);
    criteria.addOrder(Order.desc("ratio"));
    criteria.setMaxResults(10);
    List<User> rep = null;
    try{
      tr = session.beginTransaction();
      rep = criteria.list();
      tr.commit();
    }catch (Exception e) {
      tr.rollback();
      e.printStackTrace();
    } finally {
      session.close();
    }
    return rep;
  }

  //valide les pari et supprime le train theorical
  public boolean validBetOnTheorical(TheoricalTrainData train){
    Session session = HibernateUtil.openSession();
    Transaction tr = null;
    Criteria criteria = session.createCriteria(Pari.class);
    criteria.add(Restrictions.eq("id_train", train));
    List<Pari> rep = null;
    try{
      tr = session.beginTransaction();
      rep = criteria.list();
      tr.commit();
    }catch (Exception e) {
      tr.rollback();
      e.printStackTrace();
    } finally {
      session.close();
    }
    if(rep.size() != 0){
      for(int i = 0 ; i < rep.size() ; i++){
        delBetToUser(rep.get(i), rep.get(i).getUser().getMail());
      }
    }
    Session session2 = HibernateUtil.openSession();
    Transaction tr2 = null;
    try{
      tr2 = session2.beginTransaction();
      session2.delete(train);
      tr.commit();
    }catch (Exception e) {
      tr.rollback();
      e.printStackTrace();
    } finally {
      session.close();
    }
    return true;
  }
 
  public List<User> getFriends(String mail){
    User user = findOne(mail);
    List<User> rep = new ArrayList<User>();
    for(int i = 0; i < user.friendship.size(); i++){
      if(user.friendship.get(i).getOwner().equals(user)){
        rep.add(user.friendship.get(i).getTarget());
      }else{
        rep.add(user.friendship.get(i).getOwner());
      }
    }
    return null;
  }
 
  public Boolean newFriend(String mail_owner, String mail_target){
   
    User target = findOne(mail_target);
   
    Session session = HibernateUtil.openSession();
    Transaction tr = null;;
    try{
      tr = session.beginTransaction();
      User owner = findOne(mail_owner);
      /*Hibernate.initialize(owner.getFriends());*/
      owner.addFriend(new Friendship(owner, target, 0));
      session.update(owner);
      tr.commit();
    }catch (Exception e) {
      tr.rollback();
      e.printStackTrace();
    } finally {
      session.close();
    }
    return true;
  }
}
TOP

Related Classes of dao.DaoUser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.