-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathTestDAO.java
More file actions
193 lines (171 loc) · 6.19 KB
/
Copy pathTestDAO.java
File metadata and controls
193 lines (171 loc) · 6.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/*
* Copyright 2009-2010, 2020-2024 Sven Strickroth <email@cs-ware.de>
*
* This file is part of the GATE.
*
* GATE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
* GATE 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 GATE. If not, see <http://www.gnu.org/licenses/>.
*/
package de.tuclausthal.submissioninterface.persistence.dao.impl;
import java.time.ZonedDateTime;
import java.util.List;
import jakarta.persistence.LockModeType;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Root;
import org.hibernate.LockOptions;
import org.hibernate.Session;
import org.hibernate.Transaction;
import de.tuclausthal.submissioninterface.persistence.dao.TestDAOIf;
import de.tuclausthal.submissioninterface.persistence.datamodel.ChecklistTest;
import de.tuclausthal.submissioninterface.persistence.datamodel.CommentsMetricTest;
import de.tuclausthal.submissioninterface.persistence.datamodel.CompileTest;
import de.tuclausthal.submissioninterface.persistence.datamodel.DockerTest;
import de.tuclausthal.submissioninterface.persistence.datamodel.HaskellSyntaxTest;
import de.tuclausthal.submissioninterface.persistence.datamodel.HaskellRuntimeTest;
import de.tuclausthal.submissioninterface.persistence.datamodel.JUnitTest;
import de.tuclausthal.submissioninterface.persistence.datamodel.JavaAdvancedIOTest;
import de.tuclausthal.submissioninterface.persistence.datamodel.Task;
import de.tuclausthal.submissioninterface.persistence.datamodel.Task_;
import de.tuclausthal.submissioninterface.persistence.datamodel.Test;
import de.tuclausthal.submissioninterface.persistence.datamodel.Test_;
import de.tuclausthal.submissioninterface.persistence.datamodel.UMLConstraintTest;
/**
* Data Access Object implementation for the TestDAOIf
* @author Sven Strickroth
*/
public class TestDAO extends AbstractDAO implements TestDAOIf {
public TestDAO(Session session) {
super(session);
}
@Override
public JUnitTest createJUnitTest(Task task) {
Session session = getSession();
JUnitTest test = new JUnitTest();
test.setTask(task);
session.persist(test);
return test;
}
@Override
public UMLConstraintTest createUMLConstraintTest(Task task) {
Session session = getSession();
UMLConstraintTest test = new UMLConstraintTest();
test.setTask(task);
session.persist(test);
return test;
}
@Override
public void deleteTest(Test test) {
Session session = getSession();
session.remove(test);
}
@Override
public Test getTest(int testId) {
return getSession().get(Test.class, testId);
}
@Override
public Test getTestLocked(int testId) {
return getSession().get(Test.class, testId, LockOptions.UPGRADE);
}
@Override
public CompileTest createCompileTest(Task task) {
Session session = getSession();
CompileTest test = new CompileTest();
test.setTask(task);
session.persist(test);
return test;
}
@Override
public Test takeTestTransacted() {
Session session = getSession();
Transaction tx = session.beginTransaction();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Test> criteria = builder.createQuery(Test.class);
Root<Test> root = criteria.from(Test.class);
criteria.select(root);
criteria.where(builder.and(builder.equal(root.get(Test_.forTutors), true), builder.equal(root.get(Test_.needsToRun), true), builder.lessThan(root.join(Test_.task).get(Task_.deadline), ZonedDateTime.now().minusMinutes(2))));
Test test = session.createQuery(criteria).setLockMode(LockModeType.PESSIMISTIC_WRITE).setMaxResults(1).uniqueResult();
if (test != null) {
test.setNeedsToRun(false);
}
tx.commit();
return test;
}
@Override
public List<Test> getStudentTests(Task task) {
Session session = getSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Test> criteria = builder.createQuery(Test.class);
Root<Test> root = criteria.from(Test.class);
criteria.select(root);
criteria.where(builder.and(builder.equal(root.get(Test_.task), task), builder.gt(root.get(Test_.timesRunnableByStudents), 0)));
return session.createQuery(criteria).list();
}
@Override
public List<Test> getTutorTests(Task task) {
Session session = getSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Test> criteria = builder.createQuery(Test.class);
Root<Test> root = criteria.from(Test.class);
criteria.select(root);
criteria.where(builder.and(builder.equal(root.get(Test_.task), task), builder.equal(root.get(Test_.forTutors), true)));
return session.createQuery(criteria).list();
}
@Override
public CommentsMetricTest createCommentsMetricTest(Task task) {
Session session = getSession();
CommentsMetricTest test = new CommentsMetricTest();
test.setTask(task);
session.persist(test);
return test;
}
@Override
public JavaAdvancedIOTest createJavaAdvancedIOTest(Task task) {
Session session = getSession();
JavaAdvancedIOTest test = new JavaAdvancedIOTest();
test.setTask(task);
session.persist(test);
return test;
}
@Override
public DockerTest createDockerTest(Task task) {
Session session = getSession();
DockerTest test = new DockerTest();
test.setTask(task);
session.persist(test);
return test;
}
@Override
public HaskellSyntaxTest createHaskellSyntaxTest(Task task) {
Session session = getSession();
HaskellSyntaxTest test = new HaskellSyntaxTest();
test.setTask(task);
session.persist(test);
return test;
}
@Override
public HaskellRuntimeTest createHaskellRuntimeTest(Task task) {
Session session = getSession();
HaskellRuntimeTest test = new HaskellRuntimeTest();
test.setTask(task);
session.persist(test);
return test;
}
@Override
public ChecklistTest createChecklistTest(Task task) {
Session session = getSession();
ChecklistTest test = new ChecklistTest();
test.setTask(task);
session.persist(test);
return test;
}
}