Java tutorial
/** * Copyright (c) 2008-2015 Regents of the University of California (Regents). * Created by WISE, Graduate School of Education, University of California, Berkeley. * * This software is distributed under the GNU General Public License, v3, * or (at your option) any later version. * * Permission is hereby granted, without written agreement and without license * or royalty fees, to use, copy, modify, and distribute this software and its * documentation for any purpose, provided that the above copyright notice and * the following two paragraphs appear in all copies of this software. * * REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED * HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. * * IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF * REGENTS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package org.wise.portal.dao.peerreview.impl; import java.util.List; import org.hibernate.Session; import org.hibernate.criterion.Restrictions; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import org.wise.portal.dao.ObjectNotFoundException; import org.wise.portal.dao.impl.AbstractHibernateDao; import org.wise.portal.dao.peerreview.PeerReviewWorkDao; import org.wise.vle.domain.annotation.Annotation; import org.wise.vle.domain.node.Node; import org.wise.vle.domain.peerreview.PeerReviewWork; import org.wise.vle.domain.user.UserInfo; import org.wise.vle.domain.work.StepWork; @Repository public class HibernatePeerReviewWorkDao extends AbstractHibernateDao<PeerReviewWork> implements PeerReviewWorkDao<PeerReviewWork> { @Override protected String getFindAllQuery() { return null; } @Override protected Class<? extends PeerReviewWork> getDataObjectClass() { return null; } public PeerReviewWork getPeerReviewWorkById(Long id) { PeerReviewWork peerReviewWork = null; try { peerReviewWork = getById(id); } catch (ObjectNotFoundException e) { e.printStackTrace(); } return peerReviewWork; } @Transactional(readOnly = false) public void savePeerReviewWork(PeerReviewWork peerReviewWork) { save(peerReviewWork); } @Transactional(readOnly = true) public List<PeerReviewWork> getPeerReviewWorkByRun(Long runId) { Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession(); List<PeerReviewWork> result = session.createCriteria(PeerReviewWork.class) .add(Restrictions.eq("runId", runId)).list(); return result; } @Transactional(readOnly = true) public List<PeerReviewWork> getPeerReviewWorkByRunPeriodNode(Long runId, Long periodId, Node node) { Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession(); List<PeerReviewWork> result = session.createCriteria(PeerReviewWork.class) .add(Restrictions.eq("runId", runId)).add(Restrictions.eq("periodId", periodId)) .add(Restrictions.eq("node", node)).add(Restrictions.isNotNull("stepWork")).list(); return result; } @Transactional(readOnly = true) public List<PeerReviewWork> getUnassignedPeerReviewWorkList(Long runId, Long periodId, Node node) { Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession(); List<PeerReviewWork> result = session.createCriteria(PeerReviewWork.class) .add(Restrictions.eq("runId", runId)).add(Restrictions.eq("periodId", periodId)) .add(Restrictions.eq("node", node)).add(Restrictions.isNull("reviewerUserInfo")) .add(Restrictions.isNotNull("stepWork")).list(); return result; } @Transactional(readOnly = true) public PeerReviewWork getPeerReviewWorkByRunPeriodNodeStepWorkReviewer(Long runId, Long periodId, Node node, StepWork stepWork, UserInfo reviewer) { Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession(); List<PeerReviewWork> result = session.createCriteria(PeerReviewWork.class) .add(Restrictions.eq("runId", runId)).add(Restrictions.eq("periodId", periodId)) .add(Restrictions.eq("node", node)).add(Restrictions.eq("stepWork", stepWork)) .add(Restrictions.eq("reviewerUserInfo", reviewer)).add(Restrictions.isNotNull("stepWork")).list(); PeerReviewWork peerReviewWork = null; if (result.size() > 0) { peerReviewWork = result.get(0); } return peerReviewWork; } @Transactional public PeerReviewWork setPeerReviewAnnotation(Long runId, Long periodId, Node node, StepWork stepWork, UserInfo reviewer, Annotation annotation) { PeerReviewWork peerReviewWork = getPeerReviewWorkByRunPeriodNodeStepWorkReviewer(runId, periodId, node, stepWork, reviewer); peerReviewWork.setAnnotation(annotation); savePeerReviewWork(peerReviewWork); return peerReviewWork; } @Transactional(readOnly = true) public PeerReviewWork getPeerReviewWorkByRunPeriodNodeReviewerUserInfo(Long runId, Long periodId, Node node, UserInfo reviewerUserInfo) { Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession(); List<PeerReviewWork> result = session.createCriteria(PeerReviewWork.class) .add(Restrictions.eq("runId", runId)).add(Restrictions.eq("periodId", periodId)) .add(Restrictions.eq("node", node)).add(Restrictions.eq("reviewerUserInfo", reviewerUserInfo)) .list(); PeerReviewWork peerReviewWork = null; if (result.size() > 0) { peerReviewWork = result.get(0); } return peerReviewWork; } @Transactional(readOnly = true) public PeerReviewWork getPeerReviewWorkByRunPeriodNodeWorkerUserInfo(Long runId, Long periodId, Node node, UserInfo worker) { Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession(); List<PeerReviewWork> result = session.createCriteria(PeerReviewWork.class) .add(Restrictions.eq("runId", runId)).add(Restrictions.eq("periodId", periodId)) .add(Restrictions.eq("node", node)).add(Restrictions.eq("userInfo", worker)).list(); PeerReviewWork peerReviewWork = null; if (result.size() > 0) { peerReviewWork = result.get(0); } return peerReviewWork; } @Transactional(readOnly = true) public PeerReviewWork getPeerReviewWorkByRunPeriodNodeWorkerUserInfoReviewerUserInfo(Long runId, Long periodId, Node node, UserInfo workerUserInfo, UserInfo reviewerUserInfo) { Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession(); List<PeerReviewWork> result = session.createCriteria(PeerReviewWork.class) .add(Restrictions.eq("runId", runId)).add(Restrictions.eq("periodId", periodId)) .add(Restrictions.eq("node", node)).add(Restrictions.eq("userInfo", workerUserInfo)) .add(Restrictions.eq("reviewerUserInfo", reviewerUserInfo)).list(); PeerReviewWork peerReviewWork = null; if (result.size() > 0) { peerReviewWork = result.get(0); } return peerReviewWork; } /** * Set the author as the reviewer of the PeerReviewWork * @param peerReviewWork the PeerReviewWork to set */ public void setAuthorAsReviewer(PeerReviewWork peerReviewWork) { //get or create the author UserInfo UserInfo authorUserInfo = getAuthorUserInfo(); //set the author UserInfo as the reviewer peerReviewWork.setReviewerUserInfo(authorUserInfo); savePeerReviewWork(peerReviewWork); } /** * Checks if the author is set as the reviewer for the given PeerReviewWork * @param peerReviewWork the work to check the reviewer for * @return whether the author is set as the reviewer */ public boolean isAuthorSetAsReviewer(PeerReviewWork peerReviewWork) { UserInfo reviewerUserInfo = peerReviewWork.getReviewerUserInfo(); if (reviewerUserInfo == null) { //there is no reviewer set yet return false; } else if (reviewerUserInfo.getWorkgroupId().equals(PeerReviewWork.getAuthorWorkgroupId())) { //the author is set as the reviewer return true; } else { //the author is not set as the reviewer return false; } } /** * Get the author UserInfo which has a workgroupId of -2 * @return the author UserInfo */ @Transactional(readOnly = true) public UserInfo getAuthorUserInfo() { Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession(); UserInfo authorUserInfo = (UserInfo) session.createCriteria(UserInfo.class) .add(Restrictions.eq("workgroupId", PeerReviewWork.getAuthorWorkgroupId())).uniqueResult(); return authorUserInfo; } public PeerReviewWork getOrCreateAuthorReviewWork(Long runId, Long periodId, Node node, UserInfo reviewerUserInfo) { UserInfo authorUserInfo = getAuthorUserInfo(); PeerReviewWork authorReviewWork = getPeerReviewWorkByRunPeriodNodeWorkerUserInfoReviewerUserInfo(runId, periodId, node, authorUserInfo, reviewerUserInfo); if (authorReviewWork == null) { authorReviewWork = new PeerReviewWork(); authorReviewWork.setNode(node); authorReviewWork.setRunId(runId); authorReviewWork.setUserInfo(getAuthorUserInfo()); authorReviewWork.setReviewerUserInfo(reviewerUserInfo); authorReviewWork.setPeriodId(periodId); savePeerReviewWork(authorReviewWork); } return authorReviewWork; } public PeerReviewWork setUserAsAuthorReviewer(Long runId, Long periodId, Node node, UserInfo userInfo) { return getOrCreateAuthorReviewWork(runId, periodId, node, userInfo); } public void matchUserToAuthor(Long runId, Long periodId, Node node, UserInfo userInfo, PeerReviewWork userWork) { setUserAsAuthorReviewer(runId, periodId, node, userInfo); setAuthorAsReviewer(userWork); } public boolean isUserReviewingAuthor(Long runId, Long periodId, Node node, UserInfo userInfo) { UserInfo authorUserInfo = getAuthorUserInfo(); PeerReviewWork authorWork = getPeerReviewWorkByRunPeriodNodeWorkerUserInfoReviewerUserInfo(runId, periodId, node, authorUserInfo, userInfo); if (authorWork == null) { return false; } else { return true; } } }