From bbb7288cc6312b65c8b69aac490e9002d5f45592 Mon Sep 17 00:00:00 2001
From: Daniel Gerhardt <code@dgerhardt.net>
Date: Tue, 14 Feb 2017 13:40:12 +0100
Subject: [PATCH] Clean up code

* Remove unused code
* Optimize imports (group 10+ and static imports)
* Remove redundant variable assignments
* Replace explicit type parameters with <>
* Remove redundant catch blocks
* Use varargs instead of explicit array instantiation
* Weaken visibility of methods and fields
* Simplify conditions
* Do not use StringBuilder for simple concatenations
* Fix code style
* Remove invalid Javadoc
---
 .../thm/arsnova/CASLogoutSuccessHandler.java  |   5 +-
 .../de/thm/arsnova/CasUserDetailsService.java |   2 +-
 .../java/de/thm/arsnova/FeedbackStorage.java  |   6 +-
 src/main/java/de/thm/arsnova/ImageUtils.java  |  59 +----
 .../LoginAuthenticationSucessHandler.java     |   3 +-
 .../java/de/thm/arsnova/aop/RangeAspect.java  |   3 -
 .../de/thm/arsnova/aop/UserSessionAspect.java |   4 -
 .../de/thm/arsnova/cache/CacheBuster.java     |   1 -
 .../de/thm/arsnova/config/ExtraConfig.java    |  12 +-
 .../de/thm/arsnova/config/SecurityConfig.java |  21 +-
 .../controller/ConfigurationController.java   |  10 +-
 .../arsnova/controller/CourseController.java  |   2 +-
 .../LecturerQuestionController.java           |  27 +--
 .../arsnova/controller/LoginController.java   |   7 +-
 .../arsnova/controller/MotdController.java    |   5 +-
 .../SecurityExceptionControllerAdvice.java    |   2 +-
 .../arsnova/controller/SessionController.java |  10 +-
 .../arsnova/controller/SocketController.java  |  11 +-
 .../arsnova/controller/UserController.java    |   9 +-
 .../arsnova/controller/WelcomeController.java |   2 +-
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 205 ++++++++----------
 .../java/de/thm/arsnova/dao/IDatabaseDao.java |   3 -
 .../de/thm/arsnova/domain/CourseScore.java    |  11 +-
 .../domain/ILearningProgressFactory.java      |   2 +-
 .../thm/arsnova/domain/LearningProgress.java  |   4 +-
 .../de/thm/arsnova/domain/QuestionScore.java  |   3 +-
 .../de/thm/arsnova/entities/Feedback.java     |   2 +-
 .../de/thm/arsnova/entities/LoggedIn.java     |   2 +-
 .../de/thm/arsnova/entities/Question.java     |   9 +-
 .../java/de/thm/arsnova/entities/Session.java |   4 +-
 .../de/thm/arsnova/entities/SessionInfo.java  |   2 +-
 .../java/de/thm/arsnova/entities/User.java    |   1 -
 .../transport/ImportExportSession.java        |  15 +-
 .../transport/InterposedQuestion.java         |   2 +-
 .../de/thm/arsnova/events/LockVoteEvent.java  |   2 +-
 .../events/PiRoundDelayedStartEvent.java      |   2 +-
 .../thm/arsnova/events/PiRoundEndEvent.java   |   2 +-
 .../thm/arsnova/events/PiRoundResetEvent.java |   2 +-
 .../thm/arsnova/events/UnlockVoteEvent.java   |   2 +-
 .../ApplicationPermissionEvaluator.java       |  20 +-
 .../security/CustomLdapUserDetailsMapper.java |   3 +-
 .../security/DbUserDetailsService.java        |   2 +-
 .../thm/arsnova/services/FeedbackService.java |   6 +-
 .../de/thm/arsnova/services/MotdService.java  |  12 +-
 .../thm/arsnova/services/QuestionService.java |  15 +-
 .../services/ResponseProviderService.java     |   4 +-
 .../thm/arsnova/services/SessionService.java  |  17 +-
 .../de/thm/arsnova/services/UserService.java  |  34 +--
 .../arsnova/socket/ARSnovaSocketIOServer.java |  40 ++--
 .../java/de/thm/arsnova/web/CacheControl.java |   4 +-
 .../web/ResponseInterceptorHandler.java       |   2 +-
 .../core/metrics/MonitorGauges.java           |   2 +-
 .../java/de/thm/arsnova/ImageUtilsTest.java   |   5 +-
 .../arsnova/config/TestSecurityConfig.java    |   2 +-
 .../controller/AbstractControllerTest.java    |   2 +-
 .../controller/CourseControllerTest.java      |   2 +-
 .../controller/FeedbackControllerTest.java    |   5 +-
 .../LecturerQuestionControllerTest.java       |   6 +-
 .../controller/LoginControllerTest.java       |   5 +-
 .../controller/SessionControllerTest.java     |  11 +-
 .../controller/StatisticsControllerTest.java  |   5 +-
 .../java/de/thm/arsnova/dao/NovaViewTest.java |   4 +-
 .../de/thm/arsnova/dao/StubDatabaseDao.java   |  12 +-
 .../arsnova/services/QuestionServiceTest.java |   6 +-
 .../arsnova/services/SessionServiceTest.java  |  10 +-
 .../thm/arsnova/services/UserServiceTest.java |   8 +-
 66 files changed, 276 insertions(+), 444 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/CASLogoutSuccessHandler.java b/src/main/java/de/thm/arsnova/CASLogoutSuccessHandler.java
index e34d6737..074832b3 100644
--- a/src/main/java/de/thm/arsnova/CASLogoutSuccessHandler.java
+++ b/src/main/java/de/thm/arsnova/CASLogoutSuccessHandler.java
@@ -47,7 +47,8 @@ public class CASLogoutSuccessHandler implements LogoutSuccessHandler {
 			final HttpServletResponse response,
 			final Authentication authentication
 	) throws IOException, ServletException {
-		String referer = request.getHeader("referer");
+		/* Typo in "referer" intended. It is in the spec. */
+		String referrer = request.getHeader("referer");
 		if (response.isCommitted()) {
 			LOGGER.info("Response has already been committed. Unable to redirect to target");
 			return;
@@ -55,7 +56,7 @@ public class CASLogoutSuccessHandler implements LogoutSuccessHandler {
 		redirectStrategy.sendRedirect(
 				request,
 				response,
-				(casUrl + "/logout?url=") + (referer != null ? referer : defaultTarget)
+				(casUrl + "/logout?url=") + (referrer != null ? referrer : defaultTarget)
 		);
 	}
 
diff --git a/src/main/java/de/thm/arsnova/CasUserDetailsService.java b/src/main/java/de/thm/arsnova/CasUserDetailsService.java
index 234b7be9..9261648f 100644
--- a/src/main/java/de/thm/arsnova/CasUserDetailsService.java
+++ b/src/main/java/de/thm/arsnova/CasUserDetailsService.java
@@ -36,7 +36,7 @@ public class CasUserDetailsService extends AbstractCasAssertionUserDetailsServic
 
 	@Override
 	protected UserDetails loadUserDetails(final Assertion assertion) {
-		final List<GrantedAuthority> grantedAuthorities = new ArrayList<GrantedAuthority>();
+		final List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
 		grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_USER"));
 
 		return new User(
diff --git a/src/main/java/de/thm/arsnova/FeedbackStorage.java b/src/main/java/de/thm/arsnova/FeedbackStorage.java
index 40927445..bb72be0d 100644
--- a/src/main/java/de/thm/arsnova/FeedbackStorage.java
+++ b/src/main/java/de/thm/arsnova/FeedbackStorage.java
@@ -58,7 +58,7 @@ public class FeedbackStorage {
 	}
 
 	private final Map<Session, Map<User, FeedbackStorageObject>> data =
-			new ConcurrentHashMap<Session, Map<User, FeedbackStorageObject>>();
+			new ConcurrentHashMap<>();
 
 	public Feedback getFeedback(final Session session) {
 		int a = 0;
@@ -116,7 +116,7 @@ public class FeedbackStorage {
 
 	@Transactional(isolation = Isolation.READ_COMMITTED)
 	public Map<Session, List<User>> cleanFeedbackVotes(final int cleanupFeedbackDelay) {
-		final Map<Session, List<User>> removedFeedbackOfUsersInSession = new HashMap<Session, List<User>>();
+		final Map<Session, List<User>> removedFeedbackOfUsersInSession = new HashMap<>();
 		for (final Session session : data.keySet()) {
 			if (!session.getFeatures().isLiveClicker()) {
 				List<User> affectedUsers = cleanFeedbackVotesInSession(session, cleanupFeedbackDelay);
@@ -135,7 +135,7 @@ public class FeedbackStorage {
 		final boolean forceClean = cleanupFeedbackDelayInMins == 0;
 
 		final Map<User, FeedbackStorageObject> sessionFeedbacks = data.get(session);
-		final List<User> affectedUsers = new ArrayList<User>();
+		final List<User> affectedUsers = new ArrayList<>();
 
 		if (sessionFeedbacks != null) {
 			for (final Map.Entry<User, FeedbackStorageObject> entry : sessionFeedbacks.entrySet()) {
diff --git a/src/main/java/de/thm/arsnova/ImageUtils.java b/src/main/java/de/thm/arsnova/ImageUtils.java
index 87b1af15..0203e2a1 100644
--- a/src/main/java/de/thm/arsnova/ImageUtils.java
+++ b/src/main/java/de/thm/arsnova/ImageUtils.java
@@ -31,7 +31,6 @@ import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.MalformedURLException;
 import java.net.URL;
 
 /**
@@ -44,18 +43,18 @@ import java.net.URL;
 public class ImageUtils {
 
 	// Or whatever size you want to read in at a time.
-	private static final int CHUNK_SIZE = 4096;
+	static final int CHUNK_SIZE = 4096;
 
 	/** Base64-Mimetype-Prefix start */
-	public static final String IMAGE_PREFIX_START = "data:image/";
+	static final String IMAGE_PREFIX_START = "data:image/";
 
 	/** Base64-Mimetype-Prefix middle part */
-	public static final String IMAGE_PREFIX_MIDDLE = ";base64,";
+	static final String IMAGE_PREFIX_MIDDLE = ";base64,";
 
 	/* default value is 200 pixel in width, set the value in the configuration file */
-	private static final int THUMB_WIDTH_DEFAULT = 200;
+	static final int THUMB_WIDTH_DEFAULT = 200;
 	/* default value is 200 pixel in height, set the value in the configuration file */
-	private static final int THUMB_HEIGHT_DEFAULT = 200;
+	static final int THUMB_HEIGHT_DEFAULT = 200;
 
 	public static final Logger LOGGER = LoggerFactory.getLogger(ImageUtils.class);
 
@@ -74,7 +73,6 @@ public class ImageUtils {
 	public String encodeImageToString(final String imageUrl) {
 
 		final String[] urlParts = imageUrl.split("\\.");
-		final StringBuilder result   = new StringBuilder();
 
 		// get format
 		//
@@ -83,10 +81,7 @@ public class ImageUtils {
 		if (urlParts.length > 0) {
 			final String extension = urlParts[urlParts.length - 1];
 
-			result.append("data:image/" + extension + ";base64,");
-			result.append(Base64.encodeBase64String(convertFileToByteArray(imageUrl)));
-
-			return result.toString();
+			return "data:image/" + extension + ";base64," + Base64.encodeBase64String(convertFileToByteArray(imageUrl));
 		}
 
 		return null;
@@ -98,7 +93,7 @@ public class ImageUtils {
 	 * @param maybeImage The Image as a base64 encoded {@link String}
 	 * @return true if the string is a potentially a base 64 encoded image.
 	 */
-	public boolean isBase64EncodedImage(String maybeImage) {
+	boolean isBase64EncodedImage(String maybeImage) {
 		return extractImageInfo(maybeImage) != null;
 	}
 
@@ -113,7 +108,7 @@ public class ImageUtils {
 	 * @return two-dimensional {@link String}-array containing the information
 	 *         "extension" and the "raw-image-{@link String}"
 	 */
-	public String[] extractImageInfo(final String maybeImage) {
+	String[] extractImageInfo(final String maybeImage) {
 		if (maybeImage == null) {
 			return null;
 		} else if (maybeImage.isEmpty()) {
@@ -159,7 +154,7 @@ public class ImageUtils {
 	 * @return The rescaled Image as Base64-encoded {@link String}, returns null
 	 *         if the passed-on image isn't in a valid format (a Base64-Image).
 	 */
-	public String createCover(String originalImageString, final int width, final int height) {
+	String createCover(String originalImageString, final int width, final int height) {
 		if (!isBase64EncodedImage(originalImageString)) {
 			return null;
 		} else {
@@ -228,43 +223,13 @@ public class ImageUtils {
 		return false;
 	}
 
-	/**
-	 * Gets the bytestream of an image url.
-	 * s
-	 * @param  imageUrl The image url as a {@link String}
-	 * @return The <code>byte[]</code> of the image on success, otherwise <code>null</code>.
-	 */
-	public byte[] convertImageToByteArray(final String imageUrl, final String extension) {
-
-		try {
-			final URL url = new URL(imageUrl);
-			final BufferedImage image = ImageIO.read(url);
-			final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
-			ImageIO.write(image, extension, baos);
-
-			baos.flush();
-			baos.close();
-			return baos.toByteArray();
-
-		} catch (final MalformedURLException e) {
-			LOGGER.error(e.getLocalizedMessage());
-		} catch (final IOException e) {
-			LOGGER.error(e.getLocalizedMessage());
-		}
-
-		return null;
-	}
-
 	/**
 	 * Gets the bytestream of an image url.
 	 *
 	 * @param  imageUrl The image url as a {@link String}
 	 * @return The <code>byte[]</code> of the image on success, otherwise <code>null</code>.
 	 */
-	public byte[] convertFileToByteArray(final String imageUrl) {
-
-
+	byte[] convertFileToByteArray(final String imageUrl) {
 		try {
 			final URL url = new URL(imageUrl);
 			final ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -282,9 +247,7 @@ public class ImageUtils {
 
 			return baos.toByteArray();
 
-		} catch (final MalformedURLException e) {
-			LOGGER.error(e.getLocalizedMessage());
-		} catch (final IOException e) {
+		} catch (IOException e) {
 			LOGGER.error(e.getLocalizedMessage());
 		}
 
diff --git a/src/main/java/de/thm/arsnova/LoginAuthenticationSucessHandler.java b/src/main/java/de/thm/arsnova/LoginAuthenticationSucessHandler.java
index 9b0bc477..f84cdaf5 100644
--- a/src/main/java/de/thm/arsnova/LoginAuthenticationSucessHandler.java
+++ b/src/main/java/de/thm/arsnova/LoginAuthenticationSucessHandler.java
@@ -44,9 +44,8 @@ public class LoginAuthenticationSucessHandler extends
 		if (session == null || session.getAttribute("ars-login-success-url") == null) {
 			return targetUrl;
 		}
-		String redirect = (String) session.getAttribute("ars-login-success-url");
 
-		return redirect;
+		return (String) session.getAttribute("ars-login-success-url");
 	}
 
 	public void setTargetUrl(final String url) {
diff --git a/src/main/java/de/thm/arsnova/aop/RangeAspect.java b/src/main/java/de/thm/arsnova/aop/RangeAspect.java
index 7975225d..161199ef 100644
--- a/src/main/java/de/thm/arsnova/aop/RangeAspect.java
+++ b/src/main/java/de/thm/arsnova/aop/RangeAspect.java
@@ -56,9 +56,6 @@ public class RangeAspect {
 	private static final Logger logger = LoggerFactory.getLogger(RangeAspect.class);
 
 	/** Sets start and end parameters based on request's range header and sets content range header for the response.
-	 *
-	 * @param controller
-	 * @throws Throwable
 	 */
 	@Around("execution(java.util.List+ de.thm.arsnova.controller.*.*(..)) && this(controller) && @annotation(de.thm.arsnova.web.Pagination)")
 	public Object handlePaginationRange(ProceedingJoinPoint pjp, final PaginationController controller) throws Throwable {
diff --git a/src/main/java/de/thm/arsnova/aop/UserSessionAspect.java b/src/main/java/de/thm/arsnova/aop/UserSessionAspect.java
index 155351af..80bfd4dc 100644
--- a/src/main/java/de/thm/arsnova/aop/UserSessionAspect.java
+++ b/src/main/java/de/thm/arsnova/aop/UserSessionAspect.java
@@ -35,10 +35,6 @@ public class UserSessionAspect {
 	private UserSessionService userSessionService;
 
 	/** Sets current user and ARSnova session in session scoped UserSessionService
-	 *
-	 * @param jp
-	 * @param keyword
-	 * @param session
 	 */
 	@AfterReturning(
 			pointcut = "execution(public * de.thm.arsnova.services.SessionService.joinSession(..)) && args(keyword)",
diff --git a/src/main/java/de/thm/arsnova/cache/CacheBuster.java b/src/main/java/de/thm/arsnova/cache/CacheBuster.java
index 930d7f19..913c36b2 100644
--- a/src/main/java/de/thm/arsnova/cache/CacheBuster.java
+++ b/src/main/java/de/thm/arsnova/cache/CacheBuster.java
@@ -19,7 +19,6 @@ package de.thm.arsnova.cache;
 
 import de.thm.arsnova.events.*;
 import org.springframework.cache.annotation.CacheEvict;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 /**
diff --git a/src/main/java/de/thm/arsnova/config/ExtraConfig.java b/src/main/java/de/thm/arsnova/config/ExtraConfig.java
index 254e2d36..b0e0cdb2 100644
--- a/src/main/java/de/thm/arsnova/config/ExtraConfig.java
+++ b/src/main/java/de/thm/arsnova/config/ExtraConfig.java
@@ -18,11 +18,11 @@
 package de.thm.arsnova.config;
 
 import de.thm.arsnova.ImageUtils;
-import de.thm.arsnova.web.CorsFilter;
 import de.thm.arsnova.connector.client.ConnectorClient;
 import de.thm.arsnova.connector.client.ConnectorClientImpl;
 import de.thm.arsnova.socket.ARSnovaSocket;
 import de.thm.arsnova.socket.ARSnovaSocketIOServer;
+import de.thm.arsnova.web.CorsFilter;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.config.PropertiesFactoryBean;
@@ -36,11 +36,9 @@ import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
 import org.springframework.core.env.Environment;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.core.io.FileSystemResource;
-import org.springframework.core.io.Resource;
 import org.springframework.web.servlet.config.annotation.EnableWebMvc;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
-
 import java.util.Arrays;
 
 /**
@@ -70,10 +68,10 @@ public class ExtraConfig extends WebMvcConfigurerAdapter {
 	@Bean
 	public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
 		final PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
-		configurer.setLocations(new Resource[] {
-				new ClassPathResource("arsnova.properties.example"),
-				new FileSystemResource("/etc/arsnova/arsnova.properties"),
-		});
+		configurer.setLocations(
+			new ClassPathResource("arsnova.properties.example"),
+			new FileSystemResource("/etc/arsnova/arsnova.properties")
+		);
 		configurer.setIgnoreResourceNotFound(true);
 		configurer.setIgnoreUnresolvablePlaceholders(false);
 		return configurer;
diff --git a/src/main/java/de/thm/arsnova/config/SecurityConfig.java b/src/main/java/de/thm/arsnova/config/SecurityConfig.java
index 85494b75..21af4606 100644
--- a/src/main/java/de/thm/arsnova/config/SecurityConfig.java
+++ b/src/main/java/de/thm/arsnova/config/SecurityConfig.java
@@ -41,7 +41,6 @@ import org.springframework.context.annotation.Profile;
 import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.core.io.FileSystemResource;
-import org.springframework.core.io.Resource;
 import org.springframework.ldap.core.support.LdapContextSource;
 import org.springframework.security.access.PermissionEvaluator;
 import org.springframework.security.authentication.AuthenticationManager;
@@ -140,7 +139,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter implements Serv
 		if (twitterEnabled) {
 			http.addFilterAfter(twitterFilter(), CasAuthenticationFilter.class);
 		}
-	};
+	}
 
 	@Override
 	protected void configure(AuthenticationManagerBuilder auth) throws Exception {
@@ -170,7 +169,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter implements Serv
 			auth.authenticationProvider(twitterAuthProvider());
 		}
 		logger.info("Enabled authentication providers: {}", providers);
-	};
+	}
 
 	@Bean
 	@Override
@@ -181,10 +180,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter implements Serv
 	@Bean
 	public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
 		final PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
-		configurer.setLocations(new Resource[] {
-				new ClassPathResource("arsnova.properties.example"),
-				new FileSystemResource("file:///etc/arsnova/arsnova.properties"),
-		});
+		configurer.setLocations(
+			new ClassPathResource("arsnova.properties.example"),
+			new FileSystemResource("file:///etc/arsnova/arsnova.properties")
+		);
 		configurer.setIgnoreResourceNotFound(true);
 		configurer.setIgnoreUnresolvablePlaceholders(false);
 
@@ -251,7 +250,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter implements Serv
 	// LDAP Authentication Configuration
 
 	@Bean
-	public LdapAuthenticationProvider ldapAuthenticationProvider() throws Exception {
+	public LdapAuthenticationProvider ldapAuthenticationProvider() {
 		LdapAuthenticationProvider ldapAuthenticationProvider = new LdapAuthenticationProvider(ldapAuthenticator(), ldapAuthoritiesPopulator());
 		ldapAuthenticationProvider.setUserDetailsContextMapper(customLdapUserDetailsMapper());
 
@@ -259,7 +258,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter implements Serv
 	}
 
 	@Bean
-	public LdapContextSource ldapContextSource() throws Exception {
+	public LdapContextSource ldapContextSource() {
 		DefaultSpringSecurityContextSource contextSource = new DefaultSpringSecurityContextSource(ldapUrl);
 		/* TODO: implement support for LDAP bind using manager credentials */
 		if (!"".equals(ldapManagerUserDn) && !"".equals(ldapManagerPassword)) {
@@ -272,7 +271,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter implements Serv
 	}
 
 	@Bean
-	public LdapAuthenticator ldapAuthenticator() throws Exception {
+	public LdapAuthenticator ldapAuthenticator() {
 		BindAuthenticator authenticator = new BindAuthenticator(ldapContextSource());
 		authenticator.setUserAttributes(new String[] {ldapUserIdAttr});
 		if (!"".equals(ldapSearchFilter)) {
@@ -287,7 +286,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter implements Serv
 	}
 
 	@Bean
-	public LdapAuthoritiesPopulator ldapAuthoritiesPopulator() throws Exception {
+	public LdapAuthoritiesPopulator ldapAuthoritiesPopulator() {
 		return new NullLdapAuthoritiesPopulator();
 	}
 
diff --git a/src/main/java/de/thm/arsnova/controller/ConfigurationController.java b/src/main/java/de/thm/arsnova/controller/ConfigurationController.java
index 45a6f0b1..75970e43 100644
--- a/src/main/java/de/thm/arsnova/controller/ConfigurationController.java
+++ b/src/main/java/de/thm/arsnova/controller/ConfigurationController.java
@@ -162,10 +162,10 @@ public class ConfigurationController extends AbstractController {
 	@RequestMapping(method = RequestMethod.GET)
 	@ResponseBody
 	public HashMap<String, Object> getConfiguration(HttpServletRequest request) {
-		HashMap<String, Object> config = new HashMap<String, Object>();
-		HashMap<String, Boolean> features = new HashMap<String, Boolean>();
-		HashMap<String, String> publicPool = new HashMap<String, String>();
-		HashMap<String, Object> splashscreen = new HashMap<String, Object>();
+		HashMap<String, Object> config = new HashMap<>();
+		HashMap<String, Boolean> features = new HashMap<>();
+		HashMap<String, String> publicPool = new HashMap<>();
+		HashMap<String, Object> splashscreen = new HashMap<>();
 
 		/* The API path could be unknown to the client in case the request was forwarded */
 		if ("".equals(apiPath)) {
@@ -268,7 +268,7 @@ public class ConfigurationController extends AbstractController {
 		}
 
 		if (!"".equals(trackingTrackerUrl)) {
-			HashMap<String, String> tracking = new HashMap<String, String>();
+			HashMap<String, String> tracking = new HashMap<>();
 			config.put("tracking", tracking);
 
 			tracking.put("provider", trackingProvider);
diff --git a/src/main/java/de/thm/arsnova/controller/CourseController.java b/src/main/java/de/thm/arsnova/controller/CourseController.java
index 029b393a..adc24428 100644
--- a/src/main/java/de/thm/arsnova/controller/CourseController.java
+++ b/src/main/java/de/thm/arsnova/controller/CourseController.java
@@ -69,7 +69,7 @@ public class CourseController extends AbstractController {
 			throw new NotImplementedException();
 		}
 
-		final List<Course> result = new ArrayList<Course>();
+		final List<Course> result = new ArrayList<>();
 
 		for (final Course course : connectorClient.getCourses(currentUser.getUsername()).getCourse()) {
 			if (
diff --git a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
index 2f621b9c..8ce84744 100644
--- a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
+++ b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
@@ -234,19 +234,15 @@ public class LecturerQuestionController extends PaginationController {
 			@RequestParam(value = "lecturequestionsonly", defaultValue = "false", required = false) final boolean lectureQuestionsOnly,
 			@RequestParam(value = "preparationquestionsonly", defaultValue = "false", required = false) final boolean preparationQuestionsOnly
 			) {
-		boolean p = true;
+		boolean p = publish == null || publish;
 		List<Question> questions;
 
-		if (publish != null) {
-			p = publish;
-		}
-
 		if (lectureQuestionsOnly) {
 			questions = questionService.getLectureQuestions(sessionkey);
-			questionService.publishQuestions(sessionkey, publish, questions);
+			questionService.publishQuestions(sessionkey, p, questions);
 		} else if (preparationQuestionsOnly) {
 			questions = questionService.getPreparationQuestions(sessionkey);
-			questionService.publishQuestions(sessionkey, publish, questions);
+			questionService.publishQuestions(sessionkey, p, questions);
 		} else {
 			questionService.publishAll(sessionkey, p);
 		}
@@ -309,7 +305,7 @@ public class LecturerQuestionController extends PaginationController {
 			questions = questionService.replaceImageData(questions);
 		}
 
-		return new PaginationListDecorator<Question>(questions, offset, limit);
+		return new PaginationListDecorator<>(questions, offset, limit);
 	}
 
 	@ApiOperation(value = "Delete skill questions",
@@ -392,8 +388,6 @@ public class LecturerQuestionController extends PaginationController {
 	/**
 	 * returns a JSON document which represents the given answer of a question.
 	 *
-	 * @param sessionKey
-	 *            Session Keyword to which the question belongs to
 	 * @param questionId
 	 *            CouchDB Question ID for which the given answer should be
 	 *            retrieved
@@ -428,12 +422,9 @@ public class LecturerQuestionController extends PaginationController {
 	 * <tt>answerText</tt>, <tt>answerSubject</tt> and <tt>answerCount</tt>
 	 * properties are set
 	 *
-	 * @param sessionKey
-	 *            Session Keyword to which the question belongs to
 	 * @param questionId
 	 *            CouchDB Question ID for which the given answers should be
 	 *            retrieved
-	 * @return List<{@link Answer}> or {@link NotFoundException}
 	 * @throws NotFoundException
 	 *             if wrong session, wrong question or no answers was given
 	 * @throws ForbiddenException
@@ -448,7 +439,7 @@ public class LecturerQuestionController extends PaginationController {
 			@RequestParam(value = "all", required = false, defaultValue = "false") final Boolean allAnswers,
 			final HttpServletResponse response
 			) {
-		List<Answer> answers = null;
+		List<Answer> answers;
 		if (allAnswers) {
 			answers = questionService.getAllAnswers(questionId, -1, -1);
 		} else if (null == piRound) {
@@ -462,7 +453,7 @@ public class LecturerQuestionController extends PaginationController {
 			answers = questionService.getAnswers(questionId, piRound, offset, limit);
 		}
 		if (answers == null) {
-			return new ArrayList<Answer>();
+			return new ArrayList<>();
 		}
 		return answers;
 	}
@@ -543,8 +534,6 @@ public class LecturerQuestionController extends PaginationController {
 
 	/**
 	 *
-	 * @param sessionKey
-	 *            Session Keyword to which the question belongs to
 	 * @param questionId
 	 *            CouchDB Question ID for which the given answers should be
 	 *            retrieved
@@ -584,12 +573,10 @@ public class LecturerQuestionController extends PaginationController {
 			nickname = "getAnswerAndAbstentionCount")
 	@RequestMapping(value = "/{questionId}/answerandabstentioncount", method = RequestMethod.GET)
 	public List<Integer> getAnswerAndAbstentionCount(@PathVariable final String questionId) {
-		List<Integer> list = Arrays.asList(
+		return Arrays.asList(
 			questionService.getAnswerCount(questionId),
 			questionService.getAbstentionAnswerCount(questionId)
 		);
-
-		return list;
 	}
 
 	@ApiOperation(value = "Get all Freetext answers by a question, identified by the question ID",
diff --git a/src/main/java/de/thm/arsnova/controller/LoginController.java b/src/main/java/de/thm/arsnova/controller/LoginController.java
index 010bcb89..11c8a7d0 100644
--- a/src/main/java/de/thm/arsnova/controller/LoginController.java
+++ b/src/main/java/de/thm/arsnova/controller/LoginController.java
@@ -59,7 +59,6 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.text.MessageFormat;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 
@@ -207,7 +206,7 @@ public class LoginController extends AbstractController {
 				response.setStatus(HttpStatus.UNAUTHORIZED.value());
 			}
 		} else if (guestEnabled && "guest".equals(type)) {
-			List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
+			List<GrantedAuthority> authorities = new ArrayList<>();
 			authorities.add(new SimpleGrantedAuthority("ROLE_GUEST"));
 			if (username == null || !username.startsWith("Guest") || username.length() != MAX_USERNAME_LENGTH) {
 				username = "Guest" + Sha512DigestUtils.shaHex(request.getSession().getId()).substring(0, MAX_GUESTHASH_LENGTH);
@@ -314,7 +313,7 @@ public class LoginController extends AbstractController {
 	@RequestMapping(value = { "/auth/services" }, method = RequestMethod.GET)
 	@ResponseBody
 	public List<ServiceDescription> getServices(final HttpServletRequest request) {
-		List<ServiceDescription> services = new ArrayList<ServiceDescription>();
+		List<ServiceDescription> services = new ArrayList<>();
 
 		if ("".equals(apiPath)) {
 			apiPath = request.getContextPath();
@@ -417,7 +416,7 @@ public class LoginController extends AbstractController {
 	}
 
 	private Collection<GrantedAuthority> getAuthorities() {
-		List<GrantedAuthority> authList = new ArrayList<GrantedAuthority>();
+		List<GrantedAuthority> authList = new ArrayList<>();
 		authList.add(new SimpleGrantedAuthority("ROLE_USER"));
 		return authList;
 	}
diff --git a/src/main/java/de/thm/arsnova/controller/MotdController.java b/src/main/java/de/thm/arsnova/controller/MotdController.java
index 8a3ba503..5a77d9e3 100644
--- a/src/main/java/de/thm/arsnova/controller/MotdController.java
+++ b/src/main/java/de/thm/arsnova/controller/MotdController.java
@@ -38,7 +38,6 @@ import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -67,7 +66,7 @@ public class MotdController extends AbstractController {
 		@ApiParam(value = "audience", required = false) @RequestParam(value = "audience", defaultValue = "all") final String audience,
 		@ApiParam(value = "sessionkey", required = false) @RequestParam(value = "sessionkey", defaultValue = "null") final String sessionkey
 	) {
-		List<Motd> motds = new ArrayList<Motd>();
+		List<Motd> motds;
 		Date client = new Date(System.currentTimeMillis());
 		if (!clientdate.isEmpty()) {
 			client.setTime(Long.parseLong(clientdate));
@@ -96,7 +95,7 @@ public class MotdController extends AbstractController {
 			final HttpServletResponse response
 			) {
 		if (motd != null) {
-			Motd newMotd = new Motd();
+			Motd newMotd;
 			if (motd.getAudience().equals("session") && motd.getSessionkey() != null) {
 				newMotd = motdService.saveSessionMotd(motd.getSessionkey(), motd);
 			} else {
diff --git a/src/main/java/de/thm/arsnova/controller/SecurityExceptionControllerAdvice.java b/src/main/java/de/thm/arsnova/controller/SecurityExceptionControllerAdvice.java
index 83262822..128b63de 100644
--- a/src/main/java/de/thm/arsnova/controller/SecurityExceptionControllerAdvice.java
+++ b/src/main/java/de/thm/arsnova/controller/SecurityExceptionControllerAdvice.java
@@ -52,7 +52,7 @@ public class SecurityExceptionControllerAdvice {
 			final Exception e,
 			final HttpServletRequest req
 			) {
-		final Map<String, String> result = new HashMap<String, String>();
+		final Map<String, String> result = new HashMap<>();
 		result.put("code", "500");
 		result.put("status", "Internal server error");
 		result.put("message", e.getMessage());
diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java
index 97bd166a..e27e60fb 100644
--- a/src/main/java/de/thm/arsnova/controller/SessionController.java
+++ b/src/main/java/de/thm/arsnova/controller/SessionController.java
@@ -17,7 +17,6 @@
  */
 package de.thm.arsnova.controller;
 
-import org.springframework.context.annotation.Import;
 import de.thm.arsnova.connector.model.Course;
 import de.thm.arsnova.entities.Session;
 import de.thm.arsnova.entities.SessionFeature;
@@ -114,7 +113,7 @@ public class SessionController extends PaginationController {
 	@ResponseStatus(HttpStatus.CREATED)
 	public Session postNewSession(@ApiParam(value = "current session", required = true) @RequestBody final Session session, final HttpServletResponse response) {
 		if (session != null && session.isCourseSession()) {
-			final List<Course> courses = new ArrayList<Course>();
+			final List<Course> courses = new ArrayList<>();
 			final Course course = new Course();
 			course.setId(session.getCourseId());
 			courses.add(course);
@@ -171,7 +170,7 @@ public class SessionController extends PaginationController {
 					"username", defaultValue = "") final String username,
 			final HttpServletResponse response
 			) {
-		List<Session> sessions = null;
+		List<Session> sessions;
 
 		if (!username.equals("")) {
 			try {
@@ -218,9 +217,6 @@ public class SessionController extends PaginationController {
 
 	/**
 	 * Returns a list of my own sessions with only the necessary information like name, keyword, or counters.
-	 * @param statusOnly The flag that has to be set in order to get this shortened list.
-	 * @param response
-	 * @return
 	 */
 	@ApiOperation(value = "Retrieves a Session",
 			nickname = "getMySessions")
@@ -310,7 +306,7 @@ public class SessionController extends PaginationController {
 			@ApiParam(value = "wether interposed questions shall be exported", required = true) @RequestParam(value = "withFeedbackQuestions", defaultValue = "false") final Boolean withFeedbackQuestions,
 			final HttpServletResponse response
 		) {
-		List<ImportExportSession> sessions = new ArrayList<ImportExportSession>();
+		List<ImportExportSession> sessions = new ArrayList<>();
 		ImportExportSession temp;
 		for (String key : sessionkey) {
 			sessionService.setActive(key, false);
diff --git a/src/main/java/de/thm/arsnova/controller/SocketController.java b/src/main/java/de/thm/arsnova/controller/SocketController.java
index 6aea454e..266c22eb 100644
--- a/src/main/java/de/thm/arsnova/controller/SocketController.java
+++ b/src/main/java/de/thm/arsnova/controller/SocketController.java
@@ -67,10 +67,10 @@ public class SocketController extends AbstractController {
 		@ApiResponse(code = 403, message = HTML_STATUS_403)
 	})
 	@RequestMapping(method = RequestMethod.POST, value = "/assign")
-	public void authorize(@ApiParam(value = "sessionMap", required = true) @RequestBody final Map < String, String> sessionMap, @ApiParam(value = "response", required = true) final HttpServletResponse response) {
+	public void authorize(@ApiParam(value = "sessionMap", required = true) @RequestBody final Map <String, String> sessionMap, @ApiParam(value = "response", required = true) final HttpServletResponse response) {
 		String socketid = sessionMap.get("session");
 		if (null == socketid) {
-			LOGGER.debug("Expected property 'session' missing", socketid);
+			LOGGER.debug("Expected property 'session' missing");
 			response.setStatus(HttpStatus.BAD_REQUEST.value());
 			return;
 		}
@@ -89,12 +89,7 @@ public class SocketController extends AbstractController {
 			nickname = "getSocketUrl")
 	@RequestMapping(value = "/url", method = RequestMethod.GET)
 	public String getSocketUrl(final HttpServletRequest request) {
-		StringBuilder url = new StringBuilder();
-
-		url.append(server.isUseSSL() ? "https://" : "http://");
-		url.append(request.getServerName() + ":" + server.getPortNumber());
-
-		return url.toString();
+		return (server.isUseSSL() ? "https://" : "http://") + request.getServerName() + ":" + server.getPortNumber();
 	}
 
 }
diff --git a/src/main/java/de/thm/arsnova/controller/UserController.java b/src/main/java/de/thm/arsnova/controller/UserController.java
index b2ef22c2..c036beec 100644
--- a/src/main/java/de/thm/arsnova/controller/UserController.java
+++ b/src/main/java/de/thm/arsnova/controller/UserController.java
@@ -23,7 +23,6 @@ import de.thm.arsnova.services.UserSessionService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -52,7 +51,7 @@ public class UserController extends AbstractController {
 	public static final Logger LOGGER = LoggerFactory
 			.getLogger(UserController.class);
 
-	@RequestMapping(value = { "/register" }, method = RequestMethod.POST)
+	@RequestMapping(value = "/register", method = RequestMethod.POST)
 	public void register(@RequestParam final String username,
 			@RequestParam final String password,
 			final HttpServletRequest request, final HttpServletResponse response) {
@@ -64,7 +63,7 @@ public class UserController extends AbstractController {
 		response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
 	}
 
-	@RequestMapping(value = { "/{username}/activate" }, method = { RequestMethod.POST,
+	@RequestMapping(value = "/{username}/activate", method = { RequestMethod.POST,
 			RequestMethod.GET })
 	public void activate(
 			@PathVariable final String username,
@@ -81,7 +80,7 @@ public class UserController extends AbstractController {
 		response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
 	}
 
-	@RequestMapping(value = { "/{username}/" }, method = RequestMethod.DELETE)
+	@RequestMapping(value = "/{username}/", method = RequestMethod.DELETE)
 	public void activate(
 			@PathVariable final String username,
 			final HttpServletRequest request,
@@ -91,7 +90,7 @@ public class UserController extends AbstractController {
 		}
 	}
 
-	@RequestMapping(value = { "/{username}/resetpassword" }, method = RequestMethod.POST)
+	@RequestMapping(value = "/{username}/resetpassword", method = RequestMethod.POST)
 	public void resetPassword(
 			@PathVariable final String username,
 			@RequestParam(required = false) final String key,
diff --git a/src/main/java/de/thm/arsnova/controller/WelcomeController.java b/src/main/java/de/thm/arsnova/controller/WelcomeController.java
index 46ecf2d7..9313f5ef 100644
--- a/src/main/java/de/thm/arsnova/controller/WelcomeController.java
+++ b/src/main/java/de/thm/arsnova/controller/WelcomeController.java
@@ -81,7 +81,7 @@ public class WelcomeController extends AbstractController {
 	@RequestMapping(value = "/checkframeoptionsheader", method = RequestMethod.POST)
 	@ResponseStatus(HttpStatus.OK)
 	public void checkFrameOptionsHeader(
-			@RequestParam(required = true) final String url,
+			@RequestParam final String url,
 			final HttpServletRequest request
 		) {
 		/* Block requests from the server itself to prevent DoS attacks caused by request loops */
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index df7ba297..326f0fa9 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -56,17 +56,8 @@ import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
-import java.util.AbstractMap;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.Map.Entry;
-import java.util.Queue;
-import java.util.Set;
 import java.util.concurrent.ConcurrentLinkedQueue;
 
 /**
@@ -102,7 +93,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 
 	private ApplicationEventPublisher publisher;
 
-	private final Queue<AbstractMap.SimpleEntry<Document, AnswerQueueElement>> answerQueue = new ConcurrentLinkedQueue<AbstractMap.SimpleEntry<Document, AnswerQueueElement>>();
+	private final Queue<AbstractMap.SimpleEntry<Document, AnswerQueueElement>> answerQueue = new ConcurrentLinkedQueue<>();
 
 	public static final Logger LOGGER = LoggerFactory.getLogger(CouchDBDao.class);
 
@@ -196,7 +187,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 
 		final Results<Session> results = getDatabase().queryView(view, Session.class);
 
-		final List<Session> result = new ArrayList<Session>();
+		final List<Session> result = new ArrayList<>();
 		for (final RowResult<Session> row : results.getRows()) {
 			final Session session = row.getValue();
 			session.setCreator(row.getKey().getString(0));
@@ -213,7 +204,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 
 		final ViewResults sessions = getDatabase().view(view);
 
-		final List<Session> result = new ArrayList<Session>();
+		final List<Session> result = new ArrayList<>();
 
 		for (final Document d : sessions.getResults()) {
 			final Session session = (Session) JSONObject.toBean(
@@ -240,7 +231,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 
 		final ViewResults sessions = getDatabase().view(view);
 
-		final List<Session> result = new ArrayList<Session>();
+		final List<Session> result = new ArrayList<>();
 		for (final Document d : sessions.getResults()) {
 			final Session session = (Session) JSONObject.toBean(
 					d.getJSONObject().getJSONObject("value"),
@@ -258,7 +249,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	public List<SessionInfo> getMyPublicPoolSessionsInfo(final User user) {
 		final List<Session> sessions = this.getMyPublicPoolSessions(user);
 		if (sessions.isEmpty()) {
-			return new ArrayList<SessionInfo>();
+			return new ArrayList<>();
 		}
 		return getInfosForSessions(sessions);
 	}
@@ -267,7 +258,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	public List<SessionInfo> getMySessionsInfo(final User user, final int start, final int limit) {
 		final List<Session> sessions = this.getMySessions(user, start, limit);
 		if (sessions.isEmpty()) {
-			return new ArrayList<SessionInfo>();
+			return new ArrayList<>();
 		}
 		return getInfosForSessions(sessions);
 	}
@@ -284,7 +275,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		questionCountView.setGroup(true);
 		answerCountView.setSessionIdKeys(sessions);
 		answerCountView.setGroup(true);
-		List<String> unredInterposedQueryKeys = new ArrayList<String>();
+		List<String> unredInterposedQueryKeys = new ArrayList<>();
 		for (Session s : sessions) {
 			unredInterposedQueryKeys.add("[\"" + s.get_id() + "\",\"unread\"]");
 		}
@@ -297,7 +288,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		final ExtendedView answeredQuestionsView = new ExtendedView("answer/by_user");
 		final ExtendedView questionIdsView = new ExtendedView("skill_question/by_session_only_id_for_all");
 		questionIdsView.setSessionIdKeys(sessions);
-		List<String> answeredQuestionQueryKeys = new ArrayList<String>();
+		List<String> answeredQuestionQueryKeys = new ArrayList<>();
 		for (Session s : sessions) {
 			answeredQuestionQueryKeys.add("[\"" + user.getUsername() + "\",\"" + s.get_id() + "\"]");
 		}
@@ -307,8 +298,8 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 
 	private List<SessionInfo> getVisitedSessionInfoData(List<Session> sessions,
 			ExtendedView answeredQuestionsView, ExtendedView questionIdsView) {
-		final Map<String, Set<String>> answeredQuestionsMap = new HashMap<String, Set<String>>();
-		final Map<String, Set<String>> questionIdMap = new HashMap<String, Set<String>>();
+		final Map<String, Set<String>> answeredQuestionsMap = new HashMap<>();
+		final Map<String, Set<String>> questionIdMap = new HashMap<>();
 		final ViewResults answeredQuestionsViewResults = getDatabase().view(answeredQuestionsView);
 		final ViewResults questionIdsViewResults = getDatabase().view(questionIdsView);
 
@@ -318,7 +309,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			final String questionId = d.getString("value");
 			Set<String> questionIdsInSession = answeredQuestionsMap.get(sessionId);
 			if (questionIdsInSession == null) {
-				questionIdsInSession = new HashSet<String>();
+				questionIdsInSession = new HashSet<>();
 			}
 			questionIdsInSession.add(questionId);
 			answeredQuestionsMap.put(sessionId, questionIdsInSession);
@@ -330,29 +321,29 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			final String questionId = d.getId();
 			Set<String> questionIdsInSession = questionIdMap.get(sessionId);
 			if (questionIdsInSession == null) {
-				questionIdsInSession = new HashSet<String>();
+				questionIdsInSession = new HashSet<>();
 			}
 			questionIdsInSession.add(questionId);
 			questionIdMap.put(sessionId, questionIdsInSession);
 		}
 
 		// For each session, count the question IDs that are not yet answered
-		Map<String, Integer> unansweredQuestionsCountMap = new HashMap<String, Integer>();
+		Map<String, Integer> unansweredQuestionsCountMap = new HashMap<>();
 		for (final Session s : sessions) {
 			if (!questionIdMap.containsKey(s.get_id())) {
 				continue;
 			}
 			// Note: create a copy of the first set so that we don't modify the contents in the original set
-			Set<String> questionIdsInSession = new HashSet<String>(questionIdMap.get(s.get_id()));
+			Set<String> questionIdsInSession = new HashSet<>(questionIdMap.get(s.get_id()));
 			Set<String> answeredQuestionIdsInSession = answeredQuestionsMap.get(s.get_id());
 			if (answeredQuestionIdsInSession == null) {
-				answeredQuestionIdsInSession = new HashSet<String>();
+				answeredQuestionIdsInSession = new HashSet<>();
 			}
 			questionIdsInSession.removeAll(answeredQuestionIdsInSession);
 			unansweredQuestionsCountMap.put(s.get_id(), questionIdsInSession.size());
 		}
 
-		List<SessionInfo> sessionInfos = new ArrayList<SessionInfo>();
+		List<SessionInfo> sessionInfos = new ArrayList<>();
 		for (Session session : sessions) {
 			int numUnanswered = 0;
 
@@ -376,24 +367,24 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		final ViewResults interposedCountViewResults = getDatabase().view(interposedCountView);
 		final ViewResults unredInterposedCountViewResults = getDatabase().view(unredInterposedCountView);
 
-		Map<String, Integer> questionCountMap = new HashMap<String, Integer>();
+		Map<String, Integer> questionCountMap = new HashMap<>();
 		for (final Document d : questionCountViewResults.getResults()) {
 			questionCountMap.put(d.getString("key"), d.getInt("value"));
 		}
-		Map<String, Integer> answerCountMap = new HashMap<String, Integer>();
+		Map<String, Integer> answerCountMap = new HashMap<>();
 		for (final Document d : answerCountViewResults.getResults()) {
 			answerCountMap.put(d.getString("key"), d.getInt("value"));
 		}
-		Map<String, Integer> interposedCountMap = new HashMap<String, Integer>();
+		Map<String, Integer> interposedCountMap = new HashMap<>();
 		for (final Document d : interposedCountViewResults.getResults()) {
 			interposedCountMap.put(d.getString("key"), d.getInt("value"));
 		}
-		Map<String, Integer> unredInterposedCountMap = new HashMap<String, Integer>();
+		Map<String, Integer> unredInterposedCountMap = new HashMap<>();
 		for (final Document d : unredInterposedCountViewResults.getResults()) {
 			unredInterposedCountMap.put(d.getJSONArray("key").getString(0), d.getInt("value"));
 		}
 
-		List<SessionInfo> sessionInfos = new ArrayList<SessionInfo>();
+		List<SessionInfo> sessionInfos = new ArrayList<>();
 		for (Session session : sessions) {
 			int numQuestions = 0;
 			int numAnswers = 0;
@@ -759,7 +750,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			final Collection<PossibleAnswer> answers = JSONArray.toCollection(possibleAnswers, PossibleAnswer.class);
 
 			question.updateRoundManagementState();
-			question.setPossibleAnswers(new ArrayList<PossibleAnswer>(answers));
+			question.setPossibleAnswers(new ArrayList<>(answers));
 			question.setSessionKeyword(getSessionKeyword(question.getSessionId()));
 			return question;
 		} catch (final IOException e) {
@@ -783,7 +774,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 				if (vs != null) {
 					@SuppressWarnings("unchecked")
 					final Collection<VisitedSession> visitedSessions = JSONArray.toCollection(vs, VisitedSession.class);
-					loggedIn.setVisitedSessions(new ArrayList<VisitedSession>(visitedSessions));
+					loggedIn.setVisitedSessions(new ArrayList<>(visitedSessions));
 				}
 
 				/* Do not clutter CouchDB. Only update once every 3 hours per session. */
@@ -815,7 +806,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			if (vs != null) {
 				@SuppressWarnings("unchecked")
 				final Collection<VisitedSession> visitedSessions = JSONArray.toCollection(vs, VisitedSession.class);
-				l.setVisitedSessions(new ArrayList<VisitedSession>(visitedSessions));
+				l.setVisitedSessions(new ArrayList<>(visitedSessions));
 			}
 			return l;
 		} catch (final IOException e) {
@@ -886,7 +877,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		view.setEndKey(session.get_id(), "{}");
 		final ViewResults results = getDatabase().view(view);
 
-		List<Question> questions = new ArrayList<Question>();
+		List<Question> questions = new ArrayList<>();
 		for (final Document d : results.getResults()) {
 			final Question q = new Question();
 			q.set_id(d.getId());
@@ -918,7 +909,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 
 			int count = 0;
 			for (List<Document> partition: partitions) {
-				List<Document> answersToDelete = new ArrayList<Document>();
+				List<Document> answersToDelete = new ArrayList<>();
 				for (final Document a : partition) {
 					final Document d = new Document(a.getJSONObject("doc"));
 					d.put("_deleted", true);
@@ -971,22 +962,16 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	@SuppressWarnings("unchecked")
 	@Override
 	public <T> T getObjectFromId(final String documentId, final Class<T> klass) {
-		T obj = null;
 		try {
 			final Document doc = getDatabase().getDocument(documentId);
 			if (doc == null) {
 				return null;
 			}
 			// TODO: This needs some more error checking...
-			obj = (T) JSONObject.toBean(doc.getJSONObject(), klass);
-		} catch (IOException e) {
-			return null;
-		} catch (ClassCastException e) {
-			return null;
-		} catch (net.sf.json.JSONException e) {
+			return (T) JSONObject.toBean(doc.getJSONObject(), klass);
+		} catch (ClassCastException | IOException | net.sf.json.JSONException e) {
 			return null;
 		}
-		return obj;
 	}
 
 	@Override
@@ -1004,7 +989,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		view.setGroup(true);
 		final ViewResults results = getDatabase().view(view);
 		final int abstentionCount = getDatabaseDao().getAbstentionAnswerCount(questionId);
-		final List<Answer> answers = new ArrayList<Answer>();
+		final List<Answer> answers = new ArrayList<>();
 
 		for (final Document d : results.getResults()) {
 			final Answer a = new Answer();
@@ -1029,7 +1014,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		final ViewResults results = getDatabase().view(view);
 		final int abstentionCount = getDatabaseDao().getAbstentionAnswerCount(questionId);
 
-		final List<Answer> answers = new ArrayList<Answer>();
+		final List<Answer> answers = new ArrayList<>();
 		for (final Document d : results.getResults()) {
 			final Answer a = new Answer();
 			a.setAnswerCount(d.getInt("value"));
@@ -1098,7 +1083,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 
 	@Override
 	public List<Answer> getFreetextAnswers(final String questionId, final int start, final int limit) {
-		final List<Answer> answers = new ArrayList<Answer>();
+		final List<Answer> answers = new ArrayList<>();
 		final NovaView view = new NovaView("skill_question/freetext_answers_full");
 		if (start > 0) {
 			view.setSkip(start);
@@ -1126,7 +1111,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		final NovaView view = new NovaView("answer/by_user_and_session_full");
 		view.setKey(me.getUsername(), s.get_id());
 		final ViewResults results = getDatabase().view(view);
-		final List<Answer> answers = new ArrayList<Answer>();
+		final List<Answer> answers = new ArrayList<>();
 		if (results == null || results.getResults() == null || results.getResults().isEmpty()) {
 			return answers;
 		}
@@ -1276,7 +1261,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 
 	private List<InterposedQuestion> createInterposedList(
 			final Session session, final ViewResults questions) {
-		final List<InterposedQuestion> result = new ArrayList<InterposedQuestion>();
+		final List<InterposedQuestion> result = new ArrayList<>();
 		for (final Document document : questions.getResults()) {
 			final InterposedQuestion question = (InterposedQuestion) JSONObject.toBean(
 					document.getJSONObject().getJSONObject("value"),
@@ -1344,7 +1329,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			}
 			if (!isEmptyResults(creatorResults)) {
 				final JSONArray rows = creatorResults.getJSONArray("rows");
-				Set<String> creators = new HashSet<String>();
+				Set<String> creators = new HashSet<>();
 				for (int i = 0; i < rows.size(); i++) {
 					final JSONObject row = rows.getJSONObject(i);
 					creators.add(row.getString("key"));
@@ -1353,7 +1338,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			}
 			if (!isEmptyResults(studentUserResults)) {
 				final JSONArray rows = studentUserResults.getJSONArray("rows");
-				Set<String> students = new HashSet<String>();
+				Set<String> students = new HashSet<>();
 				for (int i = 0; i < rows.size(); i++) {
 					final JSONObject row = rows.getJSONObject(i);
 					students.add(row.getString("key"));
@@ -1404,7 +1389,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		}
 		view.setKey(user.getUsername());
 		final ViewResults sessions = getDatabase().view(view);
-		final List<Session> allSessions = new ArrayList<Session>();
+		final List<Session> allSessions = new ArrayList<>();
 		for (final Document d : sessions.getResults()) {
 			// Not all users have visited sessions
 			if (d.getJSONObject().optJSONArray("value") != null) {
@@ -1417,8 +1402,8 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			}
 		}
 		// Filter sessions that don't exist anymore, also filter my own sessions
-		final List<Session> result = new ArrayList<Session>();
-		final List<Session> filteredSessions = new ArrayList<Session>();
+		final List<Session> result = new ArrayList<>();
+		final List<Session> filteredSessions = new ArrayList<>();
 		for (final Session s : allSessions) {
 			try {
 				final Session session = getDatabaseDao().getSessionFromKeyword(s.getKeyword());
@@ -1436,7 +1421,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		}
 		// Update document to remove sessions that don't exist anymore
 		try {
-			List<VisitedSession> visitedSessions = new ArrayList<VisitedSession>();
+			List<VisitedSession> visitedSessions = new ArrayList<>();
 			for (final Session s : result) {
 				visitedSessions.add(new VisitedSession(s));
 			}
@@ -1470,7 +1455,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		}
 		view.setKey(username);
 		final ViewResults sessions = getDatabase().view(view);
-		final List<Session> allSessions = new ArrayList<Session>();
+		final List<Session> allSessions = new ArrayList<>();
 		for (final Document d : sessions.getResults()) {
 			// Not all users have visited sessions
 			if (d.getJSONObject().optJSONArray("value") != null) {
@@ -1483,8 +1468,8 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			}
 		}
 		// Filter sessions that don't exist anymore, also filter my own sessions
-		final List<Session> result = new ArrayList<Session>();
-		final List<Session> filteredSessions = new ArrayList<Session>();
+		final List<Session> result = new ArrayList<>();
+		final List<Session> filteredSessions = new ArrayList<>();
 		for (final Session s : allSessions) {
 			try {
 				final Session session = getDatabaseDao().getSessionFromKeyword(s.getKeyword());
@@ -1502,7 +1487,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		}
 		// Update document to remove sessions that don't exist anymore
 		try {
-			List<VisitedSession> visitedSessions = new ArrayList<VisitedSession>();
+			List<VisitedSession> visitedSessions = new ArrayList<>();
 			for (final Session s : result) {
 				visitedSessions.add(new VisitedSession(s));
 			}
@@ -1529,7 +1514,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	public List<SessionInfo> getMyVisitedSessionsInfo(final User user, final int start, final int limit) {
 		List<Session> sessions = this.getMyVisitedSessions(user, start, limit);
 		if (sessions.isEmpty()) {
-			return new ArrayList<SessionInfo>();
+			return new ArrayList<>();
 		}
 		return this.getInfosForVisitedSessions(sessions, user);
 	}
@@ -1554,15 +1539,15 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		a.put("answerImage", answer.getAnswerImage());
 		a.put("answerThumbnailImage", answer.getAnswerThumbnailImage());
 		AnswerQueueElement answerQueueElement = new AnswerQueueElement(session, question, answer, user);
-		this.answerQueue.offer(new AbstractMap.SimpleEntry<Document, AnswerQueueElement>(a, answerQueueElement));
+		this.answerQueue.offer(new AbstractMap.SimpleEntry<>(a, answerQueueElement));
 		return answer;
 	}
 
 	@Scheduled(fixedDelay = 5000)
 	public void flushAnswerQueue() {
-		final Map<Document, Answer> map = new HashMap<Document, Answer>();
-		final List<Document> answerList = new ArrayList<Document>();
-		final List<AnswerQueueElement> elements = new ArrayList<AnswerQueueElement>();
+		final Map<Document, Answer> map = new HashMap<>();
+		final List<Document> answerList = new ArrayList<>();
+		final List<AnswerQueueElement> elements = new ArrayList<>();
 		AbstractMap.SimpleEntry<Document, AnswerQueueElement> entry;
 		while ((entry = this.answerQueue.poll()) != null) {
 			final Document doc = entry.getKey();
@@ -1645,7 +1630,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 
 		final ViewResults sessions = getDatabase().view(view);
 
-		final List<Session> result = new ArrayList<Session>();
+		final List<Session> result = new ArrayList<>();
 		for (final Document d : sessions.getResults()) {
 			final Session session = (Session) JSONObject.toBean(
 					d.getJSONObject().getJSONObject("value"),
@@ -1661,20 +1646,20 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	 */
 	private static class ExtendedView extends NovaView {
 
-		public ExtendedView(final String fullname) {
+		ExtendedView(final String fullname) {
 			super(fullname);
 		}
 
-		public void setCourseIdKeys(final List<Course> courses) {
-			List<String> courseIds = new ArrayList<String>();
+		void setCourseIdKeys(final List<Course> courses) {
+			List<String> courseIds = new ArrayList<>();
 			for (Course c : courses) {
 				courseIds.add(c.getId());
 			}
 			setKeys(courseIds);
 		}
 
-		public void setSessionIdKeys(final List<Session> sessions) {
-			List<String> sessionIds = new ArrayList<String>();
+		void setSessionIdKeys(final List<Session> sessions) {
+			List<String> sessionIds = new ArrayList<>();
 			for (Session s : sessions) {
 				sessionIds.add(s.get_id());
 			}
@@ -1729,9 +1714,9 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	}
 
 	@Override
-	@Caching(evict = { @CacheEvict("sessions"), @CacheEvict(cacheNames="sessions", key="#p0.keyword") })
+	@Caching(evict = { @CacheEvict("sessions"), @CacheEvict(cacheNames = "sessions", key = "#p0.keyword") })
 	public int[] deleteSession(final Session session) {
-		int[] count = new int[] { 0, 0 };
+		int[] count = new int[] {0, 0};
 		try {
 			count = deleteAllQuestionsWithAnswers(session);
 			deleteDocument(session.get_id());
@@ -1775,12 +1760,11 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			NovaView view = new NovaView("logged_in/by_last_activity_for_guests");
 			view.setEndKey(lastActivityBefore);
 			List<Document> results = this.getDatabase().view(view).getResults();
-			Map<String, Object> log = new HashMap<>();
 
 			int count = 0;
 			List<List<Document>> partitions = Lists.partition(results, BULK_PARTITION_SIZE);
 			for (List<Document> partition: partitions) {
-				final List<Document> newDocs = new ArrayList<Document>();
+				final List<Document> newDocs = new ArrayList<>();
 				for (final Document oldDoc : partition) {
 					final Document newDoc = new Document();
 					newDoc.setId(oldDoc.getId());
@@ -1867,8 +1851,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 
 	@Override
 	public List<Question> getAllSkillQuestions(final Session session) {
-		final List<Question> questions = getQuestions(new NovaView("skill_question/by_session"), session);
-		return questions;
+		return getQuestions(new NovaView("skill_question/by_session"), session);
 	}
 
 	private List<Question> getQuestions(final NovaView view, final Session session) {
@@ -1879,7 +1862,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			return null;
 		}
 
-		final List<Question> questions = new ArrayList<Question>();
+		final List<Question> questions = new ArrayList<>();
 
 		Results<Question> results = getDatabase().queryView(view, Question.class);
 		for (final RowResult<Question> row : results.getRows()) {
@@ -1993,12 +1976,12 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			) {
 		final ViewResults answeredQuestions = getDatabase().view(view);
 
-		final List<String> answered = new ArrayList<String>();
+		final List<String> answered = new ArrayList<>();
 		for (final Document d : answeredQuestions.getResults()) {
 			answered.add(d.getString("value"));
 		}
 
-		final List<String> unanswered = new ArrayList<String>();
+		final List<String> unanswered = new ArrayList<>();
 		for (final String questionId : questions) {
 			if (!answered.contains(questionId)) {
 				unanswered.add(questionId);
@@ -2013,12 +1996,12 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			) {
 		final ViewResults answeredQuestions = getDatabase().view(view);
 
-		final Map<String, Integer> answered = new HashMap<String, Integer>();
+		final Map<String, Integer> answered = new HashMap<>();
 		for (final Document d : answeredQuestions.getResults()) {
 			answered.put(d.getJSONArray("value").getString(0), d.getJSONArray("value").getInt(1));
 		}
 
-		final List<String> unanswered = new ArrayList<String>();
+		final List<String> unanswered = new ArrayList<>();
 
 		for (final Question question : questions) {
 			if (!"slide".equals(question.getQuestionType()) && (!answered.containsKey(question.get_id())
@@ -2033,9 +2016,9 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	private List<String> collectQuestionIds(final NovaView view) {
 		final ViewResults results = getDatabase().view(view);
 		if (results.getResults().size() == 0) {
-			return new ArrayList<String>();
+			return new ArrayList<>();
 		}
-		final List<String> ids = new ArrayList<String>();
+		final List<String> ids = new ArrayList<>();
 		for (final Document d : results.getResults()) {
 			ids.add(d.getId());
 		}
@@ -2097,7 +2080,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		for (final Question q : questions) {
 			q.setActive(publish);
 		}
-		final List<Document> documents = new ArrayList<Document>();
+		final List<Document> documents = new ArrayList<>();
 		for (final Question q : questions) {
 			final Document d = toQuestionDocument(session, q);
 			d.setId(q.get_id());
@@ -2130,7 +2113,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 				q.setVotingDisabled(disableVoting);
 			}
 		}
-		final List<Document> documents = new ArrayList<Document>();
+		final List<Document> documents = new ArrayList<>();
 		for (final Question q : questions) {
 			final Document d = toQuestionDocument(session, q);
 			d.setId(q.get_id());
@@ -2185,7 +2168,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		for (final Question q : questions) {
 			q.resetQuestionState();
 		}
-		final List<Document> documents = new ArrayList<Document>();
+		final List<Document> documents = new ArrayList<>();
 		for (final Question q : questions) {
 			final Document d = toQuestionDocument(session, q);
 			d.setId(q.get_id());
@@ -2200,7 +2183,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	}
 
 	private int deleteAllAnswersForQuestions(List<Question> questions) {
-		List<String> questionIds = new ArrayList<String>();
+		List<String> questionIds = new ArrayList<>();
 		for (Question q : questions) {
 			questionIds.add(q.get_id());
 		}
@@ -2208,7 +2191,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		bulkView.setKeys(questionIds);
 		bulkView.setIncludeDocs(true);
 		final List<Document> result = getDatabase().view(bulkView).getResults();
-		final List<Document> allAnswers = new ArrayList<Document>();
+		final List<Document> allAnswers = new ArrayList<>();
 		for (Document a : result) {
 			final Document d = new Document(a.getJSONObject("doc"));
 			d.put("_deleted", true);
@@ -2226,8 +2209,8 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	}
 
 	private int[] deleteAllAnswersWithQuestions(List<Question> questions) {
-		List<String> questionIds = new ArrayList<String>();
-		final List<Document> allQuestions = new ArrayList<Document>();
+		List<String> questionIds = new ArrayList<>();
+		final List<Document> allQuestions = new ArrayList<>();
 		for (Question q : questions) {
 			final Document d = new Document();
 			d.put("_id", q.get_id());
@@ -2241,7 +2224,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		bulkView.setIncludeDocs(true);
 		final List<Document> result = getDatabase().view(bulkView).getResults();
 
-		final List<Document> allAnswers = new ArrayList<Document>();
+		final List<Document> allAnswers = new ArrayList<>();
 		for (Document a : result) {
 			final Document d = new Document(a.getJSONObject("doc"));
 			d.put("_deleted", true);
@@ -2249,16 +2232,16 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		}
 
 		try {
-			List<Document> deleteList = new ArrayList<Document>(allAnswers);
+			List<Document> deleteList = new ArrayList<>(allAnswers);
 			deleteList.addAll(allQuestions);
 			getDatabase().bulkSaveDocuments(deleteList.toArray(new Document[deleteList.size()]));
 
-			return new int[] { deleteList.size(), result.size() };
+			return new int[] {deleteList.size(), result.size()};
 		} catch (IOException e) {
 			LOGGER.error("Could not bulk delete questions and answers: {}", e.getMessage());
 		}
 
-		return new int[] { 0, 0 };
+		return new int[] {0, 0};
 	}
 
 	@Cacheable("learningprogress")
@@ -2374,7 +2357,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			int count = 0;
 			final List<List<Document>> partitions = Lists.partition(results, BULK_PARTITION_SIZE);
 			for (List<Document> partition: partitions) {
-				final List<Document> newDocs = new ArrayList<Document>();
+				final List<Document> newDocs = new ArrayList<>();
 				for (Document oldDoc : partition) {
 					final Document newDoc = new Document();
 					newDoc.setId(oldDoc.getId());
@@ -2407,17 +2390,17 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	@Override
 	public SessionInfo importSession(User user, ImportExportSession importSession) {
 		final Session session = this.saveSession(user, importSession.generateSessionEntity(user));
-		List<Document> questions = new ArrayList<Document>();
+		List<Document> questions = new ArrayList<>();
 		// We need to remember which answers belong to which question.
 		// The answers need a questionId, so we first store the questions to get the IDs.
 		// Then we update the answer objects and store them as well.
-		Map<Document, ImportExportQuestion> mapping = new HashMap<Document, ImportExportQuestion>();
+		Map<Document, ImportExportQuestion> mapping = new HashMap<>();
 		// Later, generate all answer documents
-		List<Document> answers = new ArrayList<Document>();
+		List<Document> answers = new ArrayList<>();
 		// We can then push answers together with interposed questions in one large bulk request
-		List<Document> interposedQuestions = new ArrayList<Document>();
+		List<Document> interposedQuestions = new ArrayList<>();
 		// Motds shouldn't be forgotten, too
-		List<Document> motds = new ArrayList<Document>();
+		List<Document> motds = new ArrayList<>();
 		try {
 			// add session id to all questions and generate documents
 			for (ImportExportQuestion question : importSession.getQuestions()) {
@@ -2478,7 +2461,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 				d.put("enddate", String.valueOf(m.getEnddate().getTime()));
 				motds.add(d);
 			}
-			List<Document> documents = new ArrayList<Document>(answers);
+			List<Document> documents = new ArrayList<>(answers);
 			database.bulkSaveDocuments(interposedQuestions.toArray(new Document[interposedQuestions.size()]));
 			database.bulkSaveDocuments(motds.toArray(new Document[motds.size()]));
 			database.bulkSaveDocuments(documents.toArray(new Document[documents.size()]));
@@ -2498,7 +2481,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		importExportSession.setSessionFromSessionObject(session);
 		List<Question> questionList = getDatabaseDao().getAllSkillQuestions(session);
 		for (Question question : questionList) {
-			List<de.thm.arsnova.entities.transport.Answer> answerList = new ArrayList<de.thm.arsnova.entities.transport.Answer>();
+			List<de.thm.arsnova.entities.transport.Answer> answerList = new ArrayList<>();
 			if (withAnswers) {
 				for (Answer a : this.getDatabaseDao().getAllAnswers(question)) {
 					de.thm.arsnova.entities.transport.Answer transportAnswer = new de.thm.arsnova.entities.transport.Answer(a);
@@ -2518,7 +2501,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			importExportSession.addQuestionWithAnswers(question, answerList);
 		}
 		if (withFeedbackQuestions) {
-			List<de.thm.arsnova.entities.transport.InterposedQuestion> interposedQuestionList = new ArrayList<de.thm.arsnova.entities.transport.InterposedQuestion>();
+			List<de.thm.arsnova.entities.transport.InterposedQuestion> interposedQuestionList = new ArrayList<>();
 			for (InterposedQuestion i : getDatabaseDao().getInterposedQuestions(session, 0, 0)) {
 				de.thm.arsnova.entities.transport.InterposedQuestion transportInterposedQuestion = new de.thm.arsnova.entities.transport.InterposedQuestion(i);
 				interposedQuestionList.add(transportInterposedQuestion);
@@ -2532,7 +2515,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		return importExportSession;
 	}
 
-	public SessionInfo calculateSessionInfo(ImportExportSession importExportSession, Session session) {
+	private SessionInfo calculateSessionInfo(ImportExportSession importExportSession, Session session) {
 		int unreadInterposed = 0;
 		int numUnanswered = 0;
 		int numAnswers = 0;
@@ -2558,7 +2541,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 
 	@Override
 	public List<String> getSubjects(Session session, String questionVariant) {
-		String viewString = "";
+		String viewString;
 		if ("lecture".equals(questionVariant)) {
 			viewString = "skill_question/lecture_question_subjects_by_session";
 		} else {
@@ -2578,14 +2561,12 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			uniqueSubjects.add(d.getString("value"));
 		}
 
-		List<String> uniqueSubjectsList = new ArrayList<>(uniqueSubjects);
-
-		return uniqueSubjectsList;
+		return new ArrayList<>(uniqueSubjects);
 	}
 
 	@Override
 	public List<String> getQuestionIdsBySubject(Session session, String questionVariant, String subject) {
-		String viewString = "";
+		String viewString;
 		if ("lecture".equals(questionVariant)) {
 			viewString = "skill_question/lecture_question_ids_by_session_and_subject";
 		} else {
@@ -2619,7 +2600,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 
 			return null;
 		}
-		final List<Question> result = new ArrayList<Question>();
+		final List<Question> result = new ArrayList<>();
 		final MorpherRegistry morpherRegistry = JSONUtils.getMorpherRegistry();
 		final Morpher dynaMorpher = new BeanMorpher(PossibleAnswer.class, morpherRegistry);
 		morpherRegistry.registerMorpher(dynaMorpher);
@@ -2637,7 +2618,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 					document.getJSONObject().getJSONObject("doc").getJSONArray("possibleAnswers"),
 					PossibleAnswer.class
 					);
-			question.setPossibleAnswers(new ArrayList<PossibleAnswer>(answers));
+			question.setPossibleAnswers(new ArrayList<>(answers));
 			question.setSessionKeyword(session.getKeyword());
 			if (!"freetext".equals(question.getQuestionType()) && 0 == question.getPiRound()) {
 				/* needed for legacy questions whose piRound property has not been set */
@@ -2698,7 +2679,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	@Override
 	public List<Motd> getMotds(NovaView view) {
 		final ViewResults motddocs = this.getDatabase().view(view);
-		List<Motd> motdlist = new ArrayList<Motd>();
+		List<Motd> motdlist = new ArrayList<>();
 		for (final Document d : motddocs.getResults()) {
 			Motd motd = new Motd();
 			motd.set_id(d.getId());
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index 98b77c5c..fad83e08 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -91,9 +91,6 @@ public interface IDatabaseDao {
 
 	/**
 	 * @deprecated Use getSkillQuestionsForUsers or getSkillQuestionsForTeachers
-	 * @param user
-	 * @param session
-	 * @return
 	 */
 	@Deprecated
 	List<Question> getSkillQuestions(User user, Session session);
diff --git a/src/main/java/de/thm/arsnova/domain/CourseScore.java b/src/main/java/de/thm/arsnova/domain/CourseScore.java
index 2c8bf260..40a3cf09 100644
--- a/src/main/java/de/thm/arsnova/domain/CourseScore.java
+++ b/src/main/java/de/thm/arsnova/domain/CourseScore.java
@@ -48,13 +48,6 @@ public class CourseScore implements Iterable<QuestionScore> {
 		scores.put(questionId, new QuestionScore(questionId, questionVariant, piRound, questionScore));
 	}
 
-	/**
-	 * @pre questionId has been added before.
-	 * @pre username is set
-	 * @param questionId
-	 * @param username
-	 * @param userscore
-	 */
 	public void addAnswer(String questionId, int piRound, String username, int userscore) {
 		if (!scores.containsKey(questionId)) {
 			// Precondition failed, ignore this element.
@@ -70,7 +63,7 @@ public class CourseScore implements Iterable<QuestionScore> {
 	}
 
 	public CourseScore filterVariant(String questionVariant) {
-		Map<String, QuestionScore> newScores = new HashMap<String, QuestionScore>();
+		Map<String, QuestionScore> newScores = new HashMap<>();
 		for (Entry<String, QuestionScore> entry : this.scores.entrySet()) {
 			String questionId = entry.getKey();
 			QuestionScore questionScore = entry.getValue();
@@ -106,7 +99,7 @@ public class CourseScore implements Iterable<QuestionScore> {
 	}
 
 	public int getTotalUserCount() {
-		Set<String> users = new HashSet<String>();
+		Set<String> users = new HashSet<>();
 		for (QuestionScore questionScore : this) {
 			questionScore.collectUsers(users);
 		}
diff --git a/src/main/java/de/thm/arsnova/domain/ILearningProgressFactory.java b/src/main/java/de/thm/arsnova/domain/ILearningProgressFactory.java
index 15812278..07268294 100644
--- a/src/main/java/de/thm/arsnova/domain/ILearningProgressFactory.java
+++ b/src/main/java/de/thm/arsnova/domain/ILearningProgressFactory.java
@@ -22,6 +22,6 @@ package de.thm.arsnova.domain;
  */
 public interface ILearningProgressFactory {
 
-	public abstract LearningProgress create(String progressType, String questionVariant);
+	LearningProgress create(String progressType, String questionVariant);
 
 }
diff --git a/src/main/java/de/thm/arsnova/domain/LearningProgress.java b/src/main/java/de/thm/arsnova/domain/LearningProgress.java
index c2444b37..e3f0f317 100644
--- a/src/main/java/de/thm/arsnova/domain/LearningProgress.java
+++ b/src/main/java/de/thm/arsnova/domain/LearningProgress.java
@@ -26,7 +26,7 @@ import de.thm.arsnova.entities.transport.LearningProgressValues;
  */
 public interface LearningProgress {
 
-	public LearningProgressValues getCourseProgress(Session session);
+	LearningProgressValues getCourseProgress(Session session);
 
-	public LearningProgressValues getMyProgress(Session session, User user);
+	LearningProgressValues getMyProgress(Session session, User user);
 }
diff --git a/src/main/java/de/thm/arsnova/domain/QuestionScore.java b/src/main/java/de/thm/arsnova/domain/QuestionScore.java
index 32150626..f57d46ed 100644
--- a/src/main/java/de/thm/arsnova/domain/QuestionScore.java
+++ b/src/main/java/de/thm/arsnova/domain/QuestionScore.java
@@ -29,6 +29,7 @@ import java.util.Set;
  */
 public class QuestionScore implements Iterable<UserScore> {
 
+	/* FIXME: what is questionId used for? */
 	private String questionId;
 
 	private String questionVariant;
@@ -37,7 +38,7 @@ public class QuestionScore implements Iterable<UserScore> {
 
 	private int maximumScore;
 
-	private List<UserScore> userScores = new ArrayList<UserScore>();
+	private List<UserScore> userScores = new ArrayList<>();
 
 	public QuestionScore(String questionId, String questionVariant, int piRound, int maximumScore) {
 		this.questionId = questionId;
diff --git a/src/main/java/de/thm/arsnova/entities/Feedback.java b/src/main/java/de/thm/arsnova/entities/Feedback.java
index 92692932..c50480f0 100644
--- a/src/main/java/de/thm/arsnova/entities/Feedback.java
+++ b/src/main/java/de/thm/arsnova/entities/Feedback.java
@@ -35,7 +35,7 @@ public class Feedback {
 	private final List<Integer> values;
 
 	public Feedback(final int a, final int b, final int c, final int d) {
-		values = new ArrayList<Integer>();
+		values = new ArrayList<>();
 		values.add(a);
 		values.add(b);
 		values.add(c);
diff --git a/src/main/java/de/thm/arsnova/entities/LoggedIn.java b/src/main/java/de/thm/arsnova/entities/LoggedIn.java
index 75704572..69f0eebf 100644
--- a/src/main/java/de/thm/arsnova/entities/LoggedIn.java
+++ b/src/main/java/de/thm/arsnova/entities/LoggedIn.java
@@ -31,7 +31,7 @@ public class LoggedIn {
 	private String user;
 	private String sessionId;
 	private long timestamp;
-	private List<VisitedSession> visitedSessions = new ArrayList<VisitedSession>();
+	private List<VisitedSession> visitedSessions = new ArrayList<>();
 	private List<String> _conflicts;
 
 	public LoggedIn() {
diff --git a/src/main/java/de/thm/arsnova/entities/Question.java b/src/main/java/de/thm/arsnova/entities/Question.java
index 30be981f..c88c4c53 100644
--- a/src/main/java/de/thm/arsnova/entities/Question.java
+++ b/src/main/java/de/thm/arsnova/entities/Question.java
@@ -700,10 +700,7 @@ public class Question implements Serializable {
 	}
 
 	public boolean isSuccessfulFreeTextAnswer(String answerTextRaw) {
-		if (answerTextRaw != null) {
-			return answerTextRaw.equals(this.getCorrectAnswer());
-		}
-		return false;
+		return answerTextRaw != null && answerTextRaw.equals(this.getCorrectAnswer());
 	}
 
 	public void updateRoundStartVariables(Date start, Date end) {
@@ -769,9 +766,9 @@ public class Question implements Serializable {
 	private int calculateGridValue(Answer answer) {
 		int value = 0;
 		String[] answers = answer.getAnswerText().split(",");
-		for (int i = 0; i < answers.length; i++) {
+		for (String a : answers) {
 			for (PossibleAnswer p : this.possibleAnswers) {
-				if (answers[i].equals(p.getText())) {
+				if (a.equals(p.getText())) {
 					value += p.getValue();
 				}
 			}
diff --git a/src/main/java/de/thm/arsnova/entities/Session.java b/src/main/java/de/thm/arsnova/entities/Session.java
index 323c1345..28ad60ec 100644
--- a/src/main/java/de/thm/arsnova/entities/Session.java
+++ b/src/main/java/de/thm/arsnova/entities/Session.java
@@ -65,7 +65,7 @@ public class Session implements Serializable {
 	/**
 	 * Returns a copy of the given session without any information that identifies a person.
 	 * @param original The session to create a anonymized copy of
-	 * @return
+	 * @return The anonymized copy of the session
 	 */
 	public static Session anonymizedCopy(final Session original) {
 		final Session copy = new Session();
@@ -341,7 +341,7 @@ public class Session implements Serializable {
 	public void setFeedbackLock(Boolean lock) {
 		this.feedbackLock = lock;
 	}
-	
+
 	@ApiModelProperty(required = true, value = "the flashcard flip condition")
 	public boolean getFlipFlashcards() {
 		return flipFlashcards;
diff --git a/src/main/java/de/thm/arsnova/entities/SessionInfo.java b/src/main/java/de/thm/arsnova/entities/SessionInfo.java
index c2db740e..e3422786 100644
--- a/src/main/java/de/thm/arsnova/entities/SessionInfo.java
+++ b/src/main/java/de/thm/arsnova/entities/SessionInfo.java
@@ -61,7 +61,7 @@ public class SessionInfo {
 	public SessionInfo() { }
 
 	public static List<SessionInfo> fromSessionList(List<Session> sessions) {
-		List<SessionInfo> infos = new ArrayList<SessionInfo>();
+		List<SessionInfo> infos = new ArrayList<>();
 		for (Session s : sessions) {
 			infos.add(new SessionInfo(s));
 		}
diff --git a/src/main/java/de/thm/arsnova/entities/User.java b/src/main/java/de/thm/arsnova/entities/User.java
index 43097e9e..1fa71ada 100644
--- a/src/main/java/de/thm/arsnova/entities/User.java
+++ b/src/main/java/de/thm/arsnova/entities/User.java
@@ -24,7 +24,6 @@ import org.scribe.up.profile.google.Google2Profile;
 import org.scribe.up.profile.twitter.TwitterProfile;
 import org.springframework.security.authentication.AnonymousAuthenticationToken;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.userdetails.UserDetails;
 
 import java.io.Serializable;
 
diff --git a/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java b/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java
index ec091e23..02a01e97 100644
--- a/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java
+++ b/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java
@@ -17,17 +17,16 @@
  */
 package de.thm.arsnova.entities.transport;
 
-import java.util.ArrayList;
+import de.thm.arsnova.entities.Motd;
 import de.thm.arsnova.entities.Question;
 import de.thm.arsnova.entities.Session;
-import de.thm.arsnova.entities.User;
-import de.thm.arsnova.entities.Motd;
-import de.thm.arsnova.entities.SessionInfo;
 import de.thm.arsnova.entities.SessionFeature;
+import de.thm.arsnova.entities.SessionInfo;
+import de.thm.arsnova.entities.User;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import org.springframework.context.annotation.Import;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -50,9 +49,9 @@ public class ImportExportSession {
 	private SessionInfo sessionInfo;
 
 	public ImportExportSession() {
-		questions = new ArrayList<ImportExportQuestion>();
-		feedbackQuestions = new ArrayList<InterposedQuestion>();
-		motds = new ArrayList<Motd>();
+		questions = new ArrayList<>();
+		feedbackQuestions = new ArrayList<>();
+		motds = new ArrayList<>();
 		sessionInfo = null;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/entities/transport/InterposedQuestion.java b/src/main/java/de/thm/arsnova/entities/transport/InterposedQuestion.java
index 9602c0ea..86d31152 100644
--- a/src/main/java/de/thm/arsnova/entities/transport/InterposedQuestion.java
+++ b/src/main/java/de/thm/arsnova/entities/transport/InterposedQuestion.java
@@ -36,7 +36,7 @@ public class InterposedQuestion {
 	private boolean read;
 
 	public static List<InterposedQuestion> fromList(List<de.thm.arsnova.entities.InterposedQuestion> questions) {
-		ArrayList<InterposedQuestion> interposedQuestions = new ArrayList<InterposedQuestion>();
+		ArrayList<InterposedQuestion> interposedQuestions = new ArrayList<>();
 		for (de.thm.arsnova.entities.InterposedQuestion question : questions) {
 			interposedQuestions.add(new InterposedQuestion(question));
 		}
diff --git a/src/main/java/de/thm/arsnova/events/LockVoteEvent.java b/src/main/java/de/thm/arsnova/events/LockVoteEvent.java
index 82b6f90c..a3831c99 100644
--- a/src/main/java/de/thm/arsnova/events/LockVoteEvent.java
+++ b/src/main/java/de/thm/arsnova/events/LockVoteEvent.java
@@ -49,7 +49,7 @@ public class LockVoteEvent extends SessionEvent {
 	}
 
 	public HashMap<String, Object> getVotingAdmission() {
-		HashMap<String, Object> map = new HashMap<String, Object>();
+		HashMap<String, Object> map = new HashMap<>();
 
 		map.put("_id", getQuestionId());
 		map.put("variant", getQuestionVariant());
diff --git a/src/main/java/de/thm/arsnova/events/PiRoundDelayedStartEvent.java b/src/main/java/de/thm/arsnova/events/PiRoundDelayedStartEvent.java
index 87bc2077..6b3418d9 100644
--- a/src/main/java/de/thm/arsnova/events/PiRoundDelayedStartEvent.java
+++ b/src/main/java/de/thm/arsnova/events/PiRoundDelayedStartEvent.java
@@ -70,7 +70,7 @@ public class PiRoundDelayedStartEvent extends SessionEvent {
 	}
 
 	public HashMap<String, Object> getPiRoundInformations() {
-		HashMap<String, Object> map = new HashMap<String, Object>();
+		HashMap<String, Object> map = new HashMap<>();
 
 		map.put("_id", getQuestionId());
 		map.put("endTime", getEndTime());
diff --git a/src/main/java/de/thm/arsnova/events/PiRoundEndEvent.java b/src/main/java/de/thm/arsnova/events/PiRoundEndEvent.java
index 4e69585f..0d1d5df8 100644
--- a/src/main/java/de/thm/arsnova/events/PiRoundEndEvent.java
+++ b/src/main/java/de/thm/arsnova/events/PiRoundEndEvent.java
@@ -52,7 +52,7 @@ public class PiRoundEndEvent extends SessionEvent {
 	}
 
 	public HashMap<String, String> getPiRoundEndInformations() {
-		HashMap<String, String> map = new HashMap<String, String>();
+		HashMap<String, String> map = new HashMap<>();
 
 		map.put("_id", getQuestionId());
 		map.put("variant", getQuestionVariant());
diff --git a/src/main/java/de/thm/arsnova/events/PiRoundResetEvent.java b/src/main/java/de/thm/arsnova/events/PiRoundResetEvent.java
index 227e3795..92a7095f 100644
--- a/src/main/java/de/thm/arsnova/events/PiRoundResetEvent.java
+++ b/src/main/java/de/thm/arsnova/events/PiRoundResetEvent.java
@@ -52,7 +52,7 @@ public class PiRoundResetEvent extends SessionEvent {
 	}
 
 	public HashMap<String, String> getPiRoundResetInformations() {
-		HashMap<String, String> map = new HashMap<String, String>();
+		HashMap<String, String> map = new HashMap<>();
 
 		map.put("_id", getQuestionId());
 		map.put("variant", getQuestionVariant());
diff --git a/src/main/java/de/thm/arsnova/events/UnlockVoteEvent.java b/src/main/java/de/thm/arsnova/events/UnlockVoteEvent.java
index 3ddfa62d..ef3bf8c7 100644
--- a/src/main/java/de/thm/arsnova/events/UnlockVoteEvent.java
+++ b/src/main/java/de/thm/arsnova/events/UnlockVoteEvent.java
@@ -49,7 +49,7 @@ public class UnlockVoteEvent extends SessionEvent {
 	}
 
 	public HashMap<String, Object> getVotingAdmission() {
-		HashMap<String, Object> map = new HashMap<String, Object>();
+		HashMap<String, Object> map = new HashMap<>();
 
 		map.put("_id", getQuestionId());
 		map.put("variant", getQuestionVariant());
diff --git a/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java b/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
index ed0eb951..fef4edb3 100644
--- a/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
+++ b/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
@@ -98,12 +98,10 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 	}
 
 	private boolean checkAdminPermission(final String username) {
-		/** TODO only allow accounts from arsnova db **/
+		/* TODO: only allow accounts from arsnova db */
 		String[] splittedAdminNames = adminAccounts.split(",");
-		if (Arrays.asList(splittedAdminNames).contains(username)) {
-			return true;
-		}
-		return false;
+
+		return Arrays.asList(splittedAdminNames).contains(username);
 	}
 
 	private boolean checkSessionPermission(
@@ -128,10 +126,8 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 			final Question question = dao.getQuestion(targetId.toString());
 			if (question != null) {
 				final Session session = dao.getSessionFromId(question.getSessionId());
-				if (session == null) {
-					return false;
-				}
-				return session.getCreator().equals(username);
+
+				return session != null && session.getCreator().equals(username);
 			}
 		}
 		return false;
@@ -151,10 +147,8 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 				}
 				// Allow deletion if requested by session owner
 				final Session session = dao.getSessionFromKeyword(question.getSessionId());
-				if (session == null) {
-					return false;
-				}
-				return session.getCreator().equals(username);
+
+				return session != null && session.getCreator().equals(username);
 			}
 		}
 		return false;
diff --git a/src/main/java/de/thm/arsnova/security/CustomLdapUserDetailsMapper.java b/src/main/java/de/thm/arsnova/security/CustomLdapUserDetailsMapper.java
index e5704187..b2ab7c99 100644
--- a/src/main/java/de/thm/arsnova/security/CustomLdapUserDetailsMapper.java
+++ b/src/main/java/de/thm/arsnova/security/CustomLdapUserDetailsMapper.java
@@ -46,8 +46,7 @@ public class CustomLdapUserDetailsMapper extends LdapUserDetailsMapper {
 			LOGGER.warn("LDAP attribute {} not set. Falling back to lowercased user provided username.", userIdAttr);
 			ldapUsername = username.toLowerCase();
 		}
-		UserDetails userDetails = super.mapUserFromContext(ctx, ldapUsername, authorities);
 
-		return userDetails;
+		 return super.mapUserFromContext(ctx, ldapUsername, authorities);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/security/DbUserDetailsService.java b/src/main/java/de/thm/arsnova/security/DbUserDetailsService.java
index 9c4630e6..d7fe14a6 100644
--- a/src/main/java/de/thm/arsnova/security/DbUserDetailsService.java
+++ b/src/main/java/de/thm/arsnova/security/DbUserDetailsService.java
@@ -53,7 +53,7 @@ public class DbUserDetailsService implements UserDetailsService {
 			throw new UsernameNotFoundException("User does not exist.");
 		}
 
-		final List<GrantedAuthority> grantedAuthorities = new ArrayList<GrantedAuthority>();
+		final List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
 		grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_USER"));
 		grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_DB_USER"));
 
diff --git a/src/main/java/de/thm/arsnova/services/FeedbackService.java b/src/main/java/de/thm/arsnova/services/FeedbackService.java
index 67cafa25..1c49f3d5 100644
--- a/src/main/java/de/thm/arsnova/services/FeedbackService.java
+++ b/src/main/java/de/thm/arsnova/services/FeedbackService.java
@@ -80,7 +80,7 @@ public class FeedbackService implements IFeedbackService, ApplicationEventPublis
 		 * sessions to a single user in one go instead of sending multiple messages for each session. Hence,
 		 * we need the mapping (User -> Sessions)
 		 */
-		final Map<User, Set<Session>> affectedSessionsOfUsers = new HashMap<User, Set<Session>>();
+		final Map<User, Set<Session>> affectedSessionsOfUsers = new HashMap<>();
 
 		for (Map.Entry<Session, List<User>> entry : deletedFeedbackOfUsersInSession.entrySet()) {
 			final Session session = entry.getKey();
@@ -90,7 +90,7 @@ public class FeedbackService implements IFeedbackService, ApplicationEventPublis
 				if (affectedSessionsOfUsers.containsKey(user)) {
 					affectedSessions = affectedSessionsOfUsers.get(user);
 				} else {
-					affectedSessions = new HashSet<Session>();
+					affectedSessions = new HashSet<>();
 				}
 				affectedSessions.add(session);
 				affectedSessionsOfUsers.put(user, affectedSessions);
@@ -112,7 +112,7 @@ public class FeedbackService implements IFeedbackService, ApplicationEventPublis
 	public void cleanFeedbackVotesInSession(final String keyword, final int cleanupFeedbackDelayInMins) {
 		final Session session = databaseDao.getSessionFromKeyword(keyword);
 		List<User> affectedUsers = feedbackStorage.cleanFeedbackVotesInSession(session, cleanupFeedbackDelayInMins);
-		Set<Session> sessionSet = new HashSet<Session>();
+		Set<Session> sessionSet = new HashSet<>();
 		sessionSet.add(session);
 
 		// Send feedback reset event to all affected users
diff --git a/src/main/java/de/thm/arsnova/services/MotdService.java b/src/main/java/de/thm/arsnova/services/MotdService.java
index 72c99e2e..f4ac031e 100644
--- a/src/main/java/de/thm/arsnova/services/MotdService.java
+++ b/src/main/java/de/thm/arsnova/services/MotdService.java
@@ -23,8 +23,6 @@ import de.thm.arsnova.entities.MotdList;
 import de.thm.arsnova.entities.Session;
 import de.thm.arsnova.entities.User;
 import de.thm.arsnova.exceptions.BadRequestException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Service;
@@ -49,8 +47,6 @@ public class MotdService implements IMotdService {
 	@Autowired
 	private ISessionService sessionService;
 
-	private static final Logger LOGGER = LoggerFactory.getLogger(QuestionService.class);
-
 	public void setDatabaseDao(final IDatabaseDao databaseDao) {
 		this.databaseDao = databaseDao;
 	}
@@ -75,7 +71,7 @@ public class MotdService implements IMotdService {
 
 	@Override
 	public List<Motd> getCurrentMotds(final Date clientdate, final String audience, final String sessionkey) {
-		List<Motd> motds = new ArrayList<Motd>();
+		final List<Motd> motds;
 		switch (audience) {
 			case "all": motds = databaseDao.getMotdsForAll(); break;
 			case "loggedIn": motds = databaseDao.getMotdsForLoggedIn(); break;
@@ -89,7 +85,7 @@ public class MotdService implements IMotdService {
 
   @Override
   public List<Motd> filterMotdsByDate(List<Motd> list, Date clientdate) {
-		List<Motd> returns = new ArrayList<Motd>();
+		List<Motd> returns = new ArrayList<>();
 		for (Motd motd : list) {
 			if (motd.getStartdate().before(clientdate) && motd.getEnddate().after(clientdate)) {
 				returns.add(motd);
@@ -101,8 +97,8 @@ public class MotdService implements IMotdService {
 	@Override
 	public List<Motd> filterMotdsByList(List<Motd> list, MotdList motdlist) {
 		if (motdlist != null && motdlist.getMotdkeys() != null && !motdlist.getMotdkeys().isEmpty()) {
-			List<Motd> returns = new ArrayList<Motd>();
-			HashSet<String> keys = new HashSet(500);  // Or a more realistic size
+			List<Motd> returns = new ArrayList<>();
+			HashSet<String> keys = new HashSet<>(500);  // Or a more realistic size
 			StringTokenizer st = new StringTokenizer(motdlist.getMotdkeys(), ",");
 			while (st.hasMoreTokens()) {
 				keys.add(st.nextToken());
diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java
index 7cff1d6d..014539fd 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -40,11 +40,8 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
-import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
 import java.util.Timer;
@@ -72,7 +69,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 
 	public static final Logger LOGGER = LoggerFactory.getLogger(QuestionService.class);
 
-	private HashMap<String, Timer> timerList = new HashMap<String, Timer>();
+	private HashMap<String, Timer> timerList = new HashMap<>();
 
 	public void setDatabaseDao(final IDatabaseDao databaseDao) {
 		this.databaseDao = databaseDao;
@@ -287,7 +284,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 		final Session session = databaseDao.getSessionFromKeyword(question.getSessionKeyword());
 		question.setVotingDisabled(disableVoting);
 
-		if (disableVoting == false && !question.isActive()) {
+		if (!disableVoting && !question.isActive()) {
 			question.setActive(true);
 			update(question);
 		} else {
@@ -536,14 +533,14 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 		final Session session = getSession(sessionKey);
 		// Load questions first because we are only interested in answers of the latest piRound.
 		final List<Question> questions = databaseDao.getSkillQuestionsForUsers(session);
-		final Map<String, Question> questionIdToQuestion = new HashMap<String, Question>();
+		final Map<String, Question> questionIdToQuestion = new HashMap<>();
 		for (final Question question : questions) {
 			questionIdToQuestion.put(question.get_id(), question);
 		}
 
 		/* filter answers by active piRound per question */
 		final List<Answer> answers = databaseDao.getMyAnswers(userService.getCurrentUser(), session);
-		final List<Answer> filteredAnswers = new ArrayList<Answer>();
+		final List<Answer> filteredAnswers = new ArrayList<>();
 		for (final Answer answer : answers) {
 			final Question question = questionIdToQuestion.get(answer.getQuestionId());
 			if (question == null) {
@@ -685,7 +682,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 		if ("freetext".equals(question.getQuestionType())) {
 			imageUtils.generateThumbnailImage(theAnswer);
 			if (question.isFixedAnswer() && question.getText() != null) {
-				theAnswer.setAnswerTextRaw(new String(theAnswer.getAnswerText()));
+				theAnswer.setAnswerTextRaw(theAnswer.getAnswerText());
 
 				if (question.isStrictMode()) {
 					question.checkTextStrictOptions(theAnswer);
@@ -828,7 +825,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 	@Override
 	public Map<String, Object> getAnswerAndAbstentionCountInternal(final String questionId) {
 		final Question question = getQuestion(questionId);
-		HashMap<String, Object> map = new HashMap<String, Object>();
+		HashMap<String, Object> map = new HashMap<>();
 
 		if (question == null) {
 			return null;
diff --git a/src/main/java/de/thm/arsnova/services/ResponseProviderService.java b/src/main/java/de/thm/arsnova/services/ResponseProviderService.java
index dd4e9396..59d0e15a 100644
--- a/src/main/java/de/thm/arsnova/services/ResponseProviderService.java
+++ b/src/main/java/de/thm/arsnova/services/ResponseProviderService.java
@@ -23,7 +23,7 @@ import javax.servlet.http.HttpServletResponse;
  * Allows access to the {@link HttpServletResponse} outside of Controllers.
  */
 public interface ResponseProviderService {
-	public void setResponse(HttpServletResponse response);
+	void setResponse(HttpServletResponse response);
 
-	public HttpServletResponse getResponse();
+	HttpServletResponse getResponse();
 }
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java
index 37b769bb..c0a807ca 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -52,7 +52,6 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Service;
 
 import java.io.Serializable;
-import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
 import java.util.UUID;
@@ -191,8 +190,7 @@ public class SessionService implements ISessionService, ApplicationEventPublishe
 
 	@PreAuthorize("isAuthenticated() and hasPermission(#sessionkey, 'session', 'owner')")
 	public Session getSessionForAdmin(final String keyword) {
-		final Session session = databaseDao.getSessionFromKeyword(keyword);
-		return session;
+		return databaseDao.getSessionFromKeyword(keyword);
 	}
 
 	/*
@@ -398,13 +396,6 @@ public class SessionService implements ISessionService, ApplicationEventPublishe
 	public void deleteSession(final String sessionkey) {
 		final Session session = databaseDao.getSessionFromKeyword(sessionkey);
 
-		List<String> prepSubjects = databaseDao.getSubjects(session, "preparation");
-		if (prepSubjects == null) {
-			prepSubjects = new ArrayList<String>();
-		} else {
-			prepSubjects.add("");
-		}
-
 		databaseDao.deleteSession(session);
 
 		this.publisher.publishEvent(new DeleteSessionEvent(this, session));
@@ -504,12 +495,6 @@ public class SessionService implements ISessionService, ApplicationEventPublishe
 		return databaseDao.updateSession(session).getFlipFlashcards();
 	}
 
-	/**
-	 *
-	 * @param session
-	 * @throws PayloadTooLargeException
-	 * @throws BadRequestException
-	 */
 	private void handleLogo(Session session) {
 		if (session.getPpLogo() != null) {
 			if (session.getPpLogo().startsWith("http")) {
diff --git a/src/main/java/de/thm/arsnova/services/UserService.java b/src/main/java/de/thm/arsnova/services/UserService.java
index c3ced54d..e68d0e6a 100644
--- a/src/main/java/de/thm/arsnova/services/UserService.java
+++ b/src/main/java/de/thm/arsnova/services/UserService.java
@@ -58,8 +58,15 @@ import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 import java.io.UnsupportedEncodingException;
 import java.text.MessageFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Set;
+import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.Pattern;
 
@@ -83,10 +90,10 @@ public class UserService implements IUserService {
 
 	public static final Logger LOGGER = LoggerFactory.getLogger(UserService.class);
 
-	private static final ConcurrentHashMap<UUID, User> socketid2user = new ConcurrentHashMap<UUID, User>();
+	private static final ConcurrentHashMap<UUID, User> socketid2user = new ConcurrentHashMap<>();
 
 	/* used for Socket.IO online check solution (new) */
-	private static final ConcurrentHashMap<User, String> user2session = new ConcurrentHashMap<User, String>();
+	private static final ConcurrentHashMap<User, String> user2session = new ConcurrentHashMap<>();
 
 	@Autowired
 	private IDatabaseDao databaseDao;
@@ -140,7 +147,7 @@ public class UserService implements IUserService {
 	private Set<String> loginBans;
 
 	{
-		loginTries = new ConcurrentHashMap<String, Byte>();
+		loginTries = new ConcurrentHashMap<>();
 		loginBans = Collections.synchronizedSet(new HashSet<String>());
 	}
 
@@ -266,16 +273,13 @@ public class UserService implements IUserService {
 			return false;
 		}
 		String session = user2session.get(user);
-		if (session == null) {
-			return false;
-		}
 
-		return keyword.equals(session);
+		return session != null && keyword.equals(session);
 	}
 
 	@Override
 	public Set<User> getUsersInSession(final String keyword) {
-		final Set<User> result = new HashSet<User>();
+		final Set<User> result = new HashSet<>();
 		for (final Entry<User, String> e : user2session.entrySet()) {
 			if (e.getValue().equals(keyword)) {
 				result.add(e.getKey());
@@ -378,7 +382,7 @@ public class UserService implements IUserService {
 		return result;
 	}
 
-	public String encodePassword(String password) {
+	private String encodePassword(String password) {
 		if (null == encoder) {
 			encoder = new BCryptPasswordEncoder(12);
 		}
@@ -386,7 +390,7 @@ public class UserService implements IUserService {
 		return encoder.encode(password);
 	}
 
-	public void sendActivationEmail(DbUser dbUser) {
+	private void sendActivationEmail(DbUser dbUser) {
 		String activationUrl;
 		try {
 			activationUrl = MessageFormat.format(
@@ -412,7 +416,7 @@ public class UserService implements IUserService {
 		List<String> domainList = Arrays.asList(allowedEmailDomains.split(","));
 
 		if (domainList.size() > 0) {
-			List<String> patterns = new ArrayList<String>();
+			List<String> patterns = new ArrayList<>();
 			if (domainList.contains("*")) {
 				patterns.add("([a-z0-9-]+\\.)+[a-z0-9-]+");
 			} else {
@@ -532,11 +536,9 @@ public class UserService implements IUserService {
 			helper.setSubject(subject);
 			helper.setText(body);
 
-			LOGGER.info("Sending mail \"{}\" from \"{}\" to \"{}\"", new Object[] {subject, msg.getFrom(), dbUser.getUsername()});
+			LOGGER.info("Sending mail \"{}\" from \"{}\" to \"{}\"", subject, msg.getFrom(), dbUser.getUsername());
 			mailSender.send(msg);
-		} catch (MessagingException e) {
-			LOGGER.warn("Mail \"{}\" could not be sent: {}", subject, e);
-		} catch (MailException e) {
+		} catch (MailException | MessagingException e) {
 			LOGGER.warn("Mail \"{}\" could not be sent: {}", subject, e);
 		}
 	}
diff --git a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
index 55401f93..8df42e08 100644
--- a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
+++ b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
@@ -17,7 +17,6 @@
  */
 package de.thm.arsnova.socket;
 
-import com.codahale.metrics.annotation.Metered;
 import com.codahale.metrics.annotation.Timed;
 import com.corundumstudio.socketio.AckRequest;
 import com.corundumstudio.socketio.Configuration;
@@ -55,7 +54,7 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -110,9 +109,7 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor {
 	}
 
 	public void startServer() {
-		/**
-		 * hack: listen to ipv4 adresses
-		 */
+		/* hack: listen to ipv4 adresses */
 		System.setProperty("java.net.preferIPv4Stack", "true");
 
 		SocketConfig soConfig = new SocketConfig();
@@ -145,9 +142,9 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor {
 				final de.thm.arsnova.entities.Session session = sessionService.getSessionInternal(sessionKey, u);
 
 				if (session.getFeedbackLock()) {
-					LOGGER.debug("Feedback save blocked: {}", new Object[] {u, sessionKey, data.getValue()});
+					LOGGER.debug("Feedback save blocked: {}", u, sessionKey, data.getValue());
 				} else {
-					LOGGER.debug("Feedback recieved: {}", new Object[] {u, sessionKey, data.getValue()});
+					LOGGER.debug("Feedback recieved: {}", u, sessionKey, data.getValue());
 					if (null != sessionKey) {
 						feedbackService.saveFeedback(sessionKey, data.getValue(), u);
 					}
@@ -322,7 +319,7 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor {
 	}
 
 	public void reportDeletedFeedback(final User user, final Set<de.thm.arsnova.entities.Session> arsSessions) {
-		final List<String> keywords = new ArrayList<String>();
+		final List<String> keywords = new ArrayList<>();
 		for (final de.thm.arsnova.entities.Session session : arsSessions) {
 			keywords.add(session.getKeyword());
 		}
@@ -330,7 +327,7 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor {
 	}
 
 	private List<UUID> findConnectionIdForUser(final User user) {
-		final List<UUID> result = new ArrayList<UUID>();
+		final List<UUID> result = new ArrayList<>();
 		for (final Entry<UUID, User> e : userService.socketId2User()) {
 			final UUID someUsersConnectionId = e.getKey();
 			final User someUser = e.getValue();
@@ -356,15 +353,11 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor {
 	/**
 	 * Currently only sends the feedback data to the client. Should be used for all
 	 * relevant Socket.IO data, the client needs to know after joining a session.
-	 *
-	 * @param sessionKey
-	 * @param user
-	 * @param client
 	 */
 	public void reportSessionDataToClient(final String sessionKey, final User user, final SocketIOClient client) {
 		final de.thm.arsnova.entities.Session session = sessionService.getSessionInternal(sessionKey, user);
 		final de.thm.arsnova.entities.SessionFeature features = sessionService.getSessionFeatures(sessionKey);
-		
+
 		client.sendEvent("unansweredLecturerQuestions", questionService.getUnAnsweredLectureQuestionIds(sessionKey, user));
 		client.sendEvent("unansweredPreparationQuestions", questionService.getUnAnsweredPreparationQuestionIds(sessionKey, user));
 		client.sendEvent("countLectureQuestionAnswers", questionService.countLectureQuestionAnswersInternal(sessionKey));
@@ -436,7 +429,7 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor {
 	}
 
 	public void reportLecturerQuestionAvailable(final de.thm.arsnova.entities.Session session, final List<de.thm.arsnova.entities.Question> qs) {
-		List<Question> questions = new ArrayList<Question>();
+		List<Question> questions = new ArrayList<>();
 		for (de.thm.arsnova.entities.Question q : qs) {
 			questions.add(new Question(q));
 		}
@@ -449,7 +442,7 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor {
 	}
 
 	public void reportLecturerQuestionsLocked(final de.thm.arsnova.entities.Session session, final List<de.thm.arsnova.entities.Question> qs) {
-		List<Question> questions = new ArrayList<Question>();
+		List<Question> questions = new ArrayList<>();
 		for (de.thm.arsnova.entities.Question q : qs) {
 			questions.add(new Question(q));
 		}
@@ -461,8 +454,7 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor {
 	}
 
 	public void broadcastInSession(final String sessionKey, final String eventName, final Object data) {
-		/**
-		 * collect a list of users which are in the current session iterate over
+		/* collect a list of users which are in the current session iterate over
 		 * all connected clients and if send feedback, if user is in current
 		 * session
 		 */
@@ -478,17 +470,17 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor {
 
 	@Override
 	public void visit(NewQuestionEvent event) {
-		this.reportLecturerQuestionAvailable(event.getSession(), Arrays.asList(event.getQuestion()));
+		this.reportLecturerQuestionAvailable(event.getSession(), Collections.singletonList(event.getQuestion()));
 	}
 
 	@Override
 	public void visit(UnlockQuestionEvent event) {
-		this.reportLecturerQuestionAvailable(event.getSession(), Arrays.asList(event.getQuestion()));
+		this.reportLecturerQuestionAvailable(event.getSession(), Collections.singletonList(event.getQuestion()));
 	}
 
 	@Override
 	public void visit(LockQuestionEvent event) {
-		this.reportLecturerQuestionsLocked(event.getSession(), Arrays.asList(event.getQuestion()));
+		this.reportLecturerQuestionsLocked(event.getSession(), Collections.singletonList(event.getQuestion()));
 	}
 
 	@Override
@@ -580,7 +572,7 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor {
 
 	@Override
 	public void visit(LockVotesEvent event) {
-		List<Question> questions = new ArrayList<Question>();
+		List<Question> questions = new ArrayList<>();
 		for (de.thm.arsnova.entities.Question q : event.getQuestions()) {
 			questions.add(new Question(q));
 		}
@@ -589,7 +581,7 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor {
 
 	@Override
 	public void visit(UnlockVotesEvent event) {
-		List<Question> questions = new ArrayList<Question>();
+		List<Question> questions = new ArrayList<>();
 		for (de.thm.arsnova.entities.Question q : event.getQuestions()) {
 			questions.add(new Question(q));
 		}
@@ -612,7 +604,7 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor {
 	public void visit(LockFeedbackEvent event) {
 		broadcastInSession(event.getSession().getKeyword(), "lockFeedback", event.getSession().getFeedbackLock());
 	}
-	
+
 	@Override
 	public void visit(FlipFlashcardsEvent event) {
 		broadcastInSession(event.getSession().getKeyword(), "flipFlashcards", event.getSession().getFlipFlashcards());
diff --git a/src/main/java/de/thm/arsnova/web/CacheControl.java b/src/main/java/de/thm/arsnova/web/CacheControl.java
index a5770a53..f2215ef2 100644
--- a/src/main/java/de/thm/arsnova/web/CacheControl.java
+++ b/src/main/java/de/thm/arsnova/web/CacheControl.java
@@ -34,11 +34,11 @@ public @interface CacheControl {
 		PRIVATE("private"),
 		PUBLIC("public");
 
-		private Policy() {
+		Policy() {
 			this.policyString = null;
 		}
 
-		private Policy(String policyString) {
+		Policy(String policyString) {
 			this.policyString = policyString;
 		}
 
diff --git a/src/main/java/de/thm/arsnova/web/ResponseInterceptorHandler.java b/src/main/java/de/thm/arsnova/web/ResponseInterceptorHandler.java
index e3ff199d..607a0cfc 100644
--- a/src/main/java/de/thm/arsnova/web/ResponseInterceptorHandler.java
+++ b/src/main/java/de/thm/arsnova/web/ResponseInterceptorHandler.java
@@ -44,6 +44,6 @@ public class ResponseInterceptorHandler extends HandlerInterceptorAdapter {
 		responseProviderService.setResponse(response);
 
 		return true;
-	};
+	}
 
 }
diff --git a/src/main/java/org/stagemonitor/core/metrics/MonitorGauges.java b/src/main/java/org/stagemonitor/core/metrics/MonitorGauges.java
index 8e0a25a7..4e1da49e 100644
--- a/src/main/java/org/stagemonitor/core/metrics/MonitorGauges.java
+++ b/src/main/java/org/stagemonitor/core/metrics/MonitorGauges.java
@@ -7,7 +7,7 @@ import java.lang.annotation.Target;
 
 /**
  * When a type is marked with this annotation, the creation of gauges with
- * @{@link com.codahale.metrics.annotation.Gauge} is activated for that type.
+ * {@link com.codahale.metrics.annotation.Gauge} is activated for that type.
  *
  * <pre><code>
  *     \@MonitorGauges
diff --git a/src/test/java/de/thm/arsnova/ImageUtilsTest.java b/src/test/java/de/thm/arsnova/ImageUtilsTest.java
index 820828ae..4bc46639 100644
--- a/src/test/java/de/thm/arsnova/ImageUtilsTest.java
+++ b/src/test/java/de/thm/arsnova/ImageUtilsTest.java
@@ -26,10 +26,7 @@ import org.springframework.test.context.web.WebAppConfiguration;
 
 import static de.thm.arsnova.ImageUtils.IMAGE_PREFIX_MIDDLE;
 import static de.thm.arsnova.ImageUtils.IMAGE_PREFIX_START;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @WebAppConfiguration
diff --git a/src/test/java/de/thm/arsnova/config/TestSecurityConfig.java b/src/test/java/de/thm/arsnova/config/TestSecurityConfig.java
index e7ca87c1..eabdd3be 100644
--- a/src/test/java/de/thm/arsnova/config/TestSecurityConfig.java
+++ b/src/test/java/de/thm/arsnova/config/TestSecurityConfig.java
@@ -46,7 +46,7 @@ import org.springframework.security.core.session.SessionRegistryImpl;
 @Profile("test")
 public class TestSecurityConfig extends SecurityConfig {
 	@Override
-	protected void configure(HttpSecurity http) {};
+	protected void configure(HttpSecurity http) {}
 
 	@Override
 	protected void configure(AuthenticationManagerBuilder auth) throws Exception {
diff --git a/src/test/java/de/thm/arsnova/controller/AbstractControllerTest.java b/src/test/java/de/thm/arsnova/controller/AbstractControllerTest.java
index 2a105ece..52efdfe3 100644
--- a/src/test/java/de/thm/arsnova/controller/AbstractControllerTest.java
+++ b/src/test/java/de/thm/arsnova/controller/AbstractControllerTest.java
@@ -36,7 +36,7 @@ public abstract class AbstractControllerTest {
 	}
 
 	protected void setAuthenticated(final boolean isAuthenticated, final String username) {
-		final List<GrantedAuthority> ga = new ArrayList<GrantedAuthority>();
+		final List<GrantedAuthority> ga = new ArrayList<>();
 		if (isAuthenticated) {
 			final UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, "secret", ga);
 			SecurityContextHolder.getContext().setAuthentication(token);
diff --git a/src/test/java/de/thm/arsnova/controller/CourseControllerTest.java b/src/test/java/de/thm/arsnova/controller/CourseControllerTest.java
index 20a3b26b..351a9ea5 100644
--- a/src/test/java/de/thm/arsnova/controller/CourseControllerTest.java
+++ b/src/test/java/de/thm/arsnova/controller/CourseControllerTest.java
@@ -71,7 +71,7 @@ public class CourseControllerTest {
 
 	private void setAuthenticated(final boolean isAuthenticated, final String username) {
 		if (isAuthenticated) {
-			final List<GrantedAuthority> ga = new ArrayList<GrantedAuthority>();
+			final List<GrantedAuthority> ga = new ArrayList<>();
 			final UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, "secret", ga);
 			SecurityContextHolder.getContext().setAuthentication(token);
 			userService.setUserAuthenticated(isAuthenticated, username);
diff --git a/src/test/java/de/thm/arsnova/controller/FeedbackControllerTest.java b/src/test/java/de/thm/arsnova/controller/FeedbackControllerTest.java
index a58c3cbf..f683ae1b 100644
--- a/src/test/java/de/thm/arsnova/controller/FeedbackControllerTest.java
+++ b/src/test/java/de/thm/arsnova/controller/FeedbackControllerTest.java
@@ -32,10 +32,7 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 import org.springframework.web.context.WebApplicationContext;
 
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @WebAppConfiguration
diff --git a/src/test/java/de/thm/arsnova/controller/LecturerQuestionControllerTest.java b/src/test/java/de/thm/arsnova/controller/LecturerQuestionControllerTest.java
index a07a5d11..ed01dbe6 100644
--- a/src/test/java/de/thm/arsnova/controller/LecturerQuestionControllerTest.java
+++ b/src/test/java/de/thm/arsnova/controller/LecturerQuestionControllerTest.java
@@ -39,9 +39,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @WebAppConfiguration
@@ -67,7 +65,7 @@ public class LecturerQuestionControllerTest {
 
 	private void setAuthenticated(final boolean isAuthenticated, final String username) {
 		if (isAuthenticated) {
-			final List<GrantedAuthority> ga = new ArrayList<GrantedAuthority>();
+			final List<GrantedAuthority> ga = new ArrayList<>();
 			final UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, "secret", ga);
 			SecurityContextHolder.getContext().setAuthentication(token);
 			userService.setUserAuthenticated(isAuthenticated, username);
diff --git a/src/test/java/de/thm/arsnova/controller/LoginControllerTest.java b/src/test/java/de/thm/arsnova/controller/LoginControllerTest.java
index 20528ed7..6e8d3996 100644
--- a/src/test/java/de/thm/arsnova/controller/LoginControllerTest.java
+++ b/src/test/java/de/thm/arsnova/controller/LoginControllerTest.java
@@ -36,10 +36,7 @@ import org.springframework.web.context.WebApplicationContext;
 
 import static org.junit.Assert.assertEquals;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @WebAppConfiguration
diff --git a/src/test/java/de/thm/arsnova/controller/SessionControllerTest.java b/src/test/java/de/thm/arsnova/controller/SessionControllerTest.java
index 6b34610a..c9ea83a0 100644
--- a/src/test/java/de/thm/arsnova/controller/SessionControllerTest.java
+++ b/src/test/java/de/thm/arsnova/controller/SessionControllerTest.java
@@ -38,13 +38,8 @@ import org.springframework.web.context.WebApplicationContext;
 import java.util.ArrayList;
 import java.util.List;
 
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @WebAppConfiguration
@@ -70,7 +65,7 @@ public class SessionControllerTest {
 
 	private void setAuthenticated(final boolean isAuthenticated, final String username) {
 		if (isAuthenticated) {
-			final List<GrantedAuthority> ga = new ArrayList<GrantedAuthority>();
+			final List<GrantedAuthority> ga = new ArrayList<>();
 			final UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, "secret", ga);
 			SecurityContextHolder.getContext().setAuthentication(token);
 			userService.setUserAuthenticated(isAuthenticated, username);
diff --git a/src/test/java/de/thm/arsnova/controller/StatisticsControllerTest.java b/src/test/java/de/thm/arsnova/controller/StatisticsControllerTest.java
index c9a7151f..44266707 100644
--- a/src/test/java/de/thm/arsnova/controller/StatisticsControllerTest.java
+++ b/src/test/java/de/thm/arsnova/controller/StatisticsControllerTest.java
@@ -31,10 +31,7 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 import org.springframework.web.context.WebApplicationContext;
 
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @WebAppConfiguration
diff --git a/src/test/java/de/thm/arsnova/dao/NovaViewTest.java b/src/test/java/de/thm/arsnova/dao/NovaViewTest.java
index 06d8ed17..cbbbf655 100644
--- a/src/test/java/de/thm/arsnova/dao/NovaViewTest.java
+++ b/src/test/java/de/thm/arsnova/dao/NovaViewTest.java
@@ -24,9 +24,7 @@ import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.Arrays;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
+import static org.junit.Assert.*;
 
 public class NovaViewTest {
 
diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
index b13eb440..b43af7f4 100644
--- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
+++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
@@ -31,10 +31,10 @@ import java.util.concurrent.ConcurrentHashMap;
 
 public class StubDatabaseDao implements IDatabaseDao {
 
-	private static Map<String, Session> stubSessions = new ConcurrentHashMap<String, Session>();
-	private static Map<String, Feedback> stubFeedbacks = new ConcurrentHashMap<String, Feedback>();
-	private static Map<String, List<Question>> stubQuestions = new ConcurrentHashMap<String, List<Question>>();
-	private static Map<String, User> stubUsers = new ConcurrentHashMap<String, User>();
+	private static Map<String, Session> stubSessions = new ConcurrentHashMap<>();
+	private static Map<String, Feedback> stubFeedbacks = new ConcurrentHashMap<>();
+	private static Map<String, List<Question>> stubQuestions = new ConcurrentHashMap<>();
+	private static Map<String, User> stubUsers = new ConcurrentHashMap<>();
 
 	public InterposedQuestion interposedQuestion;
 
@@ -91,7 +91,7 @@ public class StubDatabaseDao implements IDatabaseDao {
 	}
 
 	private void fillWithDummyQuestions() {
-		List<Question> questions = new ArrayList<Question>();
+		List<Question> questions = new ArrayList<>();
 		questions.add(new Question());
 		stubQuestions.put("12345678", questions);
 	}
@@ -232,7 +232,7 @@ public class StubDatabaseDao implements IDatabaseDao {
 
 	@Override
 	public List<Answer> getMyAnswers(User user, Session session) {
-		return new ArrayList<Answer>();
+		return new ArrayList<>();
 	}
 
 	@Override
diff --git a/src/test/java/de/thm/arsnova/services/QuestionServiceTest.java b/src/test/java/de/thm/arsnova/services/QuestionServiceTest.java
index 0ec7036d..962c62c3 100644
--- a/src/test/java/de/thm/arsnova/services/QuestionServiceTest.java
+++ b/src/test/java/de/thm/arsnova/services/QuestionServiceTest.java
@@ -39,9 +39,7 @@ import org.springframework.test.context.web.WebAppConfiguration;
 import java.util.ArrayList;
 import java.util.List;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 @WebAppConfiguration
 @RunWith(SpringJUnit4ClassRunner.class)
@@ -64,7 +62,7 @@ public class QuestionServiceTest {
 
 	private void setAuthenticated(final boolean isAuthenticated, final String username) {
 		if (isAuthenticated) {
-			final List<GrantedAuthority> ga = new ArrayList<GrantedAuthority>();
+			final List<GrantedAuthority> ga = new ArrayList<>();
 			final UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, "secret", ga);
 			SecurityContextHolder.getContext().setAuthentication(token);
 			userService.setUserAuthenticated(isAuthenticated, username);
diff --git a/src/test/java/de/thm/arsnova/services/SessionServiceTest.java b/src/test/java/de/thm/arsnova/services/SessionServiceTest.java
index e3698a29..015a2b25 100644
--- a/src/test/java/de/thm/arsnova/services/SessionServiceTest.java
+++ b/src/test/java/de/thm/arsnova/services/SessionServiceTest.java
@@ -43,13 +43,9 @@ import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.*;
 
 @WebAppConfiguration
 @RunWith(SpringJUnit4ClassRunner.class)
@@ -72,7 +68,7 @@ public class SessionServiceTest {
 
 	private void setAuthenticated(final boolean isAuthenticated, final String username) {
 		if (isAuthenticated) {
-			final List<GrantedAuthority> ga = new ArrayList<GrantedAuthority>();
+			final List<GrantedAuthority> ga = new ArrayList<>();
 			final UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, "secret", ga);
 			SecurityContextHolder.getContext().setAuthentication(token);
 			userService.setUserAuthenticated(isAuthenticated, username);
diff --git a/src/test/java/de/thm/arsnova/services/UserServiceTest.java b/src/test/java/de/thm/arsnova/services/UserServiceTest.java
index b3836aee..2ed346c7 100644
--- a/src/test/java/de/thm/arsnova/services/UserServiceTest.java
+++ b/src/test/java/de/thm/arsnova/services/UserServiceTest.java
@@ -48,20 +48,20 @@ import static org.junit.Assert.assertEquals;
 @ActiveProfiles("test")
 public class UserServiceTest {
 
-	private static final ConcurrentHashMap<UUID, User> socketid2user = new ConcurrentHashMap<UUID, User>();
-	private static final ConcurrentHashMap<String, String> user2session = new ConcurrentHashMap<String, String>();
+	private static final ConcurrentHashMap<UUID, User> socketid2user = new ConcurrentHashMap<>();
+	private static final ConcurrentHashMap<String, String> user2session = new ConcurrentHashMap<>();
 
 	@Test
 	public void testSocket2UserPersistence() throws IOException, ClassNotFoundException {
 		socketid2user.put(UUID.randomUUID(), new User(new UsernamePasswordAuthenticationToken("ptsr00", UUID.randomUUID())));
 		socketid2user.put(UUID.randomUUID(), new User(new AttributePrincipalImpl("ptstr0")));
 
-		Map<String, Object> attributes = new HashMap<String, Object>();
+		Map<String, Object> attributes = new HashMap<>();
 		attributes.put(Google2AttributesDefinition.EMAIL, "mail@host.com");
 		Google2Profile profile = new Google2Profile("ptsr00", attributes);
 
 		socketid2user.put(UUID.randomUUID(), new User(profile));
-		List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
+		List<GrantedAuthority> authorities = new ArrayList<>();
 		authorities.add(new SimpleGrantedAuthority("ROLE_GUEST"));
 		socketid2user.put(UUID.randomUUID(), new User(new AnonymousAuthenticationToken("ptsr00", UUID.randomUUID(), authorities)));
 
-- 
GitLab