· 6 years ago · Dec 20, 2019, 01:46 PM
1{"errors":[{"kind":"style error","fileName":"/tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/OnlineDataController.java","lineNo":3,"columnNo":23,"message":"package com.google.gson does not exist","hint":""},{"kind":"style error","fileName":"/tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/OnlineDataController.java","lineNo":16,"columnNo":23,"message":"cannot find symbol\n symbol: class JsonObject\n location: class ee.taltech.iti0202.api.provider.OnlineDataController","hint":"Have you declared all necessary variables/types?\n"},{"kind":"style error","fileName":"/tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/OnlineDataController.java","lineNo":61,"columnNo":22,"message":"cannot find symbol\n symbol: class JsonObject\n location: class ee.taltech.iti0202.api.provider.OnlineDataController","hint":"Have you declared all necessary variables/types?\n"},{"kind":"style error","fileName":"/tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java","lineNo":3,"columnNo":23,"message":"package com.google.gson does not exist","hint":""},{"kind":"style error","fileName":"/tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java","lineNo":4,"columnNo":23,"message":"package com.google.gson does not exist","hint":""},{"kind":"style error","fileName":"/tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java","lineNo":5,"columnNo":23,"message":"package com.google.gson does not exist","hint":""},{"kind":"style error","fileName":"/tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java","lineNo":15,"columnNo":13,"message":"cannot find symbol\n symbol: class JsonObject\n location: class ee.taltech.iti0202.api.provider.CityJsonParser","hint":"Have you declared all necessary variables/types?\n"},{"kind":"style error","fileName":"/tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java","lineNo":24,"columnNo":12,"message":"cannot find symbol\n symbol: class JsonObject\n location: class ee.taltech.iti0202.api.provider.CityJsonParser","hint":"Have you declared all necessary variables/types?\n"},{"kind":"style error","fileName":"/tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/OnlineDataController.java","lineNo":45,"columnNo":13,"message":"cannot find symbol\n symbol: class JsonObject\n location: class ee.taltech.iti0202.api.provider.OnlineDataController","hint":"Have you declared all necessary variables/types?\n"},{"kind":"style error","fileName":"/tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java","lineNo":33,"columnNo":23,"message":"cannot find symbol\n symbol: class JsonObject\n location: class ee.taltech.iti0202.api.provider.CityJsonParser","hint":"Have you declared all necessary variables/types?\n"},{"kind":"style error","fileName":"/tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java","lineNo":33,"columnNo":39,"message":"cannot find symbol\n symbol: class JsonParser\n location: class ee.taltech.iti0202.api.provider.CityJsonParser","hint":"Have you declared all necessary variables/types?\n"},{"kind":"style error","fileName":"/tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java","lineNo":34,"columnNo":9,"message":"cannot find symbol\n symbol: class JsonArray\n location: class ee.taltech.iti0202.api.provider.CityJsonParser","hint":"Have you declared all necessary variables/types?\n"},{"kind":"style error","fileName":"/tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java","lineNo":45,"columnNo":9,"message":"cannot find symbol\n symbol: class JsonObject\n location: class ee.taltech.iti0202.api.provider.CityJsonParser","hint":"Have you declared all necessary variables/types?\n"}],"files":[{"path":"EX13Weather.iml","contents":"<file in binary format or unable to read file>"},{"path":"src/ee/taltech/iti0202/api/agency/ChoosingClient.java","contents":"package ee.taltech.iti0202.api.agency;\n\nimport ee.taltech.iti0202.api.destinations.City;\nimport ee.taltech.iti0202.api.strategies.CityFinderStrategy;\n\nimport java.util.List;\nimport java.util.Optional;\nimport java.util.stream.Collectors;\n\npublic class ChoosingClient extends Client {\n\n public ChoosingClient(String name, String startingCity,\n CityFinderStrategy choosingStrategy, List<String> wantsToVisitCities) {\n super(name, startingCity, choosingStrategy, wantsToVisitCities);\n }\n\n public ChoosingClient(String name, String startingCity, CityFinderStrategy choosingStrategy) {\n super(name, startingCity, choosingStrategy);\n }\n\n @Override\n public Optional<City> chooseBestCity(List<City> possibleCities) {\n return getChoosingStrategy().findBestCity(\n possibleCities.stream()\n .filter(x -> getCitiesThatWantsToVisit().contains(x.getName()))\n .collect(Collectors.toList()));\n }\n}\n"},{"path":"src/ee/taltech/iti0202/api/agency/Client.java","contents":"package ee.taltech.iti0202.api.agency;\n\nimport ee.taltech.iti0202.api.destinations.City;\nimport ee.taltech.iti0202.api.strategies.CityFinderStrategy;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Optional;\n\npublic class Client {\n private String name;\n private String startingCity;\n private CityFinderStrategy choosingStrategy;\n private List<String> wantsToVisitCities;\n\n public Client(String name, String startingCity, CityFinderStrategy choosingStrategy) {\n this(name, startingCity, choosingStrategy, new ArrayList<>());\n }\n\n public Client(String name, String startingCity, CityFinderStrategy strategy, List<String> wantsToVisitCities) {\n this.name = name;\n this.startingCity = startingCity;\n this.choosingStrategy = strategy;\n this.wantsToVisitCities = wantsToVisitCities;\n }\n\n public String getName() {\n return name;\n }\n\n public String getStartingCity() {\n return startingCity;\n }\n\n public CityFinderStrategy getChoosingStrategy() {\n return choosingStrategy;\n }\n\n public List<String> getCitiesThatWantsToVisit() {\n return wantsToVisitCities;\n }\n\n public Optional<City> chooseBestCity(List<City> possibleCities) {\n return choosingStrategy.findBestCity(possibleCities);\n }\n}\n"},{"path":"src/ee/taltech/iti0202/api/agency/TravelAgency.java","contents":"package ee.taltech.iti0202.api.agency;\n\nimport ee.taltech.iti0202.api.destinations.City;\nimport ee.taltech.iti0202.api.provider.CityJsonParser;\nimport ee.taltech.iti0202.api.provider.OnlineDataController;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Optional;\nimport java.util.stream.Collectors;\n\npublic class TravelAgency {\n\n private List<String> cityNames;\n private OnlineDataController dataController;\n\n public TravelAgency(List<String> cityNames, OnlineDataController dataController) {\n this.cityNames = cityNames;\n this.dataController = dataController;\n }\n\n /**\n * This method tries to find a suitable city for the client to visit.\n * <p>\n * It uses OnlineDataController, to get data for the cities.\n * After getting data about a city, SAVE IT for the duration of the cycle.\n * Create a City object using the CityBuilder here.\n *\n * @param client a client who wants to go somewhere.\n * @return Optional city if the client was happy with it.\n */\n public Optional<City> findSuitableCitiesForClient(Client client) {\n List<City> cities = new ArrayList<>();\n\n for (String name : cityNames) {\n //cities.add(dataController.getCityMap().get(name));\n cities.add(new CityJsonParser(name, dataController.getCity(name)).invoke().getCity());\n }\n\n return client.chooseBestCity(\n cities.stream()\n .filter(x -> !x.getName().equals(client.getStartingCity()))\n .collect(Collectors.toList()));\n }\n\n /**\n * Ise agency doesn't have a destination city yet, adds it to the list.\n *\n * @param city city name.\n */\n public void addCity(String city) {\n if (!cityNames.contains(city)) {\n cityNames.add(city);\n }\n }\n\n public List<String> getCityList() {\n return cityNames;\n }\n}\n"},{"path":"src/ee/taltech/iti0202/api/destinations/City.java","contents":"package ee.taltech.iti0202.api.destinations;\n\nimport java.util.List;\n\npublic class City {\n\n private String name;\n private double lon;\n private double lat;\n private List<Double> temperatures;\n private List<Double> humidity;\n private List<Integer> weatherCodes;\n\n City(String name, double lon, double lat, List<Double> temperatures,\n List<Double> humidity, List<Integer> weatherCodes) {\n this.name = name;\n this.lon = lon;\n this.lat = lat;\n this.temperatures = temperatures;\n this.humidity = humidity;\n this.weatherCodes = weatherCodes;\n }\n\n public String getName() {\n return this.name;\n }\n\n public double getLon() {\n return this.lon;\n }\n\n public double getLat() {\n return this.lat;\n }\n\n public List<Double> getTemperatures() {\n return this.temperatures;\n }\n\n public List<Double> getHumidity() {\n return this.humidity;\n }\n\n public List<Integer> getWeatherCodes() {\n return this.weatherCodes;\n }\n\n public double getAverageTemperature() {\n return this.temperatures.stream().mapToDouble(Double::doubleValue).average().getAsDouble();\n }\n\n public double getAverageHumidity() {\n return this.humidity.stream().mapToDouble(Double::doubleValue).average().getAsDouble();\n }\n\n}\n"},{"path":"src/ee/taltech/iti0202/api/destinations/CityBuilder.java","contents":"package ee.taltech.iti0202.api.destinations;\n\nimport java.util.List;\n\npublic class CityBuilder {\n private String name;\n private double lon;\n private double lat;\n private List<Double> temperatures;\n private List<Double> humidity;\n private List<Integer> weatherCodes;\n\n public CityBuilder setName(String name) {\n this.name = name;\n return this;\n }\n\n public CityBuilder setLon(double lon) {\n this.lon = lon;\n return this;\n }\n\n public CityBuilder setLat(double lat) {\n this.lat = lat;\n return this;\n }\n\n public CityBuilder setTemperatures(List<Double> temperatures) {\n this.temperatures = temperatures;\n return this;\n }\n\n public CityBuilder setHumidity(List<Double> humidity) {\n this.humidity = humidity;\n return this;\n }\n\n public CityBuilder setWeatherCodes(List<Integer> weatherCodes) {\n this.weatherCodes = weatherCodes;\n return this;\n }\n\n public City createCity() {\n return new City(name, lon, lat, temperatures, humidity, weatherCodes);\n }\n}\n"},{"path":"src/ee/taltech/iti0202/api/Main.java","contents":"package ee.taltech.iti0202.api;\n\nimport ee.taltech.iti0202.api.agency.ChoosingClient;\nimport ee.taltech.iti0202.api.agency.TravelAgency;\nimport ee.taltech.iti0202.api.provider.OnlineDataController;\nimport ee.taltech.iti0202.api.strategies.HatesRainCityFinder;\nimport ee.taltech.iti0202.api.strategies.LovesChangeCityFinder;\nimport ee.taltech.iti0202.api.strategies.StudentMadeCityFinder;\nimport ee.taltech.iti0202.api.strategies.WarmWeatherCityFinder;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.List;\n\npublic class Main {\n public static void main(String[] args) {\n OnlineDataController controller = new OnlineDataController();\n\n List<String> cityNames = new ArrayList<>(Arrays.asList(\n \"Tallinn\",\n \"New Zealand\",\n \"Pärnu\",\n \"London\",\n \"Moscow\",\n \"Egipt\",\n \"hong Kong\",\n \"Aoulef\",\n \"Africa\",\n \"Mexico\",\n \"Libya\"\n ));\n\n // try {\n // for (String cityName : cityNames) {\n // controller.sendHttpRequest(cityName);\n // }\n // } catch (IOException e) {\n // e.printStackTrace();\n // }\n\n // controller.getCityMap().forEach((key, value) -> System.out.println(controller.getJsonMap().get(value)));\n\n WarmWeatherCityFinder warmWeatherCityFinder = new WarmWeatherCityFinder();\n HatesRainCityFinder hatesRainCityFinder = new HatesRainCityFinder();\n LovesChangeCityFinder lovesChangeCityFinder = new LovesChangeCityFinder();\n StudentMadeCityFinder studentMadeCityFinder = new StudentMadeCityFinder();\n\n ChoosingClient ago = new ChoosingClient(\"ago\", \"Tallinn\", studentMadeCityFinder, new ArrayList<>(Arrays.asList(\n \"Hong Kong\",\n \"Aoulef\",\n \"Africa\",\n \"Mexico\",\n \"Libya\"\n )));\n\n TravelAgency travelAgency = new TravelAgency(cityNames, controller);\n System.out.println(travelAgency.findSuitableCitiesForClient(ago).get().getName());\n\n }\n}\n\n"},{"path":"src/ee/taltech/iti0202/api/provider/CityJsonParser.java","contents":"package ee.taltech.iti0202.api.provider;\n\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport ee.taltech.iti0202.api.destinations.City;\nimport ee.taltech.iti0202.api.destinations.CityBuilder;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class CityJsonParser {\n private String cityName;\n private String inputLine;\n private JsonObject jsonObject;\n private City city;\n private final int numberOfResults = 40;\n\n public CityJsonParser(String cityName, String inputLine) {\n this.cityName = cityName;\n this.inputLine = inputLine;\n }\n\n public JsonObject getJsonObject() {\n return jsonObject;\n }\n\n public City getCity() {\n return city;\n }\n\n public CityJsonParser invoke() {\n jsonObject = (JsonObject) new JsonParser().parse(inputLine);\n JsonArray data = jsonObject.get(\"list\").getAsJsonArray();\n List<Double> temperatures = new ArrayList<>();\n List<Double> humidity = new ArrayList<>();\n List<Integer> weatherCodes = new ArrayList<>();\n for (int i = 0; i < numberOfResults; i++) {\n temperatures.add(data.get(i).getAsJsonObject().get(\"main\").getAsJsonObject().get(\"temp\").getAsDouble());\n humidity.add(data.get(i).getAsJsonObject().get(\"main\").getAsJsonObject().get(\"humidity\").getAsDouble());\n weatherCodes.add(data.get(i).getAsJsonObject().get(\"weather\")\n .getAsJsonArray().get(0).getAsJsonObject().get(\"id\").getAsInt());\n }\n\n JsonObject coords = jsonObject.get(\"city\").getAsJsonObject().get(\"coord\").getAsJsonObject();\n city = new CityBuilder()\n .setLat(coords.get(\"lat\").getAsDouble())\n .setLon(coords.get(\"lon\").getAsDouble())\n .setName(cityName)\n .setHumidity(humidity)\n .setTemperatures(temperatures)\n .setWeatherCodes(weatherCodes)\n .createCity();\n return this;\n }\n}\n"},{"path":"src/ee/taltech/iti0202/api/provider/OnlineDataController.java","contents":"package ee.taltech.iti0202.api.provider;\n\nimport com.google.gson.JsonObject;\nimport ee.taltech.iti0202.api.destinations.City;\n\nimport java.io.BufferedReader;\nimport java.io.IOException;\nimport java.io.InputStreamReader;\nimport java.net.URL;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class OnlineDataController {\n\n private Map<String, City> cityMap = new HashMap<>();\n private Map<City, JsonObject> jsonMap = new HashMap<>();\n\n public String getCity(String cityName) {\n try {\n if (cityMap.containsKey(cityName)) {\n return String.valueOf(cityMap.get(cityName));\n } else {\n return sendHttpRequest(cityName);\n }\n } catch (IOException e) {\n e.printStackTrace();\n return \"\";\n }\n }\n\n public String sendHttpRequest(String cityName) throws IOException {\n URL url = new URL(\"http://api.openweathermap.org/data/2.5/forecast?q=\" + // base url\n cityName.trim().replace(\" \", \"+\") + // city\n \"&appid=db3a95ba81f195feb7c46fe6ad8d31e0&units=metric\"); // key and metric\n\n System.out.println(url);\n\n BufferedReader in = new BufferedReader(\n new InputStreamReader(\n url.openConnection().getInputStream()));\n\n String inputLine = in.readLine();\n if (inputLine != null) {\n CityJsonParser cityJsonParser = new CityJsonParser(cityName, inputLine).invoke();\n JsonObject jsonObject = cityJsonParser.getJsonObject();\n City city = cityJsonParser.getCity();\n cityMap.put(cityName, city);\n jsonMap.put(city, jsonObject);\n in.close();\n return String.valueOf(jsonObject);\n }\n\n in.close();\n return \"\";\n }\n\n public Map<String, City> getCityMap() {\n return cityMap;\n }\n\n public Map<City, JsonObject> getJsonMap() {\n return jsonMap;\n }\n}\n"},{"path":"src/ee/taltech/iti0202/api/strategies/CityFinderStrategy.java","contents":"package ee.taltech.iti0202.api.strategies;\nimport ee.taltech.iti0202.api.destinations.City;\n\nimport java.util.List;\nimport java.util.Optional;\n\npublic interface CityFinderStrategy {\n Optional<City> findBestCity(List<City> candidateCities);\n}\n\n"},{"path":"src/ee/taltech/iti0202/api/strategies/HatesRainCityFinder.java","contents":"package ee.taltech.iti0202.api.strategies;\n\nimport ee.taltech.iti0202.api.destinations.City;\n\nimport java.util.Comparator;\nimport java.util.List;\nimport java.util.Optional;\n\npublic class HatesRainCityFinder implements CityFinderStrategy {\n\n // private final int rainStartCode = 499;\n // private final int rainEndCode = 600;\n // private final double humidity = 80.0d;\n\n @Override\n public Optional<City> findBestCity(List<City> candidateCities) {\n // List<City> realCandidates = new ArrayList<>();\n // for (City city : candidateCities) {\n // int allowed = 1;\n // for (int code : city.getWeatherCodes()) {\n // if (code < rainEndCode && code > rainStartCode) {\n // allowed--;\n // }\n // }\n // if (allowed >= 0) {\n // realCandidates.add(city);\n // }\n // }\n\n // return realCandidates.stream()\n // .filter(x -> x.getHumidity().stream()\n // .max(Comparator.comparing(Double::valueOf)).get() < humidity)\n // .min(Comparator.comparing(City::getAverageHumidity));\n\n return candidateCities.stream().min(Comparator.comparing(City::getAverageHumidity));\n }\n}\n"},{"path":"src/ee/taltech/iti0202/api/strategies/LovesChangeCityFinder.java","contents":"package ee.taltech.iti0202.api.strategies;\n\nimport ee.taltech.iti0202.api.destinations.City;\n\nimport java.util.Collections;\nimport java.util.Comparator;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Optional;\n\npublic class LovesChangeCityFinder implements CityFinderStrategy {\n @Override\n public Optional<City> findBestCity(List<City> candidateCities) {\n HashMap<Integer, City> bestCity = new HashMap<>();\n for (City city : candidateCities) {\n String pervious = \"000\";\n int total = 0;\n for (int weatherQuota : city.getWeatherCodes()) {\n String weather = Integer.toString(weatherQuota);\n if (weather.substring(0, 1).equals(pervious.substring(0, 1))) {\n total += 100;\n } else if (weather.substring(1, 3).equals(pervious.substring(1, 3))) {\n total -= 10;\n } else {\n total += 2 * 10;\n }\n }\n bestCity.put(total, city);\n }\n return Optional.ofNullable(Collections.max(bestCity.entrySet(),\n Comparator.comparing(Map.Entry::getKey)).getValue());\n }\n}\n"},{"path":"src/ee/taltech/iti0202/api/strategies/StudentMadeCityFinder.java","contents":"package ee.taltech.iti0202.api.strategies;\n\nimport ee.taltech.iti0202.api.destinations.City;\n\nimport java.util.Comparator;\nimport java.util.List;\nimport java.util.Optional;\n\npublic class StudentMadeCityFinder implements CityFinderStrategy {\n @Override\n public Optional<City> findBestCity(List<City> candidateCities) {\n return candidateCities.stream().min(Comparator.comparing(City::getLat));\n }\n}\n"},{"path":"src/ee/taltech/iti0202/api/strategies/WarmWeatherCityFinder.java","contents":"package ee.taltech.iti0202.api.strategies;\n\nimport ee.taltech.iti0202.api.destinations.City;\n\nimport java.util.Comparator;\nimport java.util.List;\nimport java.util.Optional;\n\npublic class WarmWeatherCityFinder implements CityFinderStrategy {\n @Override\n public Optional<City> findBestCity(List<City> candidateCities) {\n return candidateCities.stream().max(Comparator.comparing(City::getAverageTemperature));\n }\n}\n"}],"testFiles":[{"path":"checkstyle.xml","contents":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE module PUBLIC \"-//Puppy Crawl//DTD Check Configuration 1.2//EN\" \"http://www.puppycrawl.com/dtds/configuration_1_2.dtd\">\n<!--\n\n Checkstyle configuration that checks the sun coding conventions from:\n\n - the Java Language Specification at\n http://java.sun.com/docs/books/jls/second_edition/html/index.html\n\n - the Sun Code Conventions at http://java.sun.com/docs/codeconv/\n\n - the Javadoc guidelines at\n http://java.sun.com/j2se/javadoc/writingdoccomments/index.html\n\n - the JDK Api documentation http://java.sun.com/j2se/docs/api/index.html\n\n - some best practices\n\n Checkstyle is very configurable. Be sure to read the documentation at\n http://checkstyle.sf.net (or in your downloaded distribution).\n\n Most Checks are configurable, be sure to consult the documentation.\n\n To completely disable a check, just comment it out or delete it from the file.\n\n Finally, it is worth reading the documentation.\n\n-->\n<module name=\"Checker\">\n <property name=\"charset\" value=\"UTF-8\"/>\n <!--\n If you set the basedir property below, then all reported file\n names will be relative to the specified directory. See\n http://checkstyle.sourceforge.net/5.x/config.html#Checker\n\n <property name=\"basedir\" value=\"${basedir}\"/>\n -->\n\n <!-- Checks that a package-info.java file exists for each package. -->\n <!-- See http://checkstyle.sf.net/config_javadoc.html#JavadocPackage -->\n <!--\n <module name=\"JavadocPackage\"/>\n -->\n\n <!-- Checks whether files end with a new line. -->\n <!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile -->\n <module name=\"NewlineAtEndOfFile\">\n <property name=\"fileExtensions\" value=\"java, xml, py, css, fxml\"/>\n </module>\n\n <!-- Checks that property files contain the same keys. -->\n <!-- See http://checkstyle.sf.net/config_misc.html#Translation -->\n <module name=\"Translation\"/>\n\n <!-- Checks for Size Violations. -->\n <!-- See http://checkstyle.sf.net/config_sizes.html -->\n <module name=\"FileLength\"/>\n\n <!-- Checks for whitespace -->\n <!-- See http://checkstyle.sf.net/config_whitespace.html -->\n <module name=\"FileTabCharacter\"/>\n\n <!-- Miscellaneous other checks. -->\n <!-- See http://checkstyle.sf.net/config_misc.html -->\n <module name=\"RegexpSingleline\">\n <property name=\"format\" value=\"\\s+$\"/>\n <property name=\"minimum\" value=\"0\"/>\n <property name=\"maximum\" value=\"0\"/>\n <property name=\"message\" value=\"Line has trailing spaces.\"/>\n </module>\n\n <module name=\"TreeWalker\">\n\n <!-- Checks for Javadoc comments. -->\n <!-- See http://checkstyle.sf.net/config_javadoc.html -->\n\n\n <!-- Checks for Naming Conventions. -->\n <!-- See http://checkstyle.sf.net/config_naming.html -->\n <module name=\"ConstantName\"/>\n <!--\n <module name=\"LocalFinalVariableName\"/>\n -->\n <module name=\"LocalVariableName\"/>\n <module name=\"MemberName\"/>\n <module name=\"MethodName\"/>\n <module name=\"PackageName\"/>\n <module name=\"ParameterName\"/>\n <module name=\"StaticVariableName\"/>\n <module name=\"TypeName\"/>\n\n\n <!-- Checks for Headers -->\n <!-- See http://checkstyle.sf.net/config_header.html -->\n <!-- <module name=\"Header\"> -->\n <!-- The follow property value demonstrates the ability -->\n <!-- to have access to ANT properties. In this case it uses -->\n <!-- the ${basedir} property to allow Checkstyle to be run -->\n <!-- from any directory within a project. See property -->\n <!-- expansion, -->\n <!-- http://checkstyle.sf.net/config.html#properties -->\n <!-- <property -->\n <!-- name=\"headerFile\" -->\n <!-- value=\"${basedir}/java.header\"/> -->\n <!-- </module> -->\n\n <!-- Following interprets the header file as regular expressions. -->\n <!-- <module name=\"RegexpHeader\"/> -->\n\n\n <!-- Checks for imports -->\n <!-- See http://checkstyle.sf.net/config_import.html -->\n <module name=\"AvoidStarImport\"/>\n <module name=\"IllegalImport\"/> <!-- defaults to sun.* packages -->\n <module name=\"RedundantImport\"/>\n <module name=\"UnusedImports\"/>\n\n\n <!-- Checks for Size Violations. -->\n <!-- See http://checkstyle.sf.net/config_sizes.html -->\n <module name=\"LineLength\">\n <property name=\"max\" value=\"120\"/>\n </module>\n <module name=\"MethodLength\"/>\n <module name=\"ParameterNumber\"/>\n\n\n <!-- Checks for whitespace -->\n <!-- See http://checkstyle.sf.net/config_whitespace.html -->\n <module name=\"EmptyForIteratorPad\"/>\n <module name=\"GenericWhitespace\"/>\n <module name=\"MethodParamPad\"/>\n <module name=\"NoWhitespaceAfter\"/>\n <module name=\"NoWhitespaceBefore\"/>\n <module name=\"OperatorWrap\"/>\n <module name=\"ParenPad\"/>\n <module name=\"TypecastParenPad\"/>\n <module name=\"WhitespaceAfter\"/>\n <module name=\"WhitespaceAround\"/>\n\n\n <!-- Modifier Checks -->\n <!-- See http://checkstyle.sf.net/config_modifiers.html -->\n <module name=\"ModifierOrder\"/>\n <module name=\"RedundantModifier\"/>\n\n\n <!-- Checks for blocks. You know, those {}'s -->\n <!-- See http://checkstyle.sf.net/config_blocks.html -->\n <module name=\"AvoidNestedBlocks\"/>\n <module name=\"EmptyBlock\"/>\n <module name=\"LeftCurly\"/>\n <module name=\"NeedBraces\">\n <property name=\"allowSingleLineStatement\" value=\"true\"/>\n </module>\n <module name=\"RightCurly\"/>\n\n\n <!-- Checks for common coding problems -->\n <!-- See http://checkstyle.sf.net/config_coding.html -->\n <!-- module name=\"AvoidInlineConditionals\"/ -->\n <module name=\"EmptyStatement\"/>\n <module name=\"EqualsHashCode\"/>\n <!--\n <module name=\"HiddenField\">\n <property name=\"ignoreSetter\" value=\"true\"/>\n </module>\n -->\n <module name=\"IllegalInstantiation\"/>\n <module name=\"InnerAssignment\"/>\n <module name=\"MagicNumber\">\n <property name=\"ignoreNumbers\" value=\"-5,-4,-3,-2,-1,0,1,2,3,4,5,10,100,1000\"/>\n </module>\n <module name=\"MissingSwitchDefault\"/>\n <module name=\"SimplifyBooleanExpression\"/>\n <module name=\"SimplifyBooleanReturn\"/>\n\n <!-- Checks for class design -->\n <!-- See http://checkstyle.sf.net/config_design.html -->\n <!--\n <module name=\"DesignForExtension\"/>\n -->\n <module name=\"FinalClass\"/>\n <!--\n <module name=\"HideUtilityClassConstructor\"/>\n -->\n <module name=\"InterfaceIsType\"/>\n <!--\n <module name=\"VisibilityModifier\"/>\n -->\n\n\n <!-- Miscellaneous other checks. -->\n <!-- See http://checkstyle.sf.net/config_misc.html -->\n <module name=\"ArrayTypeStyle\"/>\n <!--\n <module name=\"FinalParameters\"/>\n -->\n <module name=\"TodoComment\"/>\n <module name=\"UpperEll\"/>\n\n </module>\n\n\n</module>"},{"path":"lib/gson-2.8.2.jar","contents":"<file in binary format or unable to read file>"},{"path":"lib/json-20180813.jar","contents":"<file in binary format or unable to read file>"},{"path":"lib/json-simple-1.1.1.jar","contents":"<file in binary format or unable to read file>"},{"path":"src/ee/taltech/iti0202/api/TravelAgencyTests.java","contents":"package ee.taltech.iti0202.api;\n\nimport ee.taltech.iti0202.api.agency.ChoosingClient;\nimport ee.taltech.iti0202.api.agency.Client;\nimport ee.taltech.iti0202.api.agency.TravelAgency;\nimport ee.taltech.iti0202.api.destinations.City;\nimport ee.taltech.iti0202.api.destinations.CityBuilder;\nimport ee.taltech.iti0202.api.provider.OnlineDataController;\nimport ee.taltech.iti0202.api.strategies.CityFinderStrategy;\nimport ee.taltech.iti0202.api.strategies.HatesRainCityFinder;\nimport ee.taltech.iti0202.api.strategies.LovesChangeCityFinder;\nimport ee.taltech.iti0202.api.strategies.WarmWeatherCityFinder;\nimport ee.ttu.java.studenttester.annotations.Gradable;\nimport org.testng.annotations.BeforeSuite;\nimport org.testng.annotations.ITestAnnotation;\nimport org.testng.annotations.Test;\nimport ee.ttu.java.studenttester.annotations.Gradable;\nimport ee.ttu.java.studenttester.annotations.TestContextConfiguration;\nimport ee.ttu.java.studenttester.enums.ReportMode;\n\nimport java.io.IOException;\nimport java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.file.Files;\nimport java.nio.file.Path;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Optional;\nimport java.util.concurrent.ThreadLocalRandom;\nimport java.util.concurrent.atomic.AtomicInteger;\nimport java.util.function.Predicate;\n\nimport static org.testng.Assert.*;\n\n@TestContextConfiguration(mode = ReportMode.VERBOSE)\npublic class TravelAgencyTests {\n\n private enum TestType {\n HOTTEST_CITY,\n HATES_RAIN,\n LOVES_CHANGE,\n CHOOSING_CLIENT,\n NORMAL_TEST,\n RANDOM\n }\n\n private class VoidDataController extends OnlineDataController {\n @Override\n public String getCity(String cityName) {\n return \"\";\n }\n }\n\n\n private class OfflineDataController extends OnlineDataController {\n private TestType testType;\n private HashMap<String, String> cityMap;\n\n OfflineDataController(TestType testType) throws IOException {\n this.testType = testType;\n this.cityMap = new HashMap<>();\n generateDataForMap();\n }\n\n @Override\n public String getCity(String cityName) {\n return cityMap.get(cityName);\n }\n\n void generateDataForMap() throws IOException {\n AtomicInteger at;\n switch (testType) {\n case HOTTEST_CITY:\n at = new AtomicInteger(0);\n cityMap.put(\"\", \"\");\n Files.lines(Path.of(\"files/hottest_city_data.txt\")).forEach(\n line -> cityMap.put(String.format(\"Hot%d\", at.addAndGet(1)), line)\n );\n break;\n case HATES_RAIN:\n at = new AtomicInteger(0);\n Files.lines(Path.of(\"files/hates_rain_city_data.txt\")).forEach(\n line -> cityMap.put(String.format(\"Rain%d\", at.addAndGet(1)), line)\n );\n break;\n case LOVES_CHANGE:\n at = new AtomicInteger(0);\n Files.lines(Path.of(\"files/loves_change_city_data.txt\")).forEach(\n line -> cityMap.put(String.format(\"Change%d\", at.addAndGet(1)), line)\n );\n\n break;\n case RANDOM:\n break;\n case NORMAL_TEST:\n break;\n case CHOOSING_CLIENT:\n break;\n default:\n fail();\n }\n }\n }\n\n private OfflineDataController hottestCityController;\n private VoidDataController voidDataController;\n\n private CityFinderStrategy warmWeatherStrategy;\n private CityFinderStrategy hatesRainStrategy;\n private CityFinderStrategy lovesChangeStrategy;\n private CityFinderStrategy randomStrategy;\n\n @BeforeSuite\n public void generateDataControllers() throws IOException {\n this.voidDataController = new VoidDataController();\n this.hottestCityController = new OfflineDataController(TestType.HOTTEST_CITY);\n this.warmWeatherStrategy = new WarmWeatherCityFinder();\n this.hatesRainStrategy = new HatesRainCityFinder();\n this.lovesChangeStrategy = new LovesChangeCityFinder();\n this.randomStrategy = (candidateCities -> Optional.ofNullable(candidateCities.get(ThreadLocalRandom.current().nextInt(0, candidateCities.size()))));\n }\n\n @Test(timeOut = 1000)\n public void testSimpleCity() {\n City city = new CityBuilder()\n .setName(\"Tallinn\")\n .setLat(59.45)\n .setLon(24.74)\n .setTemperatures(List.of(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0))\n .setHumidity(List.of(100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0))\n .setWeatherCodes(List.of(800, 800, 800, 800, 800, 800, 800, 800, 800, 800))\n .createCity();\n assertEquals(city.getName(), \"Tallinn\");\n assertEquals(city.getAverageHumidity(), 100.0, 0.001);\n assertEquals(city.getAverageTemperature(), 5.5, 0.001);\n assertEquals(city.getLat(), 59.45);\n assertEquals(city.getLon(), 24.74);\n assertEquals(city.getWeatherCodes(), List.of(800, 800, 800, 800, 800, 800, 800, 800, 800, 800));\n }\n\n @Test(timeOut = 1000)\n public void testClients() {\n Client john = new Client(\"John\", \"Tallinn\", randomStrategy);\n Client jill = new Client(\"Jill\", \"Paris\", randomStrategy, List.of(\"Berlin\"));\n Client karen = new ChoosingClient(\"Karen\", \"Austin\", randomStrategy);\n Client susan = new ChoosingClient(\"Susan\", \"Los Angeles\", randomStrategy, List.of(\"Paris\", \"London\"));\n\n assertEquals(john.getName(), \"John\");\n assertEquals(john.getStartingCity(), \"Tallinn\");\n assertEquals(john.getCitiesThatWantsToVisit(), new ArrayList<>());\n\n assertEquals(jill.getName(), \"Jill\");\n assertEquals(jill.getCitiesThatWantsToVisit(), List.of(\"Berlin\"));\n assertEquals(jill.getChoosingStrategy(), randomStrategy);\n\n try {\n assertEquals(karen.chooseBestCity(new ArrayList<>()), Optional.empty());\n assertTrue(john.chooseBestCity(new ArrayList<>()).isEmpty());\n assertEquals(susan.getCitiesThatWantsToVisit(), List.of(\"Paris\", \"London\"));\n } catch (IllegalArgumentException e) {\n assertTrue(true);\n }\n }\n\n @Test(timeOut = 1000)\n public void testTravelAgencyCities() {\n List<String> cityList = new ArrayList<>(List.of(\"Tallinn\", \"London\"));\n TravelAgency travelAgency = new TravelAgency(cityList, voidDataController);\n assertEquals(travelAgency.getCityList(), cityList);\n travelAgency.addCity(\"Tallinn\");\n assertEquals(travelAgency.getCityList(), cityList, \"Can not have any duplicates.\");\n travelAgency.addCity(\"Paris\");\n cityList.add(\"Paris\");\n assertEquals(travelAgency.getCityList(), cityList, \"Didn't add a city.\");\n }\n\n @Test(timeOut = 2000)\n public void testWarmWeatherStrategy() throws IOException {\n OnlineDataController dataController = new OfflineDataController(TestType.HOTTEST_CITY);\n TravelAgency travelAgency = new TravelAgency(new ArrayList<>(List.of(\"Hot1\", \"Hot2\", \"Hot3\", \"Hot4\", \"Hot5\")), dataController);\n\n Client client = new Client(\"Warmy McWarmFace\", \"Cold\", warmWeatherStrategy);\n Optional<City> perfectCity = travelAgency.findSuitableCitiesForClient(client);\n assertTrue(perfectCity.isPresent(), \"Strategy did not return a city.\");\n\n assertEquals(perfectCity.get().getName(), \"Hot5\");\n assertEquals(perfectCity.get().getAverageTemperature(), 50.00);\n assertEquals(perfectCity.get().getAverageHumidity(), 0.00);\n\n travelAgency.addCity(\"Hot6\");\n Optional<City> newPerfectCity = travelAgency.findSuitableCitiesForClient(client);\n assertTrue(newPerfectCity.isPresent());\n assertNotEquals(perfectCity, newPerfectCity);\n assertEquals(newPerfectCity.get().getName(), \"Hot6\");\n assertEquals(newPerfectCity.get().getAverageTemperature(), 60.00);\n }\n\n @Test(timeOut = 2000)\n public void testHatesRainStrategy() throws IOException {\n OnlineDataController dataController = new OfflineDataController(TestType.HATES_RAIN);\n TravelAgency travelAgency = new TravelAgency(new ArrayList<>(List.of(\"Rain1\", \"Rain2\", \"Rain3\", \"Rain4\", \"Rain5\")), dataController);\n\n Client client = new Client(\"SugarCube\", \"CandyLand\", hatesRainStrategy);\n\n Optional<City> perfectCity = travelAgency.findSuitableCitiesForClient(client);\n assertTrue(perfectCity.isPresent(), \"Did not find a city!\");\n assertEquals(perfectCity.get().getName(), \"Rain2\");\n assertEquals(perfectCity.get().getAverageHumidity(), 20.0, 0.01);\n\n travelAgency.addCity(\"Rain6\");\n Optional<City> newPerfectCity = travelAgency.findSuitableCitiesForClient(client);\n assertTrue(newPerfectCity.isPresent());\n assertNotEquals(perfectCity, newPerfectCity);\n\n assertEquals(newPerfectCity.get().getName(), \"Rain6\");\n assertEquals(newPerfectCity.get().getAverageHumidity(), 0.0, 0.01);\n assertTrue(newPerfectCity.get().getWeatherCodes().stream().allMatch(Predicate.isEqual(800)));\n }\n\n @Test(timeOut = 2000)\n public void testLovesChangeStrategy() throws IOException {\n OnlineDataController dataController = new OfflineDataController(TestType.LOVES_CHANGE);\n TravelAgency travelAgency = new TravelAgency(new ArrayList<>(List.of(\"Change1\", \"Change2\", \"Change3\")), dataController);\n\n Client client = new Client(\"Tharizdun\", \"Void\", lovesChangeStrategy);\n\n Optional<City> perfectCity = travelAgency.findSuitableCitiesForClient(client);\n assertTrue(perfectCity.isPresent());\n\n assertEquals(perfectCity.get().getName(), \"Change3\");\n\n travelAgency.addCity(\"Change4\");\n Optional<City> newMostPerfectCity = travelAgency.findSuitableCitiesForClient(client);\n assertTrue(newMostPerfectCity.isPresent());\n assertNotEquals(perfectCity, newMostPerfectCity);\n\n assertEquals(newMostPerfectCity.get().getName(), \"Change4\");\n assertEquals(newMostPerfectCity.get().getAverageTemperature(), 29.50, 0.01);\n }\n\n @Gradable(weight = 2)\n @Test(timeOut = 1000)\n public void testThatAlwaysFails() {\n fail(\"This test fails. Make sure your HTTP connections work and that you made\" +\n \"a strategy that uses lambda expression.\");\n }\n\n}\n"},{"path":"src/files/hates_rain_city_data.txt","contents":"{\"list\": [{\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}], \"city\": {\"id\": 588409, \"name\": \"Rain1\", \"coord\": {\"lat\": 59.4372, \"lon\": 24.7454}}}\n{\"list\": [{\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}], \"city\": {\"id\": 588409, \"name\": \"Rain2\", \"coord\": {\"lat\": 59.4372, \"lon\": 24.7454}}}\n{\"list\": [{\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}], \"city\": {\"id\": 588409, \"name\": \"Rain3\", \"coord\": {\"lat\": 59.4372, \"lon\": 24.7454}}}\n{\"list\": [{\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}], \"city\": {\"id\": 588409, \"name\": \"Rain4\", \"coord\": {\"lat\": 59.4372, \"lon\": 24.7454}}}\n{\"list\": [{\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 100}, \"weather\": [{\"id\": 500}]}], \"city\": {\"id\": 588409, \"name\": \"Rain5\", \"coord\": {\"lat\": 59.4372, \"lon\": 24.7454}}}\n{\"list\": [{\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}], \"city\": {\"id\": 588409, \"name\": \"Rain6\", \"coord\": {\"lat\": 59.4372, \"lon\": 24.7454}}}"},{"path":"src/files/hottest_city_data.txt","contents":"{\"list\": [{\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}], \"city\": {\"id\": 588409, \"name\": \"Hot1\", \"coord\": {\"lat\": 59.4372, \"lon\": 24.7454}}}\n{\"list\": [{\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}], \"city\": {\"id\": 588409, \"name\": \"Hot2\", \"coord\": {\"lat\": 59.4372, \"lon\": 24.7454}}}\n{\"list\": [{\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}], \"city\": {\"id\": 588409, \"name\": \"Hot3\", \"coord\": {\"lat\": 59.4372, \"lon\": 24.7454}}}\n{\"list\": [{\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}], \"city\": {\"id\": 588409, \"name\": \"Hot4\", \"coord\": {\"lat\": 59.4372, \"lon\": 24.7454}}}\n{\"list\": [{\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 50.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}], \"city\": {\"id\": 588409, \"name\": \"Hot5\", \"coord\": {\"lat\": 59.4372, \"lon\": 24.7454}}}\n{\"list\": [{\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 60.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}], \"city\": {\"id\": 588409, \"name\": \"Hot6\", \"coord\": {\"lat\": 59.4372, \"lon\": 24.7454}}}\n"},{"path":"src/files/loves_change_city_data.txt","contents":"{\"list\": [{\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}], \"city\": {\"id\": 588409, \"name\": \"Change1\", \"coord\": {\"lat\": 59.4372, \"lon\": 24.7454}}}\n{\"list\": [{\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 800}]}], \"city\": {\"id\": 588409, \"name\": \"Change2\", \"coord\": {\"lat\": 59.4372, \"lon\": 24.7454}}}\n{\"list\": [{\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 800}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5.0}, \"weather\": [{\"id\": 500}]}], \"city\": {\"id\": 588409, \"name\": \"Change3\", \"coord\": {\"lat\": 59.4372, \"lon\": 24.7454}}}\n{\"list\": [{\"main\": {\"temp\": 10.0, \"humidity\": 0}, \"weather\": [{\"id\": 100}]}, {\"main\": {\"temp\": 11.0, \"humidity\": 1}, \"weather\": [{\"id\": 101}]}, {\"main\": {\"temp\": 12.0, \"humidity\": 2}, \"weather\": [{\"id\": 102}]}, {\"main\": {\"temp\": 13.0, \"humidity\": 3}, \"weather\": [{\"id\": 103}]}, {\"main\": {\"temp\": 14.0, \"humidity\": 4}, \"weather\": [{\"id\": 104}]}, {\"main\": {\"temp\": 15.0, \"humidity\": 5}, \"weather\": [{\"id\": 105}]}, {\"main\": {\"temp\": 16.0, \"humidity\": 6}, \"weather\": [{\"id\": 106}]}, {\"main\": {\"temp\": 17.0, \"humidity\": 7}, \"weather\": [{\"id\": 107}]}, {\"main\": {\"temp\": 18.0, \"humidity\": 8}, \"weather\": [{\"id\": 108}]}, {\"main\": {\"temp\": 19.0, \"humidity\": 9}, \"weather\": [{\"id\": 109}]}, {\"main\": {\"temp\": 20.0, \"humidity\": 10}, \"weather\": [{\"id\": 110}]}, {\"main\": {\"temp\": 21.0, \"humidity\": 11}, \"weather\": [{\"id\": 111}]}, {\"main\": {\"temp\": 22.0, \"humidity\": 12}, \"weather\": [{\"id\": 112}]}, {\"main\": {\"temp\": 23.0, \"humidity\": 13}, \"weather\": [{\"id\": 113}]}, {\"main\": {\"temp\": 24.0, \"humidity\": 14}, \"weather\": [{\"id\": 114}]}, {\"main\": {\"temp\": 25.0, \"humidity\": 15}, \"weather\": [{\"id\": 115}]}, {\"main\": {\"temp\": 26.0, \"humidity\": 16}, \"weather\": [{\"id\": 116}]}, {\"main\": {\"temp\": 27.0, \"humidity\": 17}, \"weather\": [{\"id\": 117}]}, {\"main\": {\"temp\": 28.0, \"humidity\": 18}, \"weather\": [{\"id\": 118}]}, {\"main\": {\"temp\": 29.0, \"humidity\": 19}, \"weather\": [{\"id\": 119}]}, {\"main\": {\"temp\": 30.0, \"humidity\": 20}, \"weather\": [{\"id\": 120}]}, {\"main\": {\"temp\": 31.0, \"humidity\": 21}, \"weather\": [{\"id\": 121}]}, {\"main\": {\"temp\": 32.0, \"humidity\": 22}, \"weather\": [{\"id\": 122}]}, {\"main\": {\"temp\": 33.0, \"humidity\": 23}, \"weather\": [{\"id\": 123}]}, {\"main\": {\"temp\": 34.0, \"humidity\": 24}, \"weather\": [{\"id\": 124}]}, {\"main\": {\"temp\": 35.0, \"humidity\": 25}, \"weather\": [{\"id\": 125}]}, {\"main\": {\"temp\": 36.0, \"humidity\": 26}, \"weather\": [{\"id\": 126}]}, {\"main\": {\"temp\": 37.0, \"humidity\": 27}, \"weather\": [{\"id\": 127}]}, {\"main\": {\"temp\": 38.0, \"humidity\": 28}, \"weather\": [{\"id\": 128}]}, {\"main\": {\"temp\": 39.0, \"humidity\": 29}, \"weather\": [{\"id\": 129}]}, {\"main\": {\"temp\": 40.0, \"humidity\": 30}, \"weather\": [{\"id\": 130}]}, {\"main\": {\"temp\": 41.0, \"humidity\": 31}, \"weather\": [{\"id\": 131}]}, {\"main\": {\"temp\": 42.0, \"humidity\": 32}, \"weather\": [{\"id\": 132}]}, {\"main\": {\"temp\": 43.0, \"humidity\": 33}, \"weather\": [{\"id\": 133}]}, {\"main\": {\"temp\": 44.0, \"humidity\": 34}, \"weather\": [{\"id\": 134}]}, {\"main\": {\"temp\": 45.0, \"humidity\": 35}, \"weather\": [{\"id\": 135}]}, {\"main\": {\"temp\": 46.0, \"humidity\": 36}, \"weather\": [{\"id\": 136}]}, {\"main\": {\"temp\": 47.0, \"humidity\": 37}, \"weather\": [{\"id\": 137}]}, {\"main\": {\"temp\": 48.0, \"humidity\": 38}, \"weather\": [{\"id\": 138}]}, {\"main\": {\"temp\": 49.0, \"humidity\": 39}, \"weather\": [{\"id\": 139}]}], \"city\": {\"id\": 588409, \"name\": \"Change4\", \"coord\": {\"lat\": 59.4372, \"lon\": 24.7454}}}\n\n"},{"path":"travelAgency.md","contents":"# Travel Agency\n \n Teie uuring avastas, et kõige rohkem mõjutab inimeste puhkuse rahulolu ilm ning seetõttu\n otsustasite kasutada OpenWeather API-d, et leida kõige sobivamad ilmatingimused inimeste jaoks.\n\nÜlesande eesmärk on luua reisiagentuuri rakendus,\n mis aitab valivatel klientidel leida enda jaoks parim puhkuse asukoht.\n\n### Travel Agency\n\nTravel Agency eesmärk, on hoida ülevaadet linnadest, kuhu pakutakse puhkuseid ning suhelda kliendiga,\nleides talle parim reisikoht. Tulemus ei saa olla kliendi algus linnaga sama.\n\nTesteris on [Jackson](https://www.baeldung.com/jackson) ja [GSON](https://github.com/google/gson) json libraried olemas, kasutage neid, et API-ist tulevaid andmeid\nlugeda. \n\n````java\npackage ee.taltech.iti0202.api.agency;\n\npublic class TravelAgency {\n\n private List<String> cityNames;\n \n public TravelAgency(List<String> cityNames, OnlineDataController dataController) {\n this.cityNames = cityNames;\n this.dataController = dataController;\n }\n\n /**\n * If the agency doesn't have a destination city yet, adds it to the list.\n * \n * @param city city name.\n */\n public void addCity(String city) {\n \n }\n \n /**\n * Return all the cities that the agency has.\n * \n * @return list of cities\n */\n public List<String> getCityList() {\n return new ArrayList<>();\n }\n\n\n /**\n * This method tries to find a suitable city for the client to visit.\n * \n * It uses OnlineDataController, to get data for the cities.\n * After getting data about a city, SAVE IT for the duration of the cycle. OpenWeather API updates data every 10 minutes.\n * Create a City object using the CityBuilder here.\n * @param client a client who wants to go somewhere.\n * @return Optional city if the client was happy with it.\n */\n public Optional<City> findSuitableCitiesForClient(Client client) {\n return Optional.empty();\n }\n\n}\n\n````\n\n### OnlineDataController\n\nEnne API osa tegemist, genereerige endale API võti.\n\nOpenweather API - [How to start](https://openweathermap.org/appid)\n\nOnlineDataController on klass, mis suhtleb OpenWeather API-ga. Selles klassis on ainult üks kohustuslik meetod aga kaitsmisel\nkontrollitakse, et oleksite selle loonud loogilise ülesehitusega ning vajadusel loonud meetodeid juurde (**nudge nudge wink wink**).\n\nHTTP suhtluse jaoks võiks läbi lugeda [õpetuse](https://www.baeldung.com/java-http-request).\n\nHTTP suhtluse jaoks peab eemaldama linna nimest kõik tühikud ning asendama need **+** märkidega.\n\nAPI-lt peab küsima ennustust järgmise [viie](https://openweathermap.org/forecast5) päeva kohta.\nEt vältida segadusi ning [plahvatusi](https://en.wikipedia.org/wiki/Mars_Climate_Orbiter) tuleks kasutada **&units=metric** *tag*-i.\n\nTagastatav tulemus annab info järgneva 5 päeva kohta, kus iga päev ennustatakse iga 3 tunni tagant ilma, ehk\nkokku on 40 tulemust.\n\n````java\npackage ee.taltech.iti0202.api.provider;\n\n\npublic class OnlineDataController {\n \n /**\n * Tries to get forecast data for the cityName. If there is no data or cityName doesn't exist, return an empty string.\n * \n * @param cityName Name of the city\n * @return String in the form of a json-string\n */\n public String getCity(String cityName) {\n return null;\n }\n}\n\n````\n\n### Klient\n\nIgal kliendil on **nimi**, **algne linn** ning **sobiva linna valimise strateegia**. Lisaks võib olla tal ka nimekiri linnadest,\nmida ta tahab külastada. Kui kliendil on linn, mida ta soovib külastada, on see kõrgema prioriteediga\nkui muud linnad.\n\n````java\npackage ee.taltech.iti0202.api.agency;\n\nimport java.util.List;\nimport java.util.Optional;\n\npublic class Client {\n\n public Client(String name, String startingCity, CityFinderStrategy choosingStrategy) {\n }\n\n public Client(String name, String startingCity, CityFinderStrategy choosingStrategy, List<String> wantsToVisitCities) {\n }\n\n\n public String getName() {\n return \"\";\n }\n\n public String getStartingCity() {\n return \"\";\n }\n\n public CityFinderStrategy getChoosingStrategy() {\n return null;\n }\n\n public List<String> getCitiesThatWantsToVisit() {\n return null;\n }\n\n public Optional<City> chooseBestCity(List<City> possibleCities) {\n return Optional.empty();\n }\n}\n\n\n````\n\n### Jonniv klient\n\nJonniv klient laiendab tavalist klienti. Jonnivale kliendile sobivad ainult linnad, mis tema soovinimekirjas on.\n\n### City\n\nLinna klassi tuleb salvestada vajalik info, mille saite API-st.\n\nMuutuja weatherCodes on nimekiri ilmakoodidest, kõik ilmakoodid on saadaval\n[siin](https://openweathermap.org/weather-conditions) leheküljel.\n\nIga konstruktori välja jaoks peab olema *getter* meetod.\n\n```java\npackage ee.taltech.iti0202.api.destinations;\n\n\npublic class City {\n City(String name, double lon, double lat, List<Double> temperatures, List<Double> humidity, List<Integer> weatherCodes) {\n }\n\n public String getName() {\n return \"\";\n }\n\n public double getLon() {\n return 0.0;\n }\n\n public double getLat() {\n return 0.0;\n }\n\n public List<Double> getTemperatures() {\n return new ArrayList<>();\n }\n\n public List<Double> getHumidity() {\n return new ArrayList<>();\n }\n\n public List<Integer> getWeatherCodes() {\n return new ArrayList<>();\n }\n\n public double getAverageTemperature() {\n return 0.00;\n }\n\n\n public double getAverageHumidity() {\n return 0.00;\n }\n\n}\n\n```\n\n### CityBuilder\n\nParem klikk City konstruktoril -> Refactor -> Replace Constructor with builder...\n\nSee tuleb luua, et linnade loomine oleks loogilisema ülesehitusega.\n\n### Parima linna leidmine\n\nKliendi jaoks parima linna leidmiseks kasutame **strategy pattern**-ni.\nEnne selle osa lahendamist lugege läbi [seletus](https://medium.freecodecamp.org/the-strategy-pattern-explained-using-java-bc30542204e0) ning \nlühike [näide](https://www.tutorialspoint.com/design_pattern/strategy_pattern.htm).\n\nKõige peamiseks tuleb liides **CityFinderStrategy**, mida teised strateegiad peavad laiendama.\n\n```java\npackage ee.taltech.iti0202.api.strategies;\n\nimport ee.taltech.iti0202.api.destinations.City;\n\nimport java.util.List;\nimport java.util.Optional;\n\npublic interface CityFinderStrategy {\n Optional<City> findBestCity(List<City> candidateCities);\n}\n\n\n```\n\nParima Linna leidmise strateegia.\n\nKliendi jaoks parima linna leidmiseks tuleb luua strateegiad, mis arvestavad olukordadega, kus:\n\n1. WarmWeatherCityFinder\n\n Leiab kõige soojema keskmise temperatuuriga linna.\n\n2. HatesRainCityFinder\n\n Klient eelistab linna, kus on kõige vähem sajuga päevi. Kui sama sajupäevadega linnu on mitu, siis eelistab sellist, kus keskmine õhuniiskus on väikseim.\n\n3. LovesChangeCityFinder\n \n Klient soovib, et ilm oleks võimalikult erinev iga päev, arvestada tuleb temperatuuri, niiskuse ning kliima muutust.\n Temperatuuri ning niiskuse kõikumist arvestage lihtsalt iga päeva keskmise väärtuse kõikumisega. Ilma koodide kõikumisel tuleb arvestada\n kolme asjaga:\n \n 1. Kui ilmakood ei muutu, vähendage kaalu **10** võrra\n 2. Kui koodi esimene number ei muutu aga järgnevad muutuvad, suurendage kaalu **20** võrra\n 3. Kui koodi esimene number muutub, suurendage kaalu **100** võrra\n \n Temperatuuri ning niiskust arvestage päeva kaupa, igas päeva kohta on json-is 8 väärtust.\n Ilmakoode arvestage iga kolme tunni kohta, ehk 40 väärtust.\n\n4. StudentMadeCityFinder\n\n Looge ise üks suvaline strateegia kasutades [lambda](https://sanaulla.info/2013/07/02/strategy-pattern-using-lambda-expressions-in-java-8/) väljendit.\n \n## NB!\n\nÜks test peab ebaõnnestuma, selle testi eest tulevad punktid kaitsmisel.\n"}],"testSuites":[],"consoleOutputs":[{"content":null}],"output":"TEST RESULTS\n\n* Checkstyle report *\n\nFound errors: 0\n\n\n\n\n* Compiler report *\n\nCompilation failed.\nDiagnostic information:\nERROR in /tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/OnlineDataController.java on line 3, col 23: package com.google.gson does not exist\n->\timport com.google.gson.JsonObject;\nERROR in /tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/OnlineDataController.java on line 16, col 23: cannot find symbol\n symbol: class JsonObject\n location: class ee.taltech.iti0202.api.provider.OnlineDataController\n->\t private Map<City, JsonObject> jsonMap = new HashMap<>();\nHint: Have you declared all necessary variables/types?\n\nERROR in /tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/OnlineDataController.java on line 61, col 22: cannot find symbol\n symbol: class JsonObject\n location: class ee.taltech.iti0202.api.provider.OnlineDataController\n->\t public Map<City, JsonObject> getJsonMap() {\nHint: Have you declared all necessary variables/types?\n\nERROR in /tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java on line 3, col 23: package com.google.gson does not exist\n->\timport com.google.gson.JsonArray;\nERROR in /tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java on line 4, col 23: package com.google.gson does not exist\n->\timport com.google.gson.JsonObject;\nERROR in /tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java on line 5, col 23: package com.google.gson does not exist\n->\timport com.google.gson.JsonParser;\nERROR in /tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java on line 15, col 13: cannot find symbol\n symbol: class JsonObject\n location: class ee.taltech.iti0202.api.provider.CityJsonParser\n->\t private JsonObject jsonObject;\nHint: Have you declared all necessary variables/types?\n\nERROR in /tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java on line 24, col 12: cannot find symbol\n symbol: class JsonObject\n location: class ee.taltech.iti0202.api.provider.CityJsonParser\n->\t public JsonObject getJsonObject() {\nHint: Have you declared all necessary variables/types?\n\nERROR in /tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/OnlineDataController.java on line 45, col 13: cannot find symbol\n symbol: class JsonObject\n location: class ee.taltech.iti0202.api.provider.OnlineDataController\n->\t JsonObject jsonObject = cityJsonParser.getJsonObject();\nHint: Have you declared all necessary variables/types?\n\nERROR in /tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java on line 33, col 23: cannot find symbol\n symbol: class JsonObject\n location: class ee.taltech.iti0202.api.provider.CityJsonParser\n->\t jsonObject = (JsonObject) new JsonParser().parse(inputLine);\nHint: Have you declared all necessary variables/types?\n\nERROR in /tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java on line 33, col 39: cannot find symbol\n symbol: class JsonParser\n location: class ee.taltech.iti0202.api.provider.CityJsonParser\n->\t jsonObject = (JsonObject) new JsonParser().parse(inputLine);\nHint: Have you declared all necessary variables/types?\n\nERROR in /tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java on line 34, col 9: cannot find symbol\n symbol: class JsonArray\n location: class ee.taltech.iti0202.api.provider.CityJsonParser\n->\t JsonArray data = jsonObject.get(\"list\").getAsJsonArray();\nHint: Have you declared all necessary variables/types?\n\nERROR in /tmp/tmp.hiNuCNvQbT/ee/taltech/iti0202/api/provider/CityJsonParser.java on line 45, col 9: cannot find symbol\n symbol: class JsonObject\n location: class ee.taltech.iti0202.api.provider.CityJsonParser\n->\t JsonObject coords = jsonObject.get(\"city\").getAsJsonObject().get(\"coord\").getAsJsonObject();\nHint: Have you declared all necessary variables/types?\n\n\n\n* Unit tests *\n\nThere are no results.\n","totalCount":0,"totalGrade":"NaN","totalPassedCount":0,"style":100}