weather-aggregator/Weather_App.svg
2024-12-20 18:40:40 +01:00

1 line
48 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="1023px" preserveAspectRatio="none" style="width:5241px;height:1023px;background:#FFFFFF;" version="1.1" viewBox="0 0 5241 1023" width="5241px" zoomAndPan="magnify"><title>Weather App</title><defs/><g><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="103.1953" x="2561.9023" y="22.9951">Weather App</text><!--cluster eirb--><g id="cluster_eirb"><path d="M8.5,108.2969 L40.7197,108.2969 A3.75,3.75 0 0 1 43.2197,110.7969 L50.2197,130.5938 L5231.5,130.5938 A2.5,2.5 0 0 1 5234,133.0938 L5234,1014.2969 A2.5,2.5 0 0 1 5231.5,1016.7969 L8.5,1016.7969 A2.5,2.5 0 0 1 6,1014.2969 L6,110.7969 A2.5,2.5 0 0 1 8.5,108.2969 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="6" x2="50.2197" y1="130.5938" y2="130.5938"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="31.2197" x="10" y="123.292">eirb</text></g><!--cluster pg203--><g id="cluster_pg203"><path d="M32.5,151.2969 L82.7666,151.2969 A3.75,3.75 0 0 1 85.2666,153.7969 L92.2666,173.5938 L5207.5,173.5938 A2.5,2.5 0 0 1 5210,176.0938 L5210,990.2969 A2.5,2.5 0 0 1 5207.5,992.7969 L32.5,992.7969 A2.5,2.5 0 0 1 30,990.2969 L30,153.7969 A2.5,2.5 0 0 1 32.5,151.2969 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="30" x2="92.2666" y1="173.5938" y2="173.5938"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="49.2666" x="34" y="166.292">pg203</text></g><!--cluster weather--><g id="cluster_weather"><path d="M56.5,194.2969 L122.4346,194.2969 A3.75,3.75 0 0 1 124.9346,196.7969 L131.9346,216.5938 L5183.5,216.5938 A2.5,2.5 0 0 1 5186,219.0938 L5186,966.2969 A2.5,2.5 0 0 1 5183.5,968.7969 L56.5,968.7969 A2.5,2.5 0 0 1 54,966.2969 L54,196.7969 A2.5,2.5 0 0 1 56.5,194.2969 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="54" x2="131.9346" y1="216.5938" y2="216.5938"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="64.9346" x="58" y="209.292">weather</text></g><!--cluster data--><g id="cluster_data"><path d="M2794.5,237.2969 L2831.1084,237.2969 A3.75,3.75 0 0 1 2833.6084,239.7969 L2840.6084,259.5938 L5159.5,259.5938 A2.5,2.5 0 0 1 5162,262.0938 L5162,942.2969 A2.5,2.5 0 0 1 5159.5,944.7969 L2794.5,944.7969 A2.5,2.5 0 0 1 2792,942.2969 L2792,239.7969 A2.5,2.5 0 0 1 2794.5,237.2969 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="2792" x2="2840.6084" y1="259.5938" y2="259.5938"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="35.6084" x="2796" y="252.292">data</text></g><!--cluster api--><g id="cluster_api"><path d="M3052.5,280.2969 L3077.7676,280.2969 A3.75,3.75 0 0 1 3080.2676,282.7969 L3087.2676,302.5938 L5135.5,302.5938 A2.5,2.5 0 0 1 5138,305.0938 L5138,918.2969 A2.5,2.5 0 0 1 5135.5,920.7969 L3052.5,920.7969 A2.5,2.5 0 0 1 3050,918.2969 L3050,282.7969 A2.5,2.5 0 0 1 3052.5,280.2969 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="3050" x2="3087.2676" y1="302.5938" y2="302.5938"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="24.2676" x="3054" y="295.292">api</text></g><!--cluster display--><g id="cluster_display"><path d="M1588.5,296.2969 L1646.0469,296.2969 A3.75,3.75 0 0 1 1648.5469,298.7969 L1655.5469,318.5938 L2765.5,318.5938 A2.5,2.5 0 0 1 2768,321.0938 L2768,688.2969 A2.5,2.5 0 0 1 2765.5,690.7969 L1588.5,690.7969 A2.5,2.5 0 0 1 1586,688.2969 L1586,298.7969 A2.5,2.5 0 0 1 1588.5,296.2969 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="1586" x2="1655.5469" y1="318.5938" y2="318.5938"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="56.5469" x="1590" y="311.292">display</text></g><!--cluster exceptions--><g id="cluster_exceptions"><path d="M939.5,312.7969 L1026.25,312.7969 A3.75,3.75 0 0 1 1028.75,315.2969 L1035.75,335.0938 L1559.5,335.0938 A2.5,2.5 0 0 1 1562,337.5938 L1562,639.2969 A2.5,2.5 0 0 1 1559.5,641.7969 L939.5,641.7969 A2.5,2.5 0 0 1 937,639.2969 L937,315.2969 A2.5,2.5 0 0 1 939.5,312.7969 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="937" x2="1035.75" y1="335.0938" y2="335.0938"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="85.75" x="941" y="327.792">exceptions</text></g><!--cluster utils--><g id="cluster_utils"><path d="M80.5,253.2969 L116.0898,253.2969 A3.75,3.75 0 0 1 118.5898,255.7969 L125.5898,275.5938 L910.5,275.5938 A2.5,2.5 0 0 1 913,278.0938 L913,449.7969 A2.5,2.5 0 0 1 910.5,452.2969 L80.5,452.2969 A2.5,2.5 0 0 1 78,449.7969 L78,255.7969 A2.5,2.5 0 0 1 80.5,253.2969 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="78" x2="125.5898" y1="275.5938" y2="275.5938"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="34.5898" x="82" y="268.292">utils</text></g><!--cluster utils--><g id="cluster_utils"><path d="M521.5,296.2969 L557.0898,296.2969 A3.75,3.75 0 0 1 559.5898,298.7969 L566.5898,318.5938 L886.5,318.5938 A2.5,2.5 0 0 1 889,321.0938 L889,425.7969 A2.5,2.5 0 0 1 886.5,428.2969 L521.5,428.2969 A2.5,2.5 0 0 1 519,425.7969 L519,298.7969 A2.5,2.5 0 0 1 521.5,296.2969 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="519" x2="566.5898" y1="318.5938" y2="318.5938"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="34.5898" x="523" y="311.292">utils</text></g><!--class WeatherData--><g id="elem_WeatherData"><rect codeLine="66" fill="#F1F1F1" height="178.375" id="WeatherData" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="226.1494" x="2808" y="282.7969"/><ellipse cx="2870.2275" cy="298.7969" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M2873.1963,304.4375 Q2872.6182,304.7344 2871.9775,304.875 Q2871.3369,305.0313 2870.6338,305.0313 Q2868.1338,305.0313 2866.8057,303.3906 Q2865.4932,301.7344 2865.4932,298.6094 Q2865.4932,295.4844 2866.8057,293.8281 Q2868.1338,292.1719 2870.6338,292.1719 Q2871.3369,292.1719 2871.9775,292.3281 Q2872.6338,292.4844 2873.1963,292.7813 L2873.1963,295.5 Q2872.5713,294.9219 2871.9775,294.6563 Q2871.3838,294.375 2870.7588,294.375 Q2869.415,294.375 2868.7275,295.4531 Q2868.04,296.5156 2868.04,298.6094 Q2868.04,300.7031 2868.7275,301.7813 Q2869.415,302.8438 2870.7588,302.8438 Q2871.3838,302.8438 2871.9775,302.5781 Q2872.5713,302.2969 2873.1963,301.7188 L2873.1963,304.4375 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="93.1943" x="2890.7275" y="303.6436">WeatherData</text><line style="stroke:#181818;stroke-width:0.5;" x1="2809" x2="3033.1494" y1="314.7969" y2="314.7969"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="2816" y="325.4453"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="57.251" x="2828" y="331.792">City city</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="2816" y="341.7422"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="84.7451" x="2828" y="348.0889">Instant date</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="2816" y="358.0391"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="72.5293" x="2828" y="364.3857">float temp</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="2816" y="374.3359"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="135.9873" x="2828" y="380.6826">Condition condition</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="2816" y="390.6328"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="112.8887" x="2828" y="396.9795">float windSpeed</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="2816" y="406.9297"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="172.3955" x="2828" y="413.2764">float windDirectionAngle</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="2816" y="423.2266"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="200.1494" x="2828" y="429.5732">WindDirection windDirection</text><line style="stroke:#181818;stroke-width:0.5;" x1="2809" x2="3033.1494" y1="436.875" y2="436.875"/><ellipse cx="2819" cy="450.5234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="112.9912" x="2828" y="453.8701">String toString()</text></g><!--class WeatherDataAPI--><g id="elem_WeatherDataAPI"><rect codeLine="9" fill="#F1F1F1" height="113.1875" id="WeatherDataAPI" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="527.4297" x="3873.5" y="315.2969"/><ellipse cx="4075.2935" cy="331.2969" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M4071.2153,327.0625 L4071.2153,324.9063 L4078.606,324.9063 L4078.606,327.0625 L4076.1372,327.0625 L4076.1372,335.1406 L4078.606,335.1406 L4078.606,337.2969 L4071.2153,337.2969 L4071.2153,335.1406 L4073.6841,335.1406 L4073.6841,327.0625 L4071.2153,327.0625 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="115.3428" x="4095.7935" y="336.1436">WeatherDataAPI</text><line style="stroke:#181818;stroke-width:0.5;" x1="3874.5" x2="4399.9297" y1="347.2969" y2="347.2969"/><line style="stroke:#181818;stroke-width:0.5;" x1="3874.5" x2="4399.9297" y1="355.2969" y2="355.2969"/><ellipse cx="3884.5" cy="368.9453" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="437.7598" x="3893.5" y="372.292">ArrayList&lt;WeatherData&gt; getTemperature(int day, String city)</text><ellipse cx="3884.5" cy="385.2422" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="501.4297" x="3893.5" y="388.5889">ArrayList&lt;WeatherData&gt; getTemperature(int day, int hour, String city)</text><ellipse cx="3884.5" cy="401.5391" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="452.3477" x="3893.5" y="404.8857">ArrayList&lt;WeatherData&gt; getTemperatures(int days, String city)</text><ellipse cx="3884.5" cy="417.8359" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="143.5957" x="3893.5" y="421.1826">String getAPIName()</text></g><!--class WeatherDataCache--><g id="elem_WeatherDataCache"><rect codeLine="16" fill="#F1F1F1" height="162.0781" id="WeatherDataCache" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="545.0254" x="4393.5" y="520.7969"/><ellipse cx="4593.3965" cy="536.7969" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M4596.3652,542.4375 Q4595.7871,542.7344 4595.1465,542.875 Q4594.5059,543.0313 4593.8027,543.0313 Q4591.3027,543.0313 4589.9746,541.3906 Q4588.6621,539.7344 4588.6621,536.6094 Q4588.6621,533.4844 4589.9746,531.8281 Q4591.3027,530.1719 4593.8027,530.1719 Q4594.5059,530.1719 4595.1465,530.3281 Q4595.8027,530.4844 4596.3652,530.7813 L4596.3652,533.5 Q4595.7402,532.9219 4595.1465,532.6563 Q4594.5527,532.375 4593.9277,532.375 Q4592.584,532.375 4591.8965,533.4531 Q4591.209,534.5156 4591.209,536.6094 Q4591.209,538.7031 4591.8965,539.7813 Q4592.584,540.8438 4593.9277,540.8438 Q4594.5527,540.8438 4595.1465,540.5781 Q4595.7402,540.2969 4596.3652,539.7188 L4596.3652,542.4375 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="136.7324" x="4613.8965" y="541.6436">WeatherDataCache</text><line style="stroke:#181818;stroke-width:0.5;" x1="4394.5" x2="4937.5254" y1="552.7969" y2="552.7969"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="4401.5" y="563.4453"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="458.623" x="4413.5" y="569.792">private HashMap&lt;String,WeatherDataCache.CacheValue&gt; cache</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="4401.5" y="579.7422"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="154.9775" x="4413.5" y="586.0889">private long cacheTTL</text><line style="stroke:#181818;stroke-width:0.5;" x1="4394.5" x2="4937.5254" y1="593.3906" y2="593.3906"/><ellipse cx="4404.5" cy="607.0391" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="266.3418" x="4413.5" y="610.3857">boolean has(String cityName, int day)</text><ellipse cx="4404.5" cy="623.3359" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="334.5781" x="4413.5" y="626.6826">boolean needsUpdate(String cityName, int day)</text><ellipse cx="4404.5" cy="639.6328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="519.0254" x="4413.5" y="642.9795">void set(String cityName, int day, WeatherData value, Instant timestamp)</text><ellipse cx="4404.5" cy="655.9297" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="245.2871" x="4413.5" y="659.2764">JSONArray toJSON(String apiName)</text><ellipse cx="4404.5" cy="672.2266" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="220.8418" x="4413.5" y="675.5732">void fromJSON(JSONArray data)</text></g><!--class WeatherCachedAPI--><g id="elem_WeatherCachedAPI"><rect codeLine="26" fill="#F1F1F1" height="145.7813" id="WeatherCachedAPI" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="443.2588" x="3915.5" y="528.7969"/><ellipse cx="4065.7095" cy="544.7969" fill="#A9DCDF" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M4065.8188,540.1406 L4064.6626,545.2188 L4066.9907,545.2188 L4065.8188,540.1406 Z M4064.3345,537.9063 L4067.3188,537.9063 L4070.6782,550.2969 L4068.2251,550.2969 L4067.4595,547.2344 L4064.1782,547.2344 L4063.4282,550.2969 L4060.9907,550.2969 L4064.3345,537.9063 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="134.3398" x="4086.2095" y="549.6436">WeatherCachedAPI</text><line style="stroke:#181818;stroke-width:0.5;" x1="3916.5" x2="4357.7588" y1="560.7969" y2="560.7969"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3923.5" y="571.4453"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="236.5918" x="3935.5" y="577.792">private WeatherDataCache cache</text><line style="stroke:#181818;stroke-width:0.5;" x1="3916.5" x2="4357.7588" y1="585.0938" y2="585.0938"/><ellipse cx="3926.5" cy="598.7422" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="136.3975" x="3935.5" y="602.0889">JSONArray toJSON()</text><ellipse cx="3926.5" cy="615.0391" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="226.9053" x="3935.5" y="618.3857">void loadCache(JSONArray data)</text><ellipse cx="3926.5" cy="631.3359" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="256.9766" x="3935.5" y="634.6826">void loadCacheFromFile(String path)</text><ellipse cx="3926.5" cy="647.6328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="240.9326" x="3935.5" y="650.9795">void saveCacheToFile(String path)</text><ellipse cx="3926.5" cy="663.9297" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="417.2588" x="3935.5" y="667.2764">ArrayList&lt;WeatherData&gt; getTemperature(JSONArray data)</text></g><!--class OpenMeteo--><g id="elem_OpenMeteo"><rect codeLine="35" fill="#F1F1F1" height="162.0781" id="OpenMeteo" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="718.9932" x="3066.5" y="742.7969"/><ellipse cx="3381.3701" cy="758.7969" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M3384.3389,764.4375 Q3383.7607,764.7344 3383.1201,764.875 Q3382.4795,765.0313 3381.7764,765.0313 Q3379.2764,765.0313 3377.9482,763.3906 Q3376.6357,761.7344 3376.6357,758.6094 Q3376.6357,755.4844 3377.9482,753.8281 Q3379.2764,752.1719 3381.7764,752.1719 Q3382.4795,752.1719 3383.1201,752.3281 Q3383.7764,752.4844 3384.3389,752.7813 L3384.3389,755.5 Q3383.7139,754.9219 3383.1201,754.6563 Q3382.5264,754.375 3381.9014,754.375 Q3380.5576,754.375 3379.8701,755.4531 Q3379.1826,756.5156 3379.1826,758.6094 Q3379.1826,760.7031 3379.8701,761.7813 Q3380.5576,762.8438 3381.9014,762.8438 Q3382.5264,762.8438 3383.1201,762.5781 Q3383.7139,762.2969 3384.3389,761.7188 L3384.3389,764.4375 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="80.7529" x="3401.8701" y="763.6436">OpenMeteo</text><line style="stroke:#181818;stroke-width:0.5;" x1="3067.5" x2="3784.4932" y1="774.7969" y2="774.7969"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3074.5" y="785.4453"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="157.1377" x="3086.5" y="791.792">String forecastBaseUrl</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3074.5" y="801.7422"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="126.7041" x="3086.5" y="808.0889">String daylyQuery</text><polygon fill="none" points="3077.5,817.0391,3073.5,823.0391,3081.5,823.0391" style="stroke:#1963A0;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="179.6553" x="3086.5" y="824.3857">JSONFetcher JSONFetcher</text><polygon fill="none" points="3077.5,833.3359,3073.5,839.3359,3081.5,839.3359" style="stroke:#1963A0;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="78.4424" x="3086.5" y="840.6826">Clock clock</text><line style="stroke:#181818;stroke-width:0.5;" x1="3067.5" x2="3784.4932" y1="847.9844" y2="847.9844"/><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3074.5" y="858.6328"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="312.7441" x="3086.5" y="864.9795">JSONObject fetchWeather(int days, City city)</text><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3074.5" y="874.9297"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="339.3154" x="3086.5" y="881.2764">Condition getConditionFromCode(int WMOCode)</text><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3074.5" y="891.2266"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="692.9932" x="3086.5" y="897.5732">ArrayList&lt;WeatherData&gt; getWeatherDataFromForecast(JSONObject response, int day, String city)</text></g><!--class OpenWeatherMap--><g id="elem_OpenWeatherMap"><rect codeLine="45" fill="#F1F1F1" height="145.7813" id="OpenWeatherMap" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="633.1064" x="3820.5" y="750.7969"/><ellipse cx="4069.4512" cy="766.7969" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M4072.4199,772.4375 Q4071.8418,772.7344 4071.2012,772.875 Q4070.5605,773.0313 4069.8574,773.0313 Q4067.3574,773.0313 4066.0293,771.3906 Q4064.7168,769.7344 4064.7168,766.6094 Q4064.7168,763.4844 4066.0293,761.8281 Q4067.3574,760.1719 4069.8574,760.1719 Q4070.5605,760.1719 4071.2012,760.3281 Q4071.8574,760.4844 4072.4199,760.7813 L4072.4199,763.5 Q4071.7949,762.9219 4071.2012,762.6563 Q4070.6074,762.375 4069.9824,762.375 Q4068.6387,762.375 4067.9512,763.4531 Q4067.2637,764.5156 4067.2637,766.6094 Q4067.2637,768.7031 4067.9512,769.7813 Q4068.6387,770.8438 4069.9824,770.8438 Q4070.6074,770.8438 4071.2012,770.5781 Q4071.7949,770.2969 4072.4199,769.7188 L4072.4199,772.4375 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="126.7041" x="4089.9512" y="771.6436">OpenWeatherMap</text><line style="stroke:#181818;stroke-width:0.5;" x1="3821.5" x2="4452.6064" y1="782.7969" y2="782.7969"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3828.5" y="793.4453"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="157.1377" x="3840.5" y="799.792">String forecastBaseUrl</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3828.5" y="809.7422"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="94.459" x="3840.5" y="816.0889">String APIKey</text><polygon fill="none" points="3831.5,825.0391,3827.5,831.0391,3835.5,831.0391" style="stroke:#1963A0;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="78.4424" x="3840.5" y="832.3857">Clock clock</text><polygon fill="none" points="3831.5,841.3359,3827.5,847.3359,3835.5,847.3359" style="stroke:#1963A0;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="179.6553" x="3840.5" y="848.6826">JSONFetcher JSONFetcher</text><line style="stroke:#181818;stroke-width:0.5;" x1="3821.5" x2="4452.6064" y1="855.9844" y2="855.9844"/><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3828.5" y="866.6328"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="607.1064" x="3840.5" y="872.9795">WeatherData getWeatherDataFromForecast(JSONObject response, int day, String city)</text><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3828.5" y="882.9297"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="248.0967" x="3840.5" y="889.2764">JSONObject fetchWeather(City city)</text></g><!--class WeatherAPI--><g id="elem_WeatherAPI"><rect codeLine="55" fill="#F1F1F1" height="145.7813" id="WeatherAPI" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="633.1064" x="4488.5" y="750.7969"/><ellipse cx="4759.8457" cy="766.7969" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M4762.8145,772.4375 Q4762.2363,772.7344 4761.5957,772.875 Q4760.9551,773.0313 4760.252,773.0313 Q4757.752,773.0313 4756.4238,771.3906 Q4755.1113,769.7344 4755.1113,766.6094 Q4755.1113,763.4844 4756.4238,761.8281 Q4757.752,760.1719 4760.252,760.1719 Q4760.9551,760.1719 4761.5957,760.3281 Q4762.252,760.4844 4762.8145,760.7813 L4762.8145,763.5 Q4762.1895,762.9219 4761.5957,762.6563 Q4761.002,762.375 4760.377,762.375 Q4759.0332,762.375 4758.3457,763.4531 Q4757.6582,764.5156 4757.6582,766.6094 Q4757.6582,768.7031 4758.3457,769.7813 Q4759.0332,770.8438 4760.377,770.8438 Q4761.002,770.8438 4761.5957,770.5781 Q4762.1895,770.2969 4762.8145,769.7188 L4762.8145,772.4375 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="81.915" x="4780.3457" y="771.6436">WeatherAPI</text><line style="stroke:#181818;stroke-width:0.5;" x1="4489.5" x2="5120.6064" y1="782.7969" y2="782.7969"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="4496.5" y="793.4453"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="94.459" x="4508.5" y="799.792">String APIKey</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="4496.5" y="809.7422"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="157.1377" x="4508.5" y="816.0889">String forecastBaseUrl</text><polygon fill="none" points="4499.5,825.0391,4495.5,831.0391,4503.5,831.0391" style="stroke:#1963A0;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="179.6553" x="4508.5" y="832.3857">JSONFetcher JSONFetcher</text><line style="stroke:#181818;stroke-width:0.5;" x1="4489.5" x2="5120.6064" y1="839.6875" y2="839.6875"/><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="4496.5" y="850.3359"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="327.0859" x="4508.5" y="856.6826">JSONObject fetchWeather(int days, String city)</text><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="4496.5" y="866.6328"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="412.1865" x="4508.5" y="872.9795">WeatherData.Condition getConditionFromString(String str)</text><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="4496.5" y="882.9297"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="607.1064" x="4508.5" y="889.2764">WeatherData getWeatherDataFromForecast(JSONObject response, int day, String city)</text></g><!--class WeatherDisplayBasic--><g id="elem_WeatherDisplayBasic"><rect codeLine="81" fill="#F1F1F1" height="145.7813" id="WeatherDisplayBasic" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="1150.0947" x="1602" y="528.7969"/><ellipse cx="2098.5796" cy="544.7969" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M2101.5483,550.4375 Q2100.9702,550.7344 2100.3296,550.875 Q2099.689,551.0313 2098.9858,551.0313 Q2096.4858,551.0313 2095.1577,549.3906 Q2093.8452,547.7344 2093.8452,544.6094 Q2093.8452,541.4844 2095.1577,539.8281 Q2096.4858,538.1719 2098.9858,538.1719 Q2099.689,538.1719 2100.3296,538.3281 Q2100.9858,538.4844 2101.5483,538.7813 L2101.5483,541.5 Q2100.9233,540.9219 2100.3296,540.6563 Q2099.7358,540.375 2099.1108,540.375 Q2097.7671,540.375 2097.0796,541.4531 Q2096.3921,542.5156 2096.3921,544.6094 Q2096.3921,546.7031 2097.0796,547.7813 Q2097.7671,548.8438 2099.1108,548.8438 Q2099.7358,548.8438 2100.3296,548.5781 Q2100.9233,548.2969 2101.5483,547.7188 L2101.5483,550.4375 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="148.4355" x="2119.0796" y="549.6436">WeatherDisplayBasic</text><line style="stroke:#181818;stroke-width:0.5;" x1="1603" x2="2751.0947" y1="560.7969" y2="560.7969"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1610" y="571.4453"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="234.3291" x="1622" y="577.792">ArrayList&lt;WeatherDataAPI&gt; apis</text><line style="stroke:#181818;stroke-width:0.5;" x1="1603" x2="2751.0947" y1="585.0938" y2="585.0938"/><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1610" y="595.7422"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="168.4307" x="1622" y="602.0889">double getColumnSize()</text><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1610" y="612.0391"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="560.8203" x="1622" y="618.3857">void displayHeader(int days, double sourceColumnSize, double dayColumnSize)</text><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1610" y="628.3359"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="1124.0947" x="1622" y="634.6826">void displayWeatherDatas(String apiName, ArrayList&lt;WeatherData&gt; weatherDatas, String startColumnSize, double sourceColumnSize, double dayColumnSize)</text><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1610" y="644.6328"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="608.1318" x="1622" y="650.9795">void displaySeparatorLine(int days, double sourceColumnSize, double dayColumnSize)</text><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1610" y="660.9297"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="212.5566" x="1622" y="667.2764">void displayAllWeatherDatas()</text></g><!--class WeatherDisplay--><g id="elem_WeatherDisplay"><rect codeLine="91" fill="#F1F1F1" height="80.5938" id="WeatherDisplay" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="256.9521" x="2048.5" y="331.2969"/><ellipse cx="2117.0405" cy="347.2969" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M2112.9624,343.0625 L2112.9624,340.9063 L2120.353,340.9063 L2120.353,343.0625 L2117.8843,343.0625 L2117.8843,351.1406 L2120.353,351.1406 L2120.353,353.2969 L2112.9624,353.2969 L2112.9624,351.1406 L2115.4312,351.1406 L2115.4312,343.0625 L2112.9624,343.0625 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="111.3711" x="2137.5405" y="352.1436">WeatherDisplay</text><line style="stroke:#181818;stroke-width:0.5;" x1="2049.5" x2="2304.4521" y1="363.2969" y2="363.2969"/><line style="stroke:#181818;stroke-width:0.5;" x1="2049.5" x2="2304.4521" y1="371.2969" y2="371.2969"/><ellipse cx="2059.5" cy="384.9453" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="230.9521" x="2068.5" y="388.292">void display(int days, String city)</text><ellipse cx="2059.5" cy="401.2422" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="224.7451" x="2068.5" y="404.5889">void addAPI(WeatherDataAPI w)</text></g><!--class WeatherFeatchingException--><g id="elem_WeatherFeatchingException"><rect codeLine="98" fill="#F1F1F1" height="48" id="WeatherFeatchingException" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="229.8662" x="1121" y="347.7969"/><ellipse cx="1136" cy="363.7969" fill="#D94321" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1141.0156,369.7969 L1138.4844,369.7969 L1136.1094,365.7031 L1133.75,369.7969 L1131.2188,369.7969 L1134.8594,363.5 L1131.3281,357.4063 L1133.8594,357.4063 L1136.1094,361.3438 L1138.375,357.4063 L1140.9063,357.4063 L1137.3906,363.5 L1141.0156,369.7969 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="197.8662" x="1150" y="368.6436">WeatherFeatchingException</text><line style="stroke:#181818;stroke-width:0.5;" x1="1122" x2="1349.8662" y1="379.7969" y2="379.7969"/><line style="stroke:#181818;stroke-width:0.5;" x1="1122" x2="1349.8662" y1="387.7969" y2="387.7969"/></g><!--class WeatherFeatchingExceptionApi--><g id="elem_WeatherFeatchingExceptionApi"><rect codeLine="99" fill="#F1F1F1" height="48" id="WeatherFeatchingExceptionApi" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="252.2197" x="953" y="577.7969"/><ellipse cx="968" cy="593.7969" fill="#D94321" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M973.0156,599.7969 L970.4844,599.7969 L968.1094,595.7031 L965.75,599.7969 L963.2188,599.7969 L966.8594,593.5 L963.3281,587.4063 L965.8594,587.4063 L968.1094,591.3438 L970.375,587.4063 L972.9063,587.4063 L969.3906,593.5 L973.0156,599.7969 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="220.2197" x="982" y="598.6436">WeatherFeatchingExceptionApi</text><line style="stroke:#181818;stroke-width:0.5;" x1="954" x2="1204.2197" y1="609.7969" y2="609.7969"/><line style="stroke:#181818;stroke-width:0.5;" x1="954" x2="1204.2197" y1="617.7969" y2="617.7969"/></g><!--class WeatherFeatchingExceptionCityCoords--><g id="elem_WeatherFeatchingExceptionCityCoords"><rect codeLine="100" fill="#F1F1F1" height="48" id="WeatherFeatchingExceptionCityCoords" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="306.1484" x="1240" y="577.7969"/><ellipse cx="1255" cy="593.7969" fill="#D94321" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1260.0156,599.7969 L1257.4844,599.7969 L1255.1094,595.7031 L1252.75,599.7969 L1250.2188,599.7969 L1253.8594,593.5 L1250.3281,587.4063 L1252.8594,587.4063 L1255.1094,591.3438 L1257.375,587.4063 L1259.9063,587.4063 L1256.3906,593.5 L1260.0156,599.7969 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="274.1484" x="1269" y="598.6436">WeatherFeatchingExceptionCityCoords</text><line style="stroke:#181818;stroke-width:0.5;" x1="1241" x2="1545.1484" y1="609.7969" y2="609.7969"/><line style="stroke:#181818;stroke-width:0.5;" x1="1241" x2="1545.1484" y1="617.7969" y2="617.7969"/></g><!--class City--><g id="elem_City"><rect codeLine="114" fill="#F1F1F1" height="129.4844" id="City" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="406.208" x="94" y="307.2969"/><ellipse cx="279.1343" cy="323.2969" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M282.103,328.9375 Q281.5249,329.2344 280.8843,329.375 Q280.2437,329.5313 279.5405,329.5313 Q277.0405,329.5313 275.7124,327.8906 Q274.3999,326.2344 274.3999,323.1094 Q274.3999,319.9844 275.7124,318.3281 Q277.0405,316.6719 279.5405,316.6719 Q280.2437,316.6719 280.8843,316.8281 Q281.5405,316.9844 282.103,317.2813 L282.103,320 Q281.478,319.4219 280.8843,319.1563 Q280.2905,318.875 279.6655,318.875 Q278.3218,318.875 277.6343,319.9531 Q276.9468,321.0156 276.9468,323.1094 Q276.9468,325.2031 277.6343,326.2813 Q278.3218,327.3438 279.6655,327.3438 Q280.2905,327.3438 280.8843,327.0781 Q281.478,326.7969 282.103,326.2188 L282.103,328.9375 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="27.4395" x="299.6343" y="328.1436">City</text><line style="stroke:#181818;stroke-width:0.5;" x1="95" x2="499.208" y1="339.2969" y2="339.2969"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="102" y="349.9453"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="112.8955" x="114" y="356.292">String cityName</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="102" y="366.2422"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="161.3828" x="114" y="372.5889">utils.Coords cityCoords</text><polygon fill="none" points="105,381.5391,101,387.5391,109,387.5391" style="stroke:#1963A0;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="179.6553" x="114" y="388.8857">JSONFetcher JSONFetcher</text><line style="stroke:#181818;stroke-width:0.5;" x1="95" x2="499.208" y1="396.1875" y2="396.1875"/><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="102" y="406.8359"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="380.208" x="114" y="413.1826">private Coords getCoordsFromName(String cityName)</text><ellipse cx="105" cy="426.1328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="159.5645" x="114" y="429.4795">public String toString()</text></g><!--class Coords--><g id="elem_Coords"><rect codeLine="104" fill="#F1F1F1" height="80.5938" id="Coords" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="83.2305" x="789.5" y="331.2969"/><ellipse cx="805.5745" cy="347.2969" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M808.5432,352.9375 Q807.9651,353.2344 807.3245,353.375 Q806.6838,353.5313 805.9807,353.5313 Q803.4807,353.5313 802.1526,351.8906 Q800.8401,350.2344 800.8401,347.1094 Q800.8401,343.9844 802.1526,342.3281 Q803.4807,340.6719 805.9807,340.6719 Q806.6838,340.6719 807.3245,340.8281 Q807.9807,340.9844 808.5432,341.2813 L808.5432,344 Q807.9182,343.4219 807.3245,343.1563 Q806.7307,342.875 806.1057,342.875 Q804.762,342.875 804.0745,343.9531 Q803.387,345.0156 803.387,347.1094 Q803.387,349.2031 804.0745,350.2813 Q804.762,351.3438 806.1057,351.3438 Q806.7307,351.3438 807.3245,351.0781 Q807.9182,350.7969 808.5432,350.2188 L808.5432,352.9375 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="48.8428" x="819.8132" y="352.1436">Coords</text><line style="stroke:#181818;stroke-width:0.5;" x1="790.5" x2="871.7305" y1="363.2969" y2="363.2969"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="797.5" y="373.9453"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="53.8604" x="809.5" y="380.292">float lat</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="797.5" y="390.2422"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="57.2305" x="809.5" y="396.5889">float lon</text><line style="stroke:#181818;stroke-width:0.5;" x1="790.5" x2="871.7305" y1="403.8906" y2="403.8906"/></g><!--class JSONFetcher--><g id="elem_JSONFetcher"><rect codeLine="109" fill="#F1F1F1" height="80.5938" id="JSONFetcher" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="218.999" x="535.5" y="331.2969"/><ellipse cx="596.9482" cy="347.2969" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M599.917,352.9375 Q599.3389,353.2344 598.6982,353.375 Q598.0576,353.5313 597.3545,353.5313 Q594.8545,353.5313 593.5264,351.8906 Q592.2139,350.2344 592.2139,347.1094 Q592.2139,343.9844 593.5264,342.3281 Q594.8545,340.6719 597.3545,340.6719 Q598.0576,340.6719 598.6982,340.8281 Q599.3545,340.9844 599.917,341.2813 L599.917,344 Q599.292,343.4219 598.6982,343.1563 Q598.1045,342.875 597.4795,342.875 Q596.1357,342.875 595.4482,343.9531 Q594.7607,345.0156 594.7607,347.1094 Q594.7607,349.2031 595.4482,350.2813 Q596.1357,351.3438 597.4795,351.3438 Q598.1045,351.3438 598.6982,351.0781 Q599.292,350.7969 599.917,350.2188 L599.917,352.9375 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="87.6025" x="617.4482" y="352.1436">JSONFetcher</text><line style="stroke:#181818;stroke-width:0.5;" x1="536.5" x2="753.499" y1="363.2969" y2="363.2969"/><line style="stroke:#181818;stroke-width:0.5;" x1="536.5" x2="753.499" y1="371.2969" y2="371.2969"/><ellipse cx="546.5" cy="384.9453" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="97.2686" x="555.5" y="388.292">fetch(URL url)</text><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="543.5" y="398.2422"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="192.999" x="555.5" y="404.5889">private fetchString(URL url)</text></g><g id="elem_N"><path d="M1322,55.7969 L1322,80.9297 L1675.9663,80.9297 L1675.9663,65.7969 L1665.9663,55.7969 L1322,55.7969 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M1665.9663,55.7969 L1665.9663,65.7969 L1675.9663,65.7969 L1665.9663,55.7969 " fill="#FEFFDD" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="332.9663" x="1328" y="72.8638">Getters, setters and constructors are not displayed</text></g><!--class Exception--><g id="elem_Exception"><rect codeLine="125" fill="#F1F1F1" height="48" id="Exception" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="101.1455" x="1185.5" y="44.2969"/><ellipse cx="1200.5" cy="60.2969" fill="#D94321" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1205.5156,66.2969 L1202.9844,66.2969 L1200.6094,62.2031 L1198.25,66.2969 L1195.7188,66.2969 L1199.3594,60 L1195.8281,53.9063 L1198.3594,53.9063 L1200.6094,57.8438 L1202.875,53.9063 L1205.4063,53.9063 L1201.8906,60 L1205.5156,66.2969 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="69.1455" x="1214.5" y="65.1436">Exception</text><line style="stroke:#181818;stroke-width:0.5;" x1="1186.5" x2="1285.6455" y1="76.2969" y2="76.2969"/><line style="stroke:#181818;stroke-width:0.5;" x1="1186.5" x2="1285.6455" y1="84.2969" y2="84.2969"/></g><!--reverse link WeatherDataAPI to WeatherCachedAPI--><g id="link_WeatherDataAPI_WeatherCachedAPI"><path d="M4137,446.5769 C4137,476.7669 4137,496.3969 4137,528.7869 " fill="none" id="WeatherDataAPI-backto-WeatherCachedAPI" style="stroke:#181818;stroke-width:1;stroke-dasharray:7.0,7.0;"/><polygon fill="none" points="4137,428.5769,4131,446.5769,4143,446.5769,4137,428.5769" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link WeatherCachedAPI to OpenMeteo--><g id="link_WeatherCachedAPI_OpenMeteo"><path d="M3898.2545,676.6682 C3825.0945,699.3082 3760.27,719.3669 3684.6,742.7769 " fill="none" id="WeatherCachedAPI-backto-OpenMeteo" style="stroke:#181818;stroke-width:1;"/><polygon fill="none" points="3915.45,671.3469,3896.4808,670.9363,3900.0283,682.4,3915.45,671.3469" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link WeatherCachedAPI to OpenWeatherMap--><g id="link_WeatherCachedAPI_OpenWeatherMap"><path d="M4137,692.8369 C4137,717.1469 4137,726.2769 4137,750.5969 " fill="none" id="WeatherCachedAPI-backto-OpenWeatherMap" style="stroke:#181818;stroke-width:1;"/><polygon fill="none" points="4137,674.8369,4131,692.8369,4143,692.8369,4137,674.8369" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link WeatherCachedAPI to WeatherAPI--><g id="link_WeatherCachedAPI_WeatherAPI"><path d="M4327.2965,681.2921 C4349.2265,689.7021 4354.65,691.4469 4376,698.7969 C4428.69,716.9369 4485.61,734.6669 4540.23,750.7869 " fill="none" id="WeatherCachedAPI-backto-WeatherAPI" style="stroke:#181818;stroke-width:1;"/><polygon fill="none" points="4310.49,674.8469,4325.1481,686.8942,4329.4449,675.6899,4310.49,674.8469" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link WeatherDisplay to WeatherDisplayBasic--><g id="link_WeatherDisplay_WeatherDisplayBasic"><path d="M2177,430.5069 C2177,462.4069 2177,490.0469 2177,528.3969 " fill="none" id="WeatherDisplay-backto-WeatherDisplayBasic" style="stroke:#181818;stroke-width:1;stroke-dasharray:7.0,7.0;"/><polygon fill="none" points="2177,412.5069,2171,430.5069,2183,430.5069,2177,412.5069" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link WeatherFeatchingException to WeatherFeatchingExceptionApi--><g id="link_WeatherFeatchingException_WeatherFeatchingExceptionApi"><path d="M1209.8718,410.7423 C1179.7818,454.4423 1125.08,533.8769 1094.96,577.6169 " fill="none" id="WeatherFeatchingException-backto-WeatherFeatchingExceptionApi" style="stroke:#181818;stroke-width:1;"/><polygon fill="none" points="1220.08,395.9169,1204.93,407.3396,1214.8136,414.145,1220.08,395.9169" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link WeatherFeatchingException to WeatherFeatchingExceptionCityCoords--><g id="link_WeatherFeatchingException_WeatherFeatchingExceptionCityCoords"><path d="M1262.1282,410.7423 C1292.2182,454.4423 1346.92,533.8769 1377.04,577.6169 " fill="none" id="WeatherFeatchingException-backto-WeatherFeatchingExceptionCityCoords" style="stroke:#181818;stroke-width:1;"/><polygon fill="none" points="1251.92,395.9169,1257.1864,414.145,1267.07,407.3396,1251.92,395.9169" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link Exception to WeatherFeatchingException--><g id="link_Exception_WeatherFeatchingException"><path codeLine="126" d="M1236,110.4569 C1236,166.5769 1236,291.3569 1236,347.5569 " fill="none" id="Exception-backto-WeatherFeatchingException" style="stroke:#181818;stroke-width:1;"/><polygon fill="none" points="1236,92.4569,1230,110.4569,1242,110.4569,1236,92.4569" style="stroke:#181818;stroke-width:1;"/></g><!--link WeatherCachedAPI to WeatherDataCache--><g id="link_WeatherCachedAPI_WeatherDataCache"><path codeLine="127" d="M4358.62,601.7969 C4370.23,601.7969 4369.84,601.7969 4381.44,601.7969 " fill="none" id="WeatherCachedAPI-to-WeatherDataCache" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="4393.44,601.7969,4387.44,597.7969,4381.44,601.7969,4387.44,605.7969,4393.44,601.7969" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8.271" x="4366.7284" y="598.6006">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8.271" x="4377.2333" y="598.6419">1</text></g><!--SRC=[hLTBS-Cs33v7luAJazsrFDtjDPCPrzjq7tcqwsHpfYdOPfSMEIILh9kwlxsWH4dKAtQwESIXGG04Fe0VQCkj078Fr6v0avbIKPHA2-JqTx0Mj9aGKom8JHF2P6gipfYLJg21e2v9k562xY0v9TIGwoXIb7sZQo30zNAgrkz-_cNww0zuYY92ols4MeeIGceHLTnB2FcOuhahoghmtgF-x8-FbG8XRyXCQxgxvCQU1KhdP0ts5hOADBMPXX5FCKowcv25rJnT4yRjRlp_lRZ5HcRwn_oPqg4PzEF5Q8TvNzCjZChTVUGNJ51ZGeJcb6qWm2WcIlC7YZNzGCtcYggpmkkaRJFDFxzIaS4vOMxTuqD85wRRlBsz329TIYc0fcH3pIX8niLSu8LvZdlqKu34t2bi1JZAxa7onBNaeF8an88yk6mcs4h6KjotV0kusghGvQV5pNLUC6AbMvUkiHUTvyxfAostkLvjw3gvKncwnBj2cMsMA0SvSMtCjqh05b9hXXky1hvJuMQ5UjBe12uaJNBRWSYxYXUOwWKNLMaKnj2j1ds0NFjMFgTxt1qxWEayX_96GNe55YI1xnRIf0VS448Vq4fgODJONwc1Eosw2jWzOlTd1dfNxVsRmte1bZds2jQ1nbn8zWsBZ9-1JwTxi_mBiFuhP-8Z3Exy75ktTUDZCfTfmYsNANd2HhMSxHr2bTGLP2wJWelkhsxSEZGV1ZdudbVLWp4AuaHAKaZmuLtguQMz_z-fY3y16UP5PQdoF5WVTF0PTWUGFronm7585Q-9qNCDq2bxBw1Uss7s4Z1R41qFyejWEzpR0vW404-FwFJ2IqaeoAO3lXeUNhdHFVNCssEsGZ-kBt8bAUUD6skLS8MqYYC8oOv4tUlEgbNBu96doKBXcEpRUCynEsSrIzVuZgiqxiEzfcQpswetXfKUxJ69okpTN-F1LhpqVEfDI8ejR2lE-YPRmtAGgR1zpztSDSqWOvB8R8dvvGqYicswu7_NRw6uc4C-kWz0aqOlUbk33pO6jNcrWLgrjDzd4A9fFGycGvpx6DXK_OLjeMrF33yIt08KnUafzILFuNNpdWdHI7qSNedk-xnLv3SDNy-pWzUbYMEsKUizz3WEMZ8wgNvVV6UWN4iRFFBavBVoQndF1VvZ6poftddQ7wSumzyXBTxjAXthpF73N4gDlexokG_lN6QvC8qRbqkctk5JYnG4jMs9l_8D8YjyX9HV5osdzD7TbqkIQL7tHVaGhKU9q_EaqT0kY3CuBIV8EjBMqxsIDn9Z5MZHSHEg4wXtb7E6MxbfaF-6QfrVjw32Uu7qrM74eFiGnRhYrIgGdVqJnyFbZJhFU7BwzfJy50jOsJXVjyVyVm00]--></g></svg>