From 9f5151f1289786ac9ae93fcfd6a26396250d417e Mon Sep 17 00:00:00 2001
From: Katharina Staden <katharina.staden@mni.thm.de>
Date: Mon, 8 Jun 2015 20:53:39 +0200
Subject: [PATCH] Retrieved @Cacheable and changed updateSession method in
 SessionService, now getting the session by keyword and set all fields that
 may have changed to a new value

---
 .../java/de/thm/arsnova/dao/CouchDBDao.java   |  1 +
 .../thm/arsnova/services/SessionService.java  | 36 ++++++++++++++++++-
 2 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index f4a24c6d8..199a165e9 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -432,6 +432,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	}
 
 	@Override
+        @Cacheable("sessions")
 	public Session getSessionFromKeyword(final String keyword) {
 		final NovaView view = new NovaView("session/by_keyword");
 		view.setKey(keyword);
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java
index b404910b3..170c19c11 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -313,7 +313,41 @@ public class SessionService implements ISessionService, ApplicationEventPublishe
 	@Override
 	@PreAuthorize("isAuthenticated() and hasPermission(#session, 'owner')")
 	public Session updateSession(final String sessionkey, final Session session) {
-		return databaseDao.updateSession(session);
+                final Session existingSession = databaseDao.getSessionFromKeyword(sessionkey);
+                
+                existingSession.setActive(session.isActive());
+                existingSession.setShortName(session.getShortName());
+                existingSession.setPpAuthorName(session.getPpAuthorName());
+                existingSession.setPpAuthorMail(session.getPpAuthorMail());
+                existingSession.setShortName(session.getShortName());
+                existingSession.setPpAuthorName(session.getPpAuthorName());
+                existingSession.setPpFaculty(session.getPpFaculty());
+                existingSession.setName(session.getName());
+                existingSession.setPpUniversity(session.getPpUniversity());
+                existingSession.setPpDescription(session.getPpDescription());
+                existingSession.setPpLevel(session.getPpLevel());
+                existingSession.setPpLicense(session.getPpLicense());
+                existingSession.setPpSubject(session.getPpSubject());
+                  
+                if (session.getPpLogo() != null) {
+			if (session.getPpLogo().startsWith("http")) {
+				final String base64ImageString = imageUtils.encodeImageToString(session.getPpLogo());
+				if (base64ImageString == null) {
+					throw new BadRequestException();
+				}
+				existingSession.setPpLogo(base64ImageString);
+			} else {
+                            existingSession.setPpLogo(session.getPpLogo());
+                        }
+			// base64 adds offset to filesize, formula taken from: http://en.wikipedia.org/wiki/Base64#MIME
+			final int fileSize = (int) ((existingSession.getPpLogo().length() - 814) / 1.37);
+			if (fileSize > uploadFileSizeByte) {
+				LOGGER.error("Could not save file. File is too large with " + fileSize + " Byte.");
+				throw new PayloadTooLargeException();
+			}
+		}
+                
+		return databaseDao.updateSession(existingSession);
 	}
 
 	/*
-- 
GitLab