Skip to content
Snippets Groups Projects
Commit 8ce529d3 authored by Christoph Thelen's avatar Christoph Thelen
Browse files

Merge remote-tracking branch 'private/master'

Conflicts:
	src/main/java/de/thm/arsnova/dao/CouchDBDao.java
parents 7ae2a9e3 64bfc50e
No related merge requests found
......@@ -4,3 +4,4 @@
target/*
chromedriver.log
.checkstyle
/target
......@@ -23,6 +23,8 @@ import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.AbstractMap;
import java.util.AbstractMap.SimpleEntry;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
......@@ -1323,42 +1325,44 @@ public class CouchDBDao implements IDatabaseDao {
}
@Override
public int getLearningProgress(final Session session) {
final NovaView courseView = new NovaView("learning_progress_course_value/course_value");
final NovaView maximumView = new NovaView("learning_progress_maximum_value/maximum_value");
courseView.setKey(session.get_id());
maximumView.setKey(session.get_id());
public int getLearningProgress(Session session) {
NovaView progressView = new NovaView("learning_progress/all");
progressView.setStartKeyArray(session.get_id());
progressView.setEndKeyArray(session.get_id(), "{}");
return getProgressPercentage(courseView, maximumView);
List<Document> progressResults = this.getDatabase().view(progressView).getResults();
// when filtering just by session, the query contains all three values.
return getProgressPercentage(progressResults, progressResults);
}
@Override
public int getMyLearningProgress(final Session session, final User user) {
final NovaView userView = new NovaView("learning_progress_user_value/user_value");
final NovaView maximumView = new NovaView("learning_progress_maximum_value/maximum_value");
userView.setKey(session.get_id(), user.getUsername());
maximumView.setKey(session.get_id());
public SimpleEntry<Integer,Integer> getMyLearningProgress(Session session, User user) {
NovaView progressView = new NovaView("learning_progress/all");
NovaView maximumView = new NovaView("learning_progress/all");
progressView.setKey(session.get_id(), user.getUsername());
maximumView.setStartKeyArray(session.get_id());
maximumView.setEndKeyArray(session.get_id(), "{}");
return getProgressPercentage(userView, maximumView);
List<Document> progressResults = this.getDatabase().view(progressView).getResults();
List<Document> maximumResults = this.getDatabase().view(maximumView).getResults();
int myprogress = getProgressPercentage(progressResults, maximumResults);
int courseprogress = getProgressPercentage(maximumResults, maximumResults);
return new AbstractMap.SimpleEntry<Integer, Integer>(myprogress, courseprogress);
}
private int getProgressPercentage(final NovaView progressView, final NovaView maximumView) {
final List<Document> progressValue = getDatabase().view(progressView).getResults();
final List<Document> maximumValue = getDatabase().view(maximumView).getResults();
if (maximumValue.isEmpty()) {
private int getProgressPercentage(List<Document> progressResults, List<Document> maximumResults) {
if (progressResults.isEmpty() || maximumResults.isEmpty()) {
return 0;
}
final int maximum = maximumValue.get(0).getInt("value");
int progress = 0;
if (!progressValue.isEmpty()) {
if (progressValue.get(0).optJSONArray("value").isArray()) {
final JSONArray courseProgress = progressValue.get(0).getJSONArray("value");
progress = courseProgress.getInt(0) / courseProgress.getInt(1);
} else {
progress = progressValue.get(0).getInt("value");
}
final int max = maximumResults.get(0).getJSONArray("value").getInt(0);
JSONArray values = progressResults.get(0).getJSONArray("value");
final int userResult = values.getInt(1);
final int numAnswers = values.getInt(2);
if (numAnswers == 0) {
return 0;
}
final int percentage = (int)(progress * 100.0f / maximum);
return percentage < 0 ? 0 : percentage;
final int averageResult = userResult/numAnswers;
return (int)((averageResult * 100.0f) / max);
}
}
......@@ -19,6 +19,7 @@
package de.thm.arsnova.dao;
import java.util.AbstractMap.SimpleEntry;
import java.util.List;
import de.thm.arsnova.connector.model.Course;
......@@ -164,5 +165,5 @@ public interface IDatabaseDao {
int getLearningProgress(Session session);
int getMyLearningProgress(Session session, User user);
SimpleEntry<Integer, Integer> getMyLearningProgress(Session session, User user);
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment