W ramach Javeloper 2021 zapraszamy Was do udziału w konkursie. Na zwycięzców czekają nagrody! Nagroda główna to okulary VR Oculus oraz 5 zestawów niespodzianek z gadżetami firmowymi. Prosimy o przesyłanie odpowiedzi do 30 września do godz. 12:00. Szczegóły znajdziecie poniżej.

Wykaż które elementy w kodzie są do poprawy. Zaproponuj swoje zmiany.

Ten kod w ogóle nie kompiluje (nie działa) i posiada sporo błędów, więc należy je skrupulatnie wskazać i poprawić:

package com.example.wather;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

interface WeatherConnector {
    String[] weather(String location);
}
interface MailProvider {
    void sendMail(final String location, final String weatherDatum, final String datum);
}
public class WeatherApp {

    static final String[] locations = new String[]{"Cracow", "Warsaw", "London", "Lodz", "Kielce", "Tokyo", "NewYork", "Buenos Aires", "Rzeszow"};

    public static void main(String[] args) throws InterruptedException {

        Random random = new Random();

        Runnable task = () -> {
            WeatherProviderUtilsCommonHelper provider = new WeatherProviderUtilsCommonHelper();

            String location = locations[random.nextInt()];
            
            log(location);
            
            Weather weather = provider.checkWeatherAndSendMailWithTemperature(location);

            log(weather);
        };

        for (int i = 0; i < locations.length * 20 ; i++) {
            new Thread(task).join();
        }
    }

    private static void log(Object object) {
        System.out.println("Weather=" + object.toString());
    }

    private static void log(String text) {
        System.out.println("Weather=" + text);
    }
}

class WeatherProviderUtilsCommonHelper {
    private WeatherConnector weatherConnector;
    private MailProvider mailProvider;
    private Map<String, Weather> cacheWeather = new HashMap<>();

    public Weather checkWeatherAndSendMailWithTemperature(String location) {

        try {
            String[] weatherData = weatherConnector.weather(location);

            Weather weather = new Weather(weatherData[0], Double.valueOf(weatherData[1]));

            cacheWeather.put(location, weather);

            mailProvider.sendMail(location, weatherData[0], weatherData[1]);

            return weather;
        } catch (Exception e) {
            log(e);
            return null;
        }
    }

    public void setWeatherConnector(WeatherConnector connector) {
        this.weatherConnector = connector;
    }

    private static void log(Object object) {
        System.out.println("Weather=" + object.toString());
    }

    private static void log(String text) {
        System.out.println("Weather=" + text);
    }
}

class Weather {
    private String location;
    private double temp;
}