From 9ba270a9e68569ce698d2838ab71f8a6f2303dbc Mon Sep 17 00:00:00 2001
From: Christoph Thelen <christoph.thelen@mni.thm.de>
Date: Wed, 21 Aug 2013 15:57:38 +0200
Subject: [PATCH] Removed obsolete feedback methods

---
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 191 ------------------
 .../java/de/thm/arsnova/dao/IDatabaseDao.java |   7 -
 .../de/thm/arsnova/dao/StubDatabaseDao.java   |  37 ----
 .../arsnova/services/SessionServiceTest.java  |   2 -
 4 files changed, 237 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 5e9d7aad..34aff2ef 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -25,7 +25,6 @@ import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
@@ -51,7 +50,6 @@ 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;
 import de.thm.arsnova.entities.InterposedQuestion;
 import de.thm.arsnova.entities.InterposedReadingCount;
@@ -265,156 +263,6 @@ public class CouchDBDao implements IDatabaseDao {
 		return this.getSession(sessionDocument.getString("keyword"));
 	}
 
-	@Override
-	public final Feedback getFeedback(final String keyword) {
-		String sessionId = this.getSessionId(keyword);
-		if (sessionId == null) {
-			throw new NotFoundException();
-		}
-		NovaView view = new NovaView("understanding/by_session");
-		view.setGroup(true);
-		view.setStartKeyArray(sessionId);
-		view.setEndKeyArray(sessionId, "{}");
-		ViewResults results = this.getDatabase().view(view);
-
-		LOGGER.debug("Feedback: {}", results.getJSONArray("rows"));
-
-		return this.createFeedbackObject(results);
-	}
-
-	private Feedback createFeedbackObject(final ViewResults results) {
-		int[] values = {0, 0, 0, 0};
-		JSONArray rows = results.getJSONArray("rows");
-
-		try {
-			for (int i = Feedback.MIN_FEEDBACK_TYPE; i <= Feedback.MAX_FEEDBACK_TYPE; i++) {
-				String key = rows.optJSONObject(i).optJSONArray("key").getString(1);
-				JSONObject feedback = rows.optJSONObject(i);
-
-				if (key.equals("Bitte schneller")) {
-					values[Feedback.FEEDBACK_FASTER] = feedback.getInt("value");
-				}
-				if (key.equals("Kann folgen")) {
-					values[Feedback.FEEDBACK_OK] = feedback.getInt("value");
-				}
-				if (key.equals("Zu schnell")) {
-					values[Feedback.FEEDBACK_SLOWER] = feedback.getInt("value");
-				}
-				if (key.equals("Nicht mehr dabei")) {
-					values[Feedback.FEEDBACK_AWAY] = feedback.getInt("value");
-				}
-			}
-		} catch (Exception e) {
-			return new Feedback(
-					values[Feedback.FEEDBACK_FASTER],
-					values[Feedback.FEEDBACK_OK],
-					values[Feedback.FEEDBACK_SLOWER],
-					values[Feedback.FEEDBACK_AWAY]
-			);
-		}
-		return new Feedback(
-				values[Feedback.FEEDBACK_FASTER],
-				values[Feedback.FEEDBACK_OK],
-				values[Feedback.FEEDBACK_SLOWER],
-				values[Feedback.FEEDBACK_AWAY]
-		);
-	}
-
-	@Override
-	public final boolean saveFeedback(
-			final String keyword,
-			final int value,
-			final de.thm.arsnova.entities.User user
-	) {
-		String sessionId = this.getSessionId(keyword);
-		if (sessionId == null) {
-			return false;
-		}
-		if (!(value >= Feedback.MIN_FEEDBACK_TYPE && value <= Feedback.MAX_FEEDBACK_TYPE)) {
-			return false;
-		}
-
-		Document feedback = new Document();
-		List<Document> postedFeedback = findPreviousFeedback(sessionId, user);
-
-		// Feedback can only be posted once. If there already is some feedback,
-		// we need to update it.
-		if (!postedFeedback.isEmpty()) {
-			for (Document f : postedFeedback) {
-				// Use the first found feedback and update value and timestamp
-				try {
-					feedback = this.getDatabase().getDocument(f.getId());
-					feedback.put("value", feedbackValueToString(value));
-					feedback.put("timestamp", System.currentTimeMillis());
-				} catch (IOException e) {
-					return false;
-				}
-				break;
-			}
-		} else {
-			feedback.put("type", "understanding");
-			feedback.put("user", user.getUsername());
-			feedback.put("sessionId", sessionId);
-			feedback.put("timestamp", System.currentTimeMillis());
-			feedback.put("value", feedbackValueToString(value));
-		}
-
-		try {
-			this.getDatabase().saveDocument(feedback);
-		} catch (IOException e) {
-			return false;
-		}
-
-		return true;
-	}
-
-	private List<Document> findPreviousFeedback(final String sessionId, final de.thm.arsnova.entities.User user) {
-		View view = new View("understanding/by_user");
-		try {
-			view.setKey(
-					URLEncoder.encode(
-							"[\"" + sessionId + "\",\"" + user.getUsername() + "\"]",
-							"UTF-8"
-					)
-			);
-		} catch (UnsupportedEncodingException e) {
-			return Collections.<Document> emptyList();
-		}
-		ViewResults results = this.getDatabase().view(view);
-		return results.getResults();
-	}
-
-	private String feedbackValueToString(final int value) {
-		switch (value) {
-		case Feedback.FEEDBACK_FASTER:
-			return "Bitte schneller";
-		case Feedback.FEEDBACK_OK:
-			return "Kann folgen";
-		case Feedback.FEEDBACK_SLOWER:
-			return "Zu schnell";
-		case Feedback.FEEDBACK_AWAY:
-			return "Nicht mehr dabei";
-		default:
-			return null;
-		}
-	}
-
-	private int feedbackValueFromString(final String value) {
-		if (value.equals("Bitte schneller")) {
-			return Feedback.FEEDBACK_FASTER;
-		}
-		if (value.equals("Kann folgen")) {
-			return Feedback.FEEDBACK_OK;
-		}
-		if (value.equals("Zu schnell")) {
-			return Feedback.FEEDBACK_AWAY;
-		}
-		if (value.equals("Nicht mehr dabei")) {
-			return Feedback.FEEDBACK_AWAY;
-		}
-		return Integer.MIN_VALUE;
-	}
-
 	@Override
 	@Transactional(isolation = Isolation.READ_COMMITTED)
 	public final boolean sessionKeyAvailable(final String keyword) {
@@ -424,16 +272,6 @@ public class CouchDBDao implements IDatabaseDao {
 		return !results.containsKey(keyword);
 	}
 
-	private String getSessionId(final String keyword) {
-		NovaView view = new NovaView("session/by_keyword");
-		view.setKey(keyword);
-		ViewResults results = this.getDatabase().view(view);
-		if (results.getJSONArray("rows").optJSONObject(0) == null) {
-			return null;
-		}
-		return results.getJSONArray("rows").optJSONObject(0).optJSONObject("value").getString("_id");
-	}
-
 	private String getSessionKeyword(final String internalSessionId) throws IOException {
 		Document document = this.getDatabase().getDocument(internalSessionId);
 		if (document.has("keyword")) {
@@ -636,35 +474,6 @@ public class CouchDBDao implements IDatabaseDao {
 		}
 	}
 
-	@Override
-	public final Integer getMyFeedback(final String keyword, final User user) {
-		try {
-			String sessionId = this.getSessionId(keyword);
-			if (sessionId == null) {
-				throw new NotFoundException();
-			}
-
-			View view = new View("understanding/by_user");
-			view.setKey(
-					URLEncoder.encode(
-							"[\"" + sessionId + "\", \"" + user.getUsername() + "\"]",
-							"UTF-8"
-					)
-			);
-			ViewResults results = this.getDatabase().view(view);
-			JSONArray rows = results.getJSONArray("rows");
-
-			if (rows.size() == 0) {
-				return null;
-			}
-
-			JSONObject json = rows.optJSONObject(0).optJSONObject("value");
-			return this.feedbackValueFromString(json.getString("value"));
-		} catch (UnsupportedEncodingException e) {
-			return null;
-		}
-	}
-
 	@Override
 	public final List<String> getQuestionIds(final Session session, final User user) {
 		NovaView view;
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index f22a3906..d6027c30 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -23,7 +23,6 @@ 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;
 import de.thm.arsnova.entities.InterposedQuestion;
 import de.thm.arsnova.entities.InterposedReadingCount;
@@ -41,10 +40,6 @@ public interface IDatabaseDao {
 
 	Session saveSession(Session session);
 
-	Feedback getFeedback(String keyword);
-
-	boolean saveFeedback(String keyword, int value, User user);
-
 	boolean sessionKeyAvailable(String keyword);
 
 	Question saveQuestion(Session session, Question question);
@@ -61,8 +56,6 @@ public interface IDatabaseDao {
 
 	void updateSessionOwnerActivity(Session session);
 
-	Integer getMyFeedback(String keyword, User user);
-
 	List<String> getQuestionIds(Session session, User user);
 
 	void deleteQuestionWithAnswers(Question question);
diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
index 98301367..5f83db6d 100644
--- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
+++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
@@ -145,37 +145,6 @@ public class StubDatabaseDao implements IDatabaseDao {
 		}
 		return result;
 	}
-	
-	@Override
-	public Feedback getFeedback(String keyword) {
-		// Magic keyword for forbidden session
-		if (keyword.equals("99999999"))
-			throw new ForbiddenException();
-
-		Feedback feedback = stubFeedbacks.get(keyword);
-		if (feedback == null)
-			throw new NotFoundException();
-
-		return feedback;
-	}
-
-	@Override
-	public boolean saveFeedback(String keyword, int value, User user) {
-		if (stubFeedbacks.get(keyword) == null) {
-			stubFeedbacks.put(keyword, new Feedback(0, 0, 0, 0));
-		}
-
-		Feedback sessionFeedback = stubFeedbacks.get(keyword);
-
-		List<Integer> values = sessionFeedback.getValues();
-		values.set(value, values.get(value) + 1);
-
-		sessionFeedback = new Feedback(values.get(0), values.get(1), values.get(2), values.get(3));
-
-		stubFeedbacks.put(keyword, sessionFeedback);
-
-		return true;
-	}
 
 	@Override
 	public boolean sessionKeyAvailable(String keyword) {
@@ -235,12 +204,6 @@ public class StubDatabaseDao implements IDatabaseDao {
 
 	}
 
-	@Override
-	public Integer getMyFeedback(String keyword, User user) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
 	@Override
 	public Answer getMyAnswer(String questionId, int piRound) {
 		// TODO Auto-generated method stub
diff --git a/src/test/java/de/thm/arsnova/services/SessionServiceTest.java b/src/test/java/de/thm/arsnova/services/SessionServiceTest.java
index 5700c0ea..c6ede4f8 100644
--- a/src/test/java/de/thm/arsnova/services/SessionServiceTest.java
+++ b/src/test/java/de/thm/arsnova/services/SessionServiceTest.java
@@ -103,8 +103,6 @@ public class SessionServiceTest {
 	@Test
 	public void testShouldSaveSession() {
 		userService.setUserAuthenticated(true);
-		// Prevent "NotFoundExceptions" inside StubDatabase while saving the session
-		databaseDao.saveFeedback("11111111", 1, userService.getCurrentUser());
 
 		Session session = new Session();
 		session.setActive(true);
-- 
GitLab