Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package db; import beans.PageOfDataGrid; import beans.PageOfDataGridDescriptions; import db_entities.HibernateUtil; import db_entities.Invitations; import db_entitiesExt.DescribedObjExt; import db_entitiesExt.DescriptionExt; import db_entitiesExt.GradeExt; import db_entitiesExt.UserExt; import java.io.Serializable; import java.util.Date; import java.util.List; import java.util.UUID; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.hibernate.exception.ConstraintViolationException; /** * * @author andrusha */ public class DBConnector implements Serializable { private static SessionFactory sessionFactory; //private List<DescribedObjExt> listOfDescribedObj; private PageOfDataGrid pageOfDataGrid; private DetachedCriteria dCriteria; private DetachedCriteria dCriteriaCount; private DetachedCriteria dDescriptionCriteria; private DetachedCriteria dDescriptionCriteriaCount; private PageOfDataGridDescriptions pageOfDataGridDescriptions; private UserExt userExt; public DBConnector() { sessionFactory = HibernateUtil.getSessionFactory(); createDCriteria(); createDDescriptionCriteria(); } public void setPageOfDataGrid(PageOfDataGrid pageOfDataGrid) { this.pageOfDataGrid = pageOfDataGrid; populatePageOfDataGrid(); } private Session getSession() { return sessionFactory.getCurrentSession(); } private void createDCriteria() { dCriteria = DetachedCriteria.forClass(DescribedObjExt.class); dCriteriaCount = DetachedCriteria.forClass(DescribedObjExt.class); // ? ? private void makeAliases() } public void populatePageOfDataGrid() { runDCriteriaCount(); runDCriteria(); } private void runDCriteriaCount() { Criteria criteria = dCriteriaCount.getExecutableCriteria(getSession()); Long total = (Long) criteria.setProjection(Projections.rowCount()).uniqueResult(); pageOfDataGrid.setTotalDescribedObjCount(total); } private void runDCriteria() { Criteria criteria = dCriteria.addOrder(Order.asc("this.name")).getExecutableCriteria(getSession()); //criteria.setProjection(#).setResultTransformer(Transformers.aliasToBean(DescribedObjExt.class)); List<DescribedObjExt> list = criteria.setFirstResult(pageOfDataGrid.getFrom()) .setMaxResults(pageOfDataGrid.getTo()).list(); pageOfDataGrid.setList(list); } private void createDDescriptionCriteria() { dDescriptionCriteria = DetachedCriteria.forClass(DescriptionExt.class); dDescriptionCriteriaCount = DetachedCriteria.forClass(DescriptionExt.class); } public void populatePageOfDataGridDescription() { runDDescriptionCriteriaCount(); runDDescriptionCriteria(); } private void runDDescriptionCriteriaCount() { Criteria criteria = dDescriptionCriteriaCount.getExecutableCriteria(getSession()); Long total = (Long) criteria.setProjection(Projections.rowCount()).uniqueResult(); pageOfDataGridDescriptions.setTotalDescriptionCount(total); } private void runDDescriptionCriteria() { Criteria criteria = dDescriptionCriteria.addOrder(Order.desc("this.dateOfDescription")) .getExecutableCriteria(getSession()); List<DescriptionExt> list = criteria.setFirstResult(pageOfDataGridDescriptions.getFrom()) .setMaxResults(pageOfDataGridDescriptions.getTo()).list(); pageOfDataGridDescriptions.setList(list); } public void getLAllDescribedObjs() { createDCriteria(); populatePageOfDataGrid(); } public void searchDescObjByName(String name) { createDCriteria(); dCriteria.add(Restrictions.ilike("this.name", name, MatchMode.ANYWHERE)); dCriteriaCount.add(Restrictions.ilike("this.name", name, MatchMode.ANYWHERE)); populatePageOfDataGrid(); } public void addDescrObj(DescribedObjExt describedObjExt) { describedObjExt.setAmountOfGrade(0); getSession().save(describedObjExt); } public void deleteDescrObj(DescribedObjExt describedObjExt) { if (describedObjExt.getAmountOfGrade() > 0) { Criteria c = getSession().createCriteria(GradeExt.class); c.add(Restrictions.eq("this.idUser", userExt.getId())) .add(Restrictions.eq("this.idDescObj", describedObjExt.getId())); List<GradeExt> list = c.list(); for (GradeExt grade : list) { getSession().delete(grade); } } if (pageOfDataGridDescriptions.getTotalDescriptionCount() > 0) { Criteria b = getSession().createCriteria(DescriptionExt.class); b.add(Restrictions.eq("this.idObject", describedObjExt.getId())); List<DescriptionExt> list = b.list(); for (DescriptionExt description : list) { getSession().delete(description); } } getSession().delete(describedObjExt); } public void editDescrObj(DescribedObjExt describedObjExt) { getSession().update(describedObjExt); } public void vote() { Criteria c = getSession().createCriteria(GradeExt.class); c.add(Restrictions.eq("this.idUser", userExt.getId())) .add(Restrictions.eq("this.idDescObj", pageOfDataGrid.getSelectedDescribedObj().getId())); List tr = c.list(); if (!tr.isEmpty()) { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage( "You can't rate it, you have already done it before. One person - one grade.")); return; } GradeExt grade = new GradeExt(); grade.setIdDescObj(pageOfDataGrid.getSelectedDescribedObj().getId()); grade.setIdUser(userExt.getId()); grade.setValue(pageOfDataGrid.getSelectedDescribedObj().getGrade()); getSession().save(grade); updateDescObjGrade(); } private void updateDescObjGrade() { Criteria criteria = getSession().createCriteria(GradeExt.class); criteria.setProjection(Projections.avg("this.value")) .add(Restrictions.eq("this.idDescObj", pageOfDataGrid.getSelectedDescribedObj().getId())); int grade = Double.valueOf(criteria.uniqueResult().toString()).intValue(); pageOfDataGrid.getSelectedDescribedObj().setGrade(grade); pageOfDataGrid.getSelectedDescribedObj() .setAmountOfGrade(pageOfDataGrid.getSelectedDescribedObj().getAmountOfGrade() + 1); getSession().update(pageOfDataGrid.getSelectedDescribedObj()); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("You have rated")); /* Query query = getSession().createQuery("select new map(round(avg(value)) as rating, count(value) as gradeCount) from GradeExt g where g.idDescObj.id=:id"); query.setParameter("id", describedObjExt.getId()); List list = query.list(); HashMap<String, Object> map = (HashMap<String, Object>) list.get(0); long gradeCount = Long.valueOf(map.get("gradeCount").toString()); int grade = Float.valueOf(map.get("rating").toString()).intValue(); query = getSession().createQuery("update DescribedObjExt set grade = :grade " + " where id = :id"); query.setParameter("grade", grade); query.setParameter("id", describedObjExt.getId()); int result = query.executeUpdate();*/ } public void setPageOfDataGridDescriptions(PageOfDataGridDescriptions pageOfDataGridDescriptions) { this.pageOfDataGridDescriptions = pageOfDataGridDescriptions; } public void searchDescriptionById(long id) { createDDescriptionCriteria(); dDescriptionCriteria.add(Restrictions.eq("this.idObject", id)); dDescriptionCriteriaCount.add(Restrictions.eq("this.idObject", id)); populatePageOfDataGridDescription(); } public void addCommend(String currentText) { DescriptionExt descriptionExt = new DescriptionExt(); descriptionExt.setDescription(currentText); descriptionExt.setDateOfDescription(new Date()); descriptionExt.setIdObject(pageOfDataGrid.getSelectedDescribedObj().getId()); descriptionExt.setUser(userExt); getSession().save(descriptionExt); } public void deleteCommend(DescriptionExt commend) { getSession().delete(commend); } public UserExt login(String username, String password) { getSession().beginTransaction(); Criteria c = getSession().createCriteria(UserExt.class); c.add(Restrictions.eq("username", username)); c.add(Restrictions.like("password", password)); List<UserExt> list = c.list(); getSession().getTransaction().commit(); if (!list.isEmpty()) { userExt = list.get(0); getSession().close(); return userExt; } getSession().close(); return null; } public void signUp(String username, String password, String key) { getSession().beginTransaction(); Criteria c = getSession().createCriteria(Invitations.class); c.add(Restrictions.eq("keyStr", key)); List<Invitations> keys = c.list(); if (!keys.isEmpty()) { UserExt u = new UserExt(); u.setUsername(username); u.setPassword(password); u.setRole(keys.get(0).getLvlPermission()); try { getSession().save(u); //getSession().getTransaction().commit(); //getSession().beginTransaction(); getSession().delete(keys.get(0)); getSession().getTransaction().commit(); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Congratulations! Now you can log in!")); } catch (ConstraintViolationException ex) { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("This username is already exists, try again.")); } finally { getSession().close(); } } else { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Key is not valid!")); } } public String generateKye() { UUID key = UUID.randomUUID(); Invitations invite = new Invitations(); invite.setKeyStr(key.toString()); invite.setLvlPermission(9); getSession().save(invite); return key.toString(); } }