From bb8ceff5ea93d9bdd34838d50f6b2ed969b53109 Mon Sep 17 00:00:00 2001 From: Martin Eyben Date: Mon, 18 Nov 2024 21:49:39 +0100 Subject: [PATCH] feat(display): enhance display --- .../java/eirb/pg203/WeatherDisplayBasic.java | 83 ++++++++++++++++--- 1 file changed, 72 insertions(+), 11 deletions(-) diff --git a/src/main/java/eirb/pg203/WeatherDisplayBasic.java b/src/main/java/eirb/pg203/WeatherDisplayBasic.java index f614ee7..abb6199 100644 --- a/src/main/java/eirb/pg203/WeatherDisplayBasic.java +++ b/src/main/java/eirb/pg203/WeatherDisplayBasic.java @@ -1,6 +1,7 @@ package eirb.pg203; import java.util.ArrayList; +import java.util.HashMap; class WeatherDisplayBasic implements WeatherDisplay { private ArrayList apis; @@ -9,42 +10,102 @@ class WeatherDisplayBasic implements WeatherDisplay { this.apis = new ArrayList(); } - private void displayHeader(int days) { + private void displayHeader(int days, double sourceColumnSize, double dayColumnSize) { StringBuilder line = new StringBuilder(); line.append("Source\t"); + for (double index = line.length(); index < sourceColumnSize; index++) + line.append(" "); for (int i = 0 ; i < days ; ++i) { line.append("\tJ + ") .append(i); + for (double index = "\tJ + ".length(); index < dayColumnSize; index++) + line.append(" "); } - System.err.println(line); + System.out.println(line); } - private void displayWeatherDatas(String ApiName, ArrayList weatherDatas) { + private double getColumnSize(HashMap> weatherDataAPIArrayListHashMap) { + double max = 0; + for (WeatherDataAPI api: weatherDataAPIArrayListHashMap.keySet()) { + for (WeatherData w: weatherDataAPIArrayListHashMap.get(api)){ + max = Math.max(max, w.toString().length()); + } + } + return max; + } + + private void displayWeatherDatas(String apiName, ArrayList weatherDatas, String startColumnString, double sourceColumnSize, double dayColumnSize) { StringBuilder line = new StringBuilder(); - line.append(ApiName); + String weatherDataString; + line.append(apiName); + for (double index = apiName.length(); index < sourceColumnSize; index++) + line.append(" "); for (WeatherData weatherData: weatherDatas) { - line.append('\t') - .append(weatherData.toString()); + weatherDataString = weatherData.toString(); + line.append(startColumnString) + .append(weatherDataString); + // fill the columns with blanks + for (double index = weatherDataString.length(); index < dayColumnSize; index++) + line.append(" "); + } + //complete column + line.append(startColumnString); + + System.out.println(line); + } + + + private void displaySeparatorLine(int days, double sourceColumnSize, double dayColumnSize) { + String mainSeparator = "-"; + String secondSeparator = "+"; + StringBuilder line = new StringBuilder(); + // source Column + for (double index = 0; index < sourceColumnSize; index++) + line.append(mainSeparator); + line.append(secondSeparator); + for (int day = 0; day < days; day++){ + for (double index = 0; index < dayColumnSize; index++) + line.append(mainSeparator); + line.append(secondSeparator); + } + System.out.println(line); + } + + private void displayAllWeatherDatas(HashMap> weatherDataAPIArrayListHashMap, int days) { + double dayColumnSize = this.getColumnSize(weatherDataAPIArrayListHashMap); + + // Adjust column size + String startColumnString = "| "; + dayColumnSize += startColumnString.length(); + + double sourceColumnSize = dayColumnSize; + + // Header + displayHeader(days, sourceColumnSize, dayColumnSize); + this.displaySeparatorLine(days, sourceColumnSize, dayColumnSize); + + // Apis + for (WeatherDataAPI api: weatherDataAPIArrayListHashMap.keySet()) { + displayWeatherDatas(api.getAPIName(), weatherDataAPIArrayListHashMap.get(api), startColumnString, sourceColumnSize, dayColumnSize); + this.displaySeparatorLine(days, sourceColumnSize, dayColumnSize); } - System.err.println(line); } public void display(int days, String city) { - ArrayList weatherDatas; - displayHeader(days); + HashMap> weatherDatasMap = new HashMap<>(); for (WeatherDataAPI w: apis) { try { - weatherDatas = w.getTemperatures(days, city); - displayWeatherDatas(w.getAPIName(), weatherDatas); + weatherDatasMap.put(w, w.getTemperatures(days, city)); } catch (Exception e) { System.err.println(e); } } + this.displayAllWeatherDatas(weatherDatasMap, days); } public void addAPI(WeatherDataAPI w) {