diff --git a/src/main/java/de/thm/arsnova/services/score/ScoreBasedScoreCalculator.java b/src/main/java/de/thm/arsnova/services/score/ScoreBasedScoreCalculator.java index 8a2b878b372847248063d29ba1ffd62c1706c1cf..aa4886e1f232718290f6e4aee6a194763b7feb5b 100644 --- a/src/main/java/de/thm/arsnova/services/score/ScoreBasedScoreCalculator.java +++ b/src/main/java/de/thm/arsnova/services/score/ScoreBasedScoreCalculator.java @@ -48,7 +48,7 @@ public class ScoreBasedScoreCalculator extends VariantScoreCalculator { if (courseMaximumValue == 0 || numUsers == 0) { return 0; } - final double courseAverageValue = userTotalValue / numUsers; + final double courseAverageValue = (double) userTotalValue / numUsers; final double courseProgress = courseAverageValue / courseMaximumValue; return (int) Math.min(100, Math.round(courseProgress * 100)); } diff --git a/src/main/java/de/thm/arsnova/util/ImageUtils.java b/src/main/java/de/thm/arsnova/util/ImageUtils.java index 7bba609524f2528593e0ef9e337bb1e99724f77a..9b79795b547bd0e1c916c3c1cf102141dcc91b17 100644 --- a/src/main/java/de/thm/arsnova/util/ImageUtils.java +++ b/src/main/java/de/thm/arsnova/util/ImageUtils.java @@ -81,7 +81,7 @@ public class ImageUtils { if (urlParts.length > 0) { final String extension = urlParts[urlParts.length - 1]; - return "data:image/" + extension + ";base64," + Base64.encodeBase64String(convertFileToByteArray(imageUrl)); + return IMAGE_PREFIX_START + extension + IMAGE_PREFIX_MIDDLE + Base64.encodeBase64String(convertFileToByteArray(imageUrl)); } return null; @@ -165,8 +165,9 @@ public class ImageUtils { final String base64String = imgInfo[1]; byte[] imageData = Base64.decodeBase64(base64String); - try { - BufferedImage originalImage = ImageIO.read(new ByteArrayInputStream(imageData)); + try (final ByteArrayInputStream bais = new ByteArrayInputStream(imageData); + final ByteArrayOutputStream baos = new ByteArrayOutputStream()) { + BufferedImage originalImage = ImageIO.read(bais); BufferedImage newImage = new BufferedImage(width, height, originalImage.getType()); Graphics2D g = newImage.createGraphics(); @@ -186,17 +187,15 @@ public class ImageUtils { g.dispose(); StringBuilder result = new StringBuilder(); - result.append("data:image/"); + result.append(IMAGE_PREFIX_START); result.append(extension); - result.append(";base64,"); + result.append(IMAGE_PREFIX_MIDDLE); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - ImageIO.write(newImage, extension, output); + ImageIO.write(newImage, extension, baos); - output.flush(); - output.close(); + baos.flush(); - result.append(Base64.encodeBase64String(output.toByteArray())); + result.append(Base64.encodeBase64String(baos.toByteArray())); return result.toString(); } catch (IOException e) { @@ -230,11 +229,8 @@ public class ImageUtils { * @return The <code>byte[]</code> of the image on success, otherwise <code>null</code>. */ byte[] convertFileToByteArray(final String imageUrl) { - try { - final URL url = new URL(imageUrl); - final ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - final InputStream is = url.openStream(); + try (final InputStream is = new URL(imageUrl).openStream(); + final ByteArrayOutputStream baos = new ByteArrayOutputStream()) { final byte[] byteChunk = new byte[CHUNK_SIZE]; int n; @@ -243,10 +239,8 @@ public class ImageUtils { } baos.flush(); - baos.close(); return baos.toByteArray(); - } catch (IOException e) { logger.error(e.getLocalizedMessage()); } diff --git a/src/test/java/de/thm/arsnova/services/score/ScoreBasedScoreCalculatorTest.java b/src/test/java/de/thm/arsnova/services/score/ScoreBasedScoreCalculatorTest.java index 81dc3c32e1defe10987ab8a15de27b6f18600a18..36083965b9d4119d1b304ccbd45199c901758958 100644 --- a/src/test/java/de/thm/arsnova/services/score/ScoreBasedScoreCalculatorTest.java +++ b/src/test/java/de/thm/arsnova/services/score/ScoreBasedScoreCalculatorTest.java @@ -60,27 +60,30 @@ public class ScoreBasedScoreCalculatorTest { @Test public void shouldFilterBasedOnQuestionVariant() { + // Total of 300 Points String q1 = this.addQuestion("lecture", 100); - String q2 = this.addQuestion("preparation", 100); + String q2 = this.addQuestion("lecture", 100); + String q3 = this.addQuestion("lecture", 100); User u1 = new TestUser("user1"); User u2 = new TestUser("user2"); - // first question is answered correctly, second one is not + User u3 = new TestUser("user3"); + // Both users achieve 200 points this.addAnswer(q1, u1, 100); this.addAnswer(q1, u2, 100); + this.addAnswer(q1, u3, 0); this.addAnswer(q2, u1, 0); - this.addAnswer(q2, u2, 0); + this.addAnswer(q2, u2, 100); + this.addAnswer(q2, u3, 0); + this.addAnswer(q3, u1, 100); + this.addAnswer(q3, u2, 100); + this.addAnswer(q3, u3, 0); lp.setQuestionVariant("lecture"); - ScoreStatistics lectureProgress = lp.getCourseProgress(null); - ScoreStatistics myLectureProgress = lp.getMyProgress(null, u1); - lp.setQuestionVariant("preparation"); - ScoreStatistics prepProgress = lp.getCourseProgress(null); - ScoreStatistics myPrepProgress = lp.getMyProgress(null, u1); - - assertEquals(100, lectureProgress.getCourseProgress()); - assertEquals(100, myLectureProgress.getMyProgress()); - assertEquals(0, prepProgress.getCourseProgress()); - assertEquals(0, myPrepProgress.getMyProgress()); + ScoreStatistics u1LectureProgress = lp.getMyProgress(null, u1); + // (500/3) / 300 ~= 0,56. + assertEquals(56, u1LectureProgress.getCourseProgress()); + // 200 / 300 ~= 0,67. + assertEquals(67, u1LectureProgress.getMyProgress()); } @Test