Merge remote-tracking branch 'origin/rel-1.5-uzh' into dev-1.5
This commit is contained in:
commit
c788edc616
6 changed files with 42 additions and 19 deletions
2
pom.xml
2
pom.xml
|
@ -18,7 +18,7 @@
|
|||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
<sebserver-version>1.5-SNAPSHOT</sebserver-version>
|
||||
<sebserver-version>1.5-pre-uzh</sebserver-version>
|
||||
<build-version>${sebserver-version}</build-version>
|
||||
<revision>${sebserver-version}</revision>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
|
|
@ -426,7 +426,7 @@ public final class Exam implements GrantEntity {
|
|||
builder.append(", name=");
|
||||
builder.append(this.name);
|
||||
builder.append(", description=");
|
||||
builder.append(this.getDescription());
|
||||
builder.append(Utils.truncateText(this.getDescription(), 255));
|
||||
builder.append(", startTime=");
|
||||
builder.append(this.startTime);
|
||||
builder.append(", endTime=");
|
||||
|
|
|
@ -821,6 +821,18 @@ public final class Utils {
|
|||
return false;
|
||||
}
|
||||
|
||||
public static boolean isEqualsWithEmptyCheckTruncated(final String s1, final String s2) {
|
||||
if (s2 == null || s1 == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (s1.endsWith("...")) {
|
||||
return Objects.equals(truncateText(s1, 1000), truncateText(s2, 1000));
|
||||
} else {
|
||||
return Objects.equals(s1, s2);
|
||||
}
|
||||
}
|
||||
|
||||
public static Long toLong(final String longValue) {
|
||||
try {
|
||||
return Long.valueOf(longValue);
|
||||
|
|
|
@ -24,6 +24,7 @@ import java.util.stream.Stream;
|
|||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.DateTimeZone;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.cache.CacheManager;
|
||||
|
@ -58,6 +59,7 @@ import ch.ethz.seb.sebserver.webservice.servicelayer.lms.LmsAPIService;
|
|||
import ch.ethz.seb.sebserver.webservice.servicelayer.lms.LmsAPITemplate;
|
||||
import ch.ethz.seb.sebserver.webservice.servicelayer.lms.impl.AbstractCachedCourseAccess;
|
||||
import ch.ethz.seb.sebserver.webservice.servicelayer.lms.impl.ans.AnsLmsData.AssignmentData;
|
||||
import ch.ethz.seb.sebserver.webservice.servicelayer.lms.impl.ans.AnsLmsData.IntegrationsData;
|
||||
import ch.ethz.seb.sebserver.webservice.servicelayer.lms.impl.ans.AnsLmsData.SEBServerData;
|
||||
import ch.ethz.seb.sebserver.webservice.servicelayer.lms.impl.ans.AnsLmsData.UserData;
|
||||
|
||||
|
@ -247,8 +249,8 @@ public class AnsLmsAPITemplate extends AbstractCachedCourseAccess implements Lms
|
|||
a.start_at = java.time.Instant.now().plus(365, java.time.temporal.ChronoUnit.DAYS).toString();
|
||||
a.end_at = java.time.Instant.now().plus(366, java.time.temporal.ChronoUnit.DAYS).toString();
|
||||
}
|
||||
final DateTime startTime = new DateTime(a.start_at);
|
||||
final DateTime endTime = new DateTime(a.end_at);
|
||||
final DateTime startTime = new DateTime(a.start_at).toDateTime(DateTimeZone.UTC);
|
||||
final DateTime endTime = new DateTime(a.end_at).toDateTime(DateTimeZone.UTC);
|
||||
final Map<String, String> attrs = new HashMap<>();
|
||||
attrs.put("assignment_id", String.valueOf(a.id));
|
||||
return new QuizData(
|
||||
|
@ -276,7 +278,15 @@ public class AnsLmsAPITemplate extends AbstractCachedCourseAccess implements Lms
|
|||
|
||||
private AssignmentData getAssignmentById(final RestTemplate restTemplate, final String id) {
|
||||
final String url = String.format("/api/v2/assignments/%s", id);
|
||||
return this.apiGet(restTemplate, url, AssignmentData.class);
|
||||
final AssignmentData assignment = this.apiGet(restTemplate, url, AssignmentData.class);
|
||||
if (assignment.integrations == null) {
|
||||
assignment.integrations = new IntegrationsData();
|
||||
}
|
||||
if (assignment.integrations.safe_exam_browser_server == null) {
|
||||
assignment.integrations.safe_exam_browser_server = new SEBServerData();
|
||||
assignment.integrations.safe_exam_browser_server.enabled = false;
|
||||
}
|
||||
return assignment;
|
||||
}
|
||||
|
||||
private List<QuizData> getQuizzesByIds(final RestTemplate restTemplate, final Set<String> ids) {
|
||||
|
|
|
@ -467,15 +467,15 @@ public class ExamSessionServiceImpl implements ExamSessionService {
|
|||
final Set<Long> connectionIds) {
|
||||
|
||||
this.duplicateCheck.clear();
|
||||
this.duplicates.clear();
|
||||
final Set<Long> duplicates = new HashSet<>();
|
||||
return this.clientConnectionDAO
|
||||
.getConnectionTokens(examId)
|
||||
.map(tokens -> tokens.stream()
|
||||
.map(this::getForTokenAndCheckDuplication)
|
||||
.map(token -> this.getForTokenAndCheckDuplication(token, duplicates))
|
||||
.filter(ccd -> connectionIds.contains(ccd.clientConnection.id))
|
||||
.map(ccd -> ccd.clientStaticData)
|
||||
.collect(Collectors.toList()))
|
||||
.map(staticData -> new MonitoringStaticClientData(staticData, this.duplicates));
|
||||
.map(staticData -> new MonitoringStaticClientData(staticData, duplicates));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -633,17 +633,19 @@ public class ExamSessionServiceImpl implements ExamSessionService {
|
|||
}
|
||||
|
||||
private final Map<String, Long> duplicateCheck = new HashMap<>();
|
||||
private final Set<Long> duplicates = new HashSet<>();
|
||||
|
||||
private ClientConnectionDataInternal getForTokenAndCheckDuplication(final String token) {
|
||||
private ClientConnectionDataInternal getForTokenAndCheckDuplication(
|
||||
final String token,
|
||||
final Set<Long> duplicates) {
|
||||
|
||||
final ClientConnectionDataInternal cc = this.examSessionCacheService.getClientConnection(token);
|
||||
if (cc.clientConnection.status.duplicateCheckStatus) {
|
||||
final Long id = this.duplicateCheck.put(
|
||||
cc.clientConnection.userSessionId,
|
||||
cc.getConnectionId());
|
||||
if (id != null) {
|
||||
this.duplicates.add(id);
|
||||
this.duplicates.add(cc.getConnectionId());
|
||||
duplicates.add(id);
|
||||
duplicates.add(cc.getConnectionId());
|
||||
}
|
||||
}
|
||||
return cc;
|
||||
|
|
|
@ -355,22 +355,21 @@ class ExamUpdateHandler {
|
|||
if (!Utils.isEqualsWithEmptyCheck(exam.name, quizData.name) ||
|
||||
!Objects.equals(exam.startTime, quizData.startTime) ||
|
||||
!Objects.equals(exam.endTime, quizData.endTime) ||
|
||||
!Utils.isEqualsWithEmptyCheck(exam.getDescription(), quizData.description) ||
|
||||
!Utils.isEqualsWithEmptyCheckTruncated(exam.getDescription(), quizData.description) ||
|
||||
!Utils.isEqualsWithEmptyCheck(exam.getStartURL(), quizData.startURL)) {
|
||||
|
||||
if (!Utils.isEqualsWithEmptyCheck(exam.name, quizData.name)) {
|
||||
log.info("Update name difference from LMS. Exam:{}, QuizData: {}", exam.name, quizData.name);
|
||||
log.info("Update name difference from LMS. Exam: {}, QuizData: {}", exam.name, quizData.name);
|
||||
}
|
||||
if (!Objects.equals(exam.startTime, quizData.startTime)) {
|
||||
log.info("Update startTime difference from LMS. Exam:{}, QuizData: {}", exam.startTime,
|
||||
log.info("Update startTime difference from LMS. Exam: {}, QuizData: {}", exam.startTime,
|
||||
quizData.startTime);
|
||||
}
|
||||
if (!Objects.equals(exam.endTime, quizData.endTime)) {
|
||||
log.info("Update endTime difference from LMS. Exam:{}, QuizData: {}", exam.endTime, quizData.endTime);
|
||||
log.info("Update endTime difference from LMS. Exam: {}, QuizData: {}", exam.endTime, quizData.endTime);
|
||||
}
|
||||
if (!Utils.isEqualsWithEmptyCheck(exam.getDescription(), quizData.description)) {
|
||||
log.info("Update description difference from LMS. Exam:{}, QuizData: {}", exam.getDescription(),
|
||||
quizData.description);
|
||||
if (!Utils.isEqualsWithEmptyCheckTruncated(exam.getDescription(), quizData.description)) {
|
||||
log.info("Update description difference from LMS. Exam: {}", exam);
|
||||
}
|
||||
if (!Utils.isEqualsWithEmptyCheck(exam.getStartURL(), quizData.startURL)) {
|
||||
log.info("Update startURL difference from LMS. Exam:{}, QuizData: {}",
|
||||
|
|
Loading…
Reference in a new issue