diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index caf254e746bb1ab3e42fc2f854f4940fc2b108a4..b07b051f935721c9f5488ec69ed2d634a813c3f0 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -54,6 +54,7 @@ import com.fourspaces.couchdb.Document; import com.fourspaces.couchdb.View; import com.fourspaces.couchdb.ViewResults; +import de.thm.arsnova.connector.model.Course; import de.thm.arsnova.entities.Answer; import de.thm.arsnova.entities.Feedback; import de.thm.arsnova.entities.FoodVote; @@ -1255,4 +1256,64 @@ public class CouchDBDao implements IDatabaseDao { return (this.getSession(keyword).getCourseId() != null) && (this.getSession(keyword).getCourseType() != null); } + + @Override + public List<Session> getCourseSessions(List<Course> courses) { + ExtendedView view = new ExtendedView("logged_in/available_moodlesessions"); + view.setCourseIdKeys(courses); + + ViewResults sessions = this.getDatabase().view(view); + + List<Session> result = new ArrayList<Session>(); + for (Document d : sessions.getResults()) { + Session session = (Session) JSONObject.toBean( + d.getJSONObject().getJSONObject("value"), + Session.class + ); + session.setCreator(d.getJSONObject().getJSONArray("key").getString(0)); + session.setName(d.getJSONObject().getJSONArray("key").getString(1)); + session.set_id(d.getId()); + result.add(session); + } + return result; + } + + private class ExtendedView extends View { + + private String keys; + + public ExtendedView(String fullname) { + super(fullname); + } + + public void setKeys(String newKeys) { + this.keys = newKeys; + } + + public void setCourseIdKeys(List<Course> courses) { + StringBuilder sb = new StringBuilder(); + sb.append("["); + for (int i = 0; i < courses.size() - 1; i++) { + sb.append("\"" + courses.get(i).getId() + "\","); + } + sb.append("\"" + courses.get(courses.size() - 1).getId() + "\""); + sb.append("]"); + this.setKeys(sb.toString()); + } + + public String getQueryString() { + StringBuilder query = new StringBuilder(); + query.append(super.getQueryString()); + if (this.keys != null) { + if (query.toString().isEmpty()) { + query.append("&"); + } + + query.append("keys=" + this.keys); + } + + if (query.toString().isEmpty()) return null; + return query.toString(); + } + } } diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index 38f63b0689f1c189593ae8d774ac2c653a60e426..e938b85b4206da05734dbdb594d1d4123a5f8674 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -22,6 +22,7 @@ package de.thm.arsnova.dao; import java.io.IOException; import java.util.List; +import de.thm.arsnova.connector.model.Course; import de.thm.arsnova.entities.Answer; import de.thm.arsnova.entities.Feedback; import de.thm.arsnova.entities.FoodVote; @@ -118,4 +119,6 @@ public interface IDatabaseDao { String getCourseId(String keyword); boolean isCourseSession(String keyword); + + List<Session> getCourseSessions(List<Course> courses); } diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java index 7175464fa71de1eba6b68481d45208f312562403..dab2849fe2a5ca3e5d39acbf489dc8540323edc9 100644 --- a/src/main/java/de/thm/arsnova/services/ISessionService.java +++ b/src/main/java/de/thm/arsnova/services/ISessionService.java @@ -41,5 +41,4 @@ public interface ISessionService { LoggedIn registerAsOnlineUser(User user, String sessionkey); int countActiveUsers(String sessionkey); - } diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java index 79caffcb6487f2dbef85027dacd296a78404539b..3b73c1913cf6208a3ed5d1e8daedbf11f0d74660 100644 --- a/src/main/java/de/thm/arsnova/services/SessionService.java +++ b/src/main/java/de/thm/arsnova/services/SessionService.java @@ -19,7 +19,9 @@ package de.thm.arsnova.services; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -67,9 +69,28 @@ public class SessionService implements ISessionService { @Override public final List<Session> getMySessions(final String username) { - return databaseDao.getMySessions(username); + List<Session> mySessions = databaseDao.getMySessions(username); + if (connectorClient == null) { + return mySessions; + } + + List<Session> courseSessions = databaseDao.getCourseSessions( + connectorClient.getCourses(username).getCourse() + ); + + Map<String, Session> allAvailableSessions = new HashMap<String, Session>(); + + for (Session session : mySessions) { + allAvailableSessions.put(session.get_id(), session); + } + + for (Session session : courseSessions) { + allAvailableSessions.put(session.get_id(), session); + } + + return (List<Session>) allAvailableSessions.values(); } - + @Override public final List<Session> getMyVisitedSessions(final User user) { return databaseDao.getMyVisitedSessions(user); diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java index cdb21978fa5577aafe70af41c1c94a2586f5abc2..a343293c64d7152de1f3ff78de45b566757f024c 100644 --- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java +++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java @@ -27,6 +27,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; +import de.thm.arsnova.connector.model.Course; import de.thm.arsnova.entities.Answer; import de.thm.arsnova.entities.Feedback; import de.thm.arsnova.entities.FoodVote; @@ -388,4 +389,10 @@ public class StubDatabaseDao implements IDatabaseDao { // TODO Auto-generated method stub return false; } + + @Override + public List<Session> getCourseSessions(List<Course> courses) { + + return null; + } }