Example usage for org.hibernate LockMode UPGRADE

List of usage examples for org.hibernate LockMode UPGRADE

Introduction

In this page you can find the example usage for org.hibernate LockMode UPGRADE.

Prototype

LockMode UPGRADE

To view the source code for org.hibernate LockMode UPGRADE.

Click Source Link

Document

An upgrade lock.

Usage

From source file:de.tuclausthal.submissioninterface.persistence.dao.impl.PointsDAO.java

License:Open Source License

@Override
public Points createPoints(Map<String, String[]> pointGiven, Submission submission, Participation participation,
        String publicComment, String internalComment, PointStatus pointStatus, Integer duplicate) {
    Session session = getSession();//  w  w w . j av a 2  s. c  om

    session.lock(submission, LockMode.UPGRADE);
    session.lock(submission.getTask(), LockMode.UPGRADE);

    boolean changed = false;

    // implement hacky solution since this will be a short list ;)
    PointGivenDAOIf pointGivenDAO = DAOFactory.PointGivenDAOIf(session);
    Iterator<PointGiven> pointsGivenIterator = pointGivenDAO.getPointsGivenOfSubmission(submission).iterator();
    PointGiven lastPointGiven = null;
    if (pointsGivenIterator.hasNext()) {
        lastPointGiven = pointsGivenIterator.next();
    }
    int numPoints = 0;
    for (PointCategory category : submission.getTask().getPointCategories()) {
        while (lastPointGiven != null
                && category.getPointcatid() > lastPointGiven.getCategory().getPointcatid()) {
            if (pointsGivenIterator.hasNext()) {
                lastPointGiven = pointsGivenIterator.next();
            } else {
                lastPointGiven = null;
                break;
            }
        }
        int issuedPoints = 0;
        if (pointGiven.get("point_" + category.getPointcatid()) != null) {
            issuedPoints = Util.convertToPoints(pointGiven.get("point_" + category.getPointcatid())[0],
                    submission.getTask().getMinPointStep());
        }
        if (issuedPoints > category.getPoints()) {
            issuedPoints = category.getPoints();
        }
        if (lastPointGiven != null
                && category.getPointcatid() == lastPointGiven.getCategory().getPointcatid()) {
            if (issuedPoints == 0) {
                storeInHistory(submission, category.getDescription(),
                        Util.showPoints(lastPointGiven.getPoints()), "0", participation);
                pointGivenDAO.revokePointGiven(lastPointGiven);
                changed = true;
            } else {
                if (issuedPoints != lastPointGiven.getPoints()) {
                    storeInHistory(submission, category.getDescription(),
                            Util.showPoints(lastPointGiven.getPoints()), Util.showPoints(issuedPoints),
                            participation);
                    pointGivenDAO.revokePointGiven(lastPointGiven);
                    pointGivenDAO.givePoint(issuedPoints, submission, category);
                    changed = true;
                }
                numPoints += issuedPoints;
            }
        } else {
            if (issuedPoints > 0) {
                numPoints += issuedPoints;
                storeInHistory(submission, category.getDescription(), "0", Util.showPoints(issuedPoints),
                        participation);
                pointGivenDAO.givePoint(issuedPoints, submission, category);
                changed = true;
            }
        }
    }

    Points oldPoints = submission.getPoints();
    Points points = new Points();
    points.setPoints(numPoints);
    points.setPointStatus(pointStatus);
    points.setDuplicate(duplicate);
    points.setIssuedBy(participation);
    submission.setPoints(points);
    points.setPublicComment(publicComment);
    points.setInternalComment(internalComment);
    session.save(submission);

    // TODO: Attention: see @MarkApproved.java
    if (oldPoints != null) {
        if (!oldPoints.getPointStatus().equals(points.getPointStatus())) {
            storeInHistory(submission, "status", PointStatus.values()[oldPoints.getPointStatus()].toString(),
                    PointStatus.values()[points.getPointStatus()].toString(), participation);
            if (!((oldPoints.getPointStatus() == PointStatus.NICHT_ABGENOMMEN.ordinal()
                    && points.getPointStatus() == PointStatus.ABGENOMMEN.ordinal())
                    || (oldPoints.getPointStatus() == PointStatus.NICHT_ABGENOMMEN.ordinal()
                            && points.getPointStatus() == PointStatus.ABGENOMMEN_FAILED.ordinal()))) {
                changed = true;
            }
        }
        if (oldPoints.getDuplicate() != null || points.getDuplicate() != null) {
            if (oldPoints.getDuplicate() == null) {
                storeInHistory(submission, "duplicate", "", points.getDuplicate() + "", participation);
                changed = true;
            } else if (points.getDuplicate() == null) {
                storeInHistory(submission, "duplicate", oldPoints.getDuplicate() + "", "", participation);
                changed = true;
            } else if (!oldPoints.getDuplicate().equals(points.getDuplicate())) {
                storeInHistory(submission, "duplicate", oldPoints.getDuplicate() + "",
                        points.getDuplicate() + "", participation);
                changed = true;
            }
        }
        if (!oldPoints.getPoints().equals(points.getPoints())) {
            storeInHistory(submission, "points", Util.showPoints(oldPoints.getPoints()),
                    Util.showPoints(points.getPoints()), participation);
            changed = true;
        }
        if (oldPoints.getInternalComment() != null
                && !oldPoints.getInternalComment().equals(points.getInternalComment())) {
            storeInHistory(submission, "internalComment", oldPoints.getInternalComment(),
                    points.getInternalComment(), participation);
            changed = true;
        }
        if (oldPoints.getPublicComment() != null
                && !oldPoints.getPublicComment().equals(points.getPublicComment())) {
            storeInHistory(submission, "publicComment", oldPoints.getPublicComment(), points.getPublicComment(),
                    participation);
            changed = true;
        }
        if (changed && oldPoints.getIssuedBy().getUser().getUid() != participation.getUser().getUid()) {
            // HACK hardcoded URL
            MailSender.sendMail(oldPoints.getIssuedBy().getUser().getFullEmail(), "Mark-Change Notification",
                    "Hallo,\n\n" + participation.getUser().getFullName()
                            + " hat Deine Bewertung von <https://si.in.tu-clausthal.de/submissionsystem/servlets/ShowSubmission?sid="
                            + submission.getSubmissionid() + "> verndert.\n\n-- \nReply is not possible.");
        }
    } else {
        if (points.getPointStatus() != null) {
            storeInHistory(submission, "status", "", PointStatus.values()[points.getPointStatus()].toString(),
                    participation);
        }
        if (points.getDuplicate() != null) {
            storeInHistory(submission, "duplicate", "", points.getDuplicate() + "", participation);
        }
        if (points.getPoints() != null) {
            storeInHistory(submission, "points", "", Util.showPoints(points.getPoints()), participation);
        }
        if (points.getInternalComment() != null && !"".equals(points.getInternalComment())) {
            storeInHistory(submission, "internalComment", "", points.getInternalComment(), participation);
        }
        if (points.getPublicComment() != null && !"".equals(points.getPublicComment())) {
            storeInHistory(submission, "publicComment", "", points.getPublicComment(), participation);
        }
    }
    return points;
}

From source file:de.tuclausthal.submissioninterface.persistence.dao.impl.ResultDAO.java

License:Open Source License

@Override
public void createResults(Submission submission, List<String> results) {
    session.lock(submission, LockMode.UPGRADE);
    for (Result result : (List<Result>) session.createCriteria(Result.class)
            .add(Restrictions.eq("submission", submission)).setLockMode(LockMode.UPGRADE).list()) {
        session.delete(result);/*from  w  ww.j  a va  2  s .co  m*/
    }
    for (String stringResult : results) {
        session.save(new Result(submission, stringResult));
    }
}

From source file:de.tuclausthal.submissioninterface.persistence.dao.impl.SimilarityTestDAO.java

License:Open Source License

@Override
public SimilarityTest getSimilarityTestLocked(int similarityTestId) {
    return (SimilarityTest) getSession().get(SimilarityTest.class, similarityTestId, LockMode.UPGRADE);
}

From source file:de.tuclausthal.submissioninterface.persistence.dao.impl.SimilarityTestDAO.java

License:Open Source License

@Override
public SimilarityTest takeSimilarityTest() {
    Session session = getSession();/*  w w  w  . jav a 2  s.c om*/
    Transaction tx = session.beginTransaction();
    SimilarityTest similarityTest = (SimilarityTest) session.createCriteria(SimilarityTest.class)
            .add(Restrictions.eq("status", 1)).setLockMode(LockMode.UPGRADE).createCriteria("task")
            .add(Restrictions.le("deadline", Util.correctTimezone(new Date()))).setMaxResults(1).uniqueResult();
    if (similarityTest != null) {
        similarityTest.setStatus(2);
        session.save(similarityTest);
    }
    tx.commit();
    return similarityTest;
}

From source file:de.tuclausthal.submissioninterface.persistence.dao.impl.SubmissionDAO.java

License:Open Source License

public Submission getSubmissionLocked(int submissionid) {
    return (Submission) getSession().get(Submission.class, submissionid, LockMode.UPGRADE);
}

From source file:de.tuclausthal.submissioninterface.persistence.dao.impl.SubmissionDAO.java

License:Open Source License

@Override
public Submission getSubmissionLocked(Task task, User user) {
    return (Submission) getSession().createCriteria(Submission.class).add(Restrictions.eq("task", task))
            .createCriteria("submitters").add(Restrictions.eq("user", user)).setLockMode(LockMode.UPGRADE)
            .uniqueResult();/*from   ww w.j av  a 2s . c o m*/
}

From source file:de.tuclausthal.submissioninterface.persistence.dao.impl.SubmissionDAO.java

License:Open Source License

@Override
public boolean deleteIfNoFiles(Submission submission, File submissionPath) {
    Session session = getSession();/*from   w w  w.  j  av  a  2  s  .co m*/
    session.lock(submission, LockMode.UPGRADE);
    boolean result = false;
    Util.recursiveDeleteEmptySubDirectories(submissionPath);
    if (submissionPath.listFiles().length == 0 && submissionPath.delete()) {
        session.delete(submission);
        result = true;
    }
    return result;
}

From source file:de.tuclausthal.submissioninterface.persistence.dao.impl.TaskNumberDAO.java

License:Open Source License

@Override
public List<TaskNumber> getTaskNumbersForTaskLocked(Task task, Participation participation) {
    return getSession().createCriteria(TaskNumber.class).add(Restrictions.eq("task", task))
            .add(Restrictions.eq("participation", participation)).addOrder(Order.asc("tasknumberid"))
            .setLockMode(LockMode.UPGRADE).list();
}

From source file:de.tuclausthal.submissioninterface.persistence.dao.impl.TestCountDAO.java

License:Open Source License

@Override
public boolean canSeeResultAndIncrementCounter(Test test, Submission submission) {
    Session session = getSession();//from w w  w.ja v  a 2  s  . com
    Transaction tx = session.beginTransaction();
    for (Participation participation : submission.getSubmitters()) {
        TestCount testCount = (TestCount) session.createCriteria(TestCount.class)
                .add(Restrictions.eq("test", test)).add(Restrictions.eq("user", participation.getUser()))
                .setLockMode(LockMode.UPGRADE).setMaxResults(1).uniqueResult();
        if (testCount == null) {
            testCount = new TestCount();
            testCount.setUser(participation.getUser());
            testCount.setTest(test);
        }
        if (testCount.getTimesExecuted() >= test.getTimesRunnableByStudents()) {
            tx.commit(); // rollback is evil in hibernate! ;)
            return false;
        }
        testCount.setTimesExecuted(testCount.getTimesExecuted() + 1);
        session.saveOrUpdate(testCount);
    }
    tx.commit();
    return true;
}

From source file:de.tuclausthal.submissioninterface.persistence.dao.impl.TestDAO.java

License:Open Source License

@Override
public Test getTestLocked(int testId) {
    return (Test) getSession().get(Test.class, testId, LockMode.UPGRADE);
}