From 70c90c1a211e3cc033d72cee5e254083ad9b2b95 Mon Sep 17 00:00:00 2001 From: 0nlineSam Date: Mon, 25 Nov 2024 14:54:47 +0100 Subject: [PATCH] 1c: Implemented FrameDecorator --- .../src/decorator/FrameDecorator.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 ueb05_news_example/src/decorator/FrameDecorator.java diff --git a/ueb05_news_example/src/decorator/FrameDecorator.java b/ueb05_news_example/src/decorator/FrameDecorator.java new file mode 100644 index 00000000..c953290d --- /dev/null +++ b/ueb05_news_example/src/decorator/FrameDecorator.java @@ -0,0 +1,43 @@ +package decorator; + +import model.Item; + +import java.util.Arrays; + +public class FrameDecorator extends StringDecorator { + public FrameDecorator(Item item) { + super(item); + } + + public String getOverview() { + return wrapWithFrame(wrappee.getOverview()); + } + + public String getDetails() { + return wrapWithFrame(wrappee.getDetails()); + } + + public String getTitle() { + return wrapWithFrame(wrappee.getTitle()); + } + + private String wrapWithFrame(String content) { + String[] lines = content.split("\n"); + int maxLength = Arrays.stream(lines).map(String::length).reduce(Integer::max).orElse(0); + StringBuilder builder = new StringBuilder(); + builder.append("-".repeat(maxLength + 2)).append("\n"); + for (String line : lines) { + int spaces = maxLength - line.length(); + int leadingSpaces = spaces / 2; + int trailingSpaces = spaces - leadingSpaces; + + builder.append("|") + .append(" ".repeat(leadingSpaces)) + .append(line) + .append(" ".repeat(trailingSpaces)) + .append("|\n"); + } + builder.append("-".repeat(maxLength + 2)).append("\n"); + return builder.toString(); + } +}