weather-aggregator/Weather_App.svg

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:5155px;height:1023px;background:#FFFFFF;" version="1.1" viewBox="0 0 5155 1023" width="5155px" 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="2518.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 L5145.5,130.5938 A2.5,2.5 0 0 1 5148,133.0938 L5148,1014.2969 A2.5,2.5 0 0 1 5145.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 L5121.5,173.5938 A2.5,2.5 0 0 1 5124,176.0938 L5124,990.2969 A2.5,2.5 0 0 1 5121.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 L5097.5,216.5938 A2.5,2.5 0 0 1 5100,219.0938 L5100,966.2969 A2.5,2.5 0 0 1 5097.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 L5073.5,259.5938 A2.5,2.5 0 0 1 5076,262.0938 L5076,942.2969 A2.5,2.5 0 0 1 5073.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 L5049.5,302.5938 A2.5,2.5 0 0 1 5052,305.0938 L5052,918.2969 A2.5,2.5 0 0 1 5049.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="3787.5" y="315.2969"/><ellipse cx="3989.2935" cy="331.2969" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M3985.2153,327.0625 L3985.2153,324.9063 L3992.606,324.9063 L3992.606,327.0625 L3990.1372,327.0625 L3990.1372,335.1406 L3992.606,335.1406 L3992.606,337.2969 L3985.2153,337.2969 L3985.2153,335.1406 L3987.6841,335.1406 L3987.6841,327.0625 L3985.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="4009.7935" y="336.1436">WeatherDataAPI</text><line style="stroke:#181818;stroke-width:0.5;" x1="3788.5" x2="4313.9297" y1="347.2969" y2="347.2969"/><line style="stroke:#181818;stroke-width:0.5;" x1="3788.5" x2="4313.9297" y1="355.2969" y2="355.2969"/><ellipse cx="3798.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="3807.5" y="372.292">ArrayList&lt;WeatherData&gt; getTemperature(int day, String city)</text><ellipse cx="3798.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="3807.5" y="388.5889">ArrayList&lt;WeatherData&gt; getTemperature(int day, int hour, String city)</text><ellipse cx="3798.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="3807.5" y="404.8857">ArrayList&lt;WeatherData&gt; getTemperatures(int days, String city)</text><ellipse cx="3798.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="3807.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="4307.5" y="520.7969"/><ellipse cx="4507.3965" cy="536.7969" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M4510.3652,542.4375 Q4509.7871,542.7344 4509.1465,542.875 Q4508.5059,543.0313 4507.8027,543.0313 Q4505.3027,543.0313 4503.9746,541.3906 Q4502.6621,539.7344 4502.6621,536.6094 Q4502.6621,533.4844 4503.9746,531.8281 Q4505.3027,530.1719 4507.8027,530.1719 Q4508.5059,530.1719 4509.1465,530.3281 Q4509.8027,530.4844 4510.3652,530.7813 L4510.3652,533.5 Q4509.7402,532.9219 4509.1465,532.6563 Q4508.5527,532.375 4507.9277,532.375 Q4506.584,532.375 4505.8965,533.4531 Q4505.209,534.5156 4505.209,536.6094 Q4505.209,538.7031 4505.8965,539.7813 Q4506.584,540.8438 4507.9277,540.8438 Q4508.5527,540.8438 4509.1465,540.5781 Q4509.7402,540.2969 4510.3652,539.7188 L4510.3652,542.4375 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="136.7324" x="4527.8965" y="541.6436">WeatherDataCache</text><line style="stroke:#181818;stroke-width:0.5;" x1="4308.5" x2="4851.5254" y1="552.7969" y2="552.7969"/><ellipse cx="4318.5" cy="566.4453" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="511.0479" x="4327.5" y="569.792">private HashMap&lt;String,WeatherDataCache.CacheValue&gt; {final} cache</text><ellipse cx="4318.5" cy="582.7422" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="207.4023" x="4327.5" y="586.0889">private long {final} cacheTTL</text><line style="stroke:#181818;stroke-width:0.5;" x1="4308.5" x2="4851.5254" y1="593.3906" y2="593.3906"/><ellipse cx="4318.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="4327.5" y="610.3857">boolean has(String cityName, int day)</text><ellipse cx="4318.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="4327.5" y="626.6826">boolean needsUpdate(String cityName, int day)</text><ellipse cx="4318.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="4327.5" y="642.9795">void set(String cityName, int day, WeatherData value, Instant timestamp)</text><ellipse cx="4318.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="4327.5" y="659.2764">JSONArray toJSON(String apiName)</text><ellipse cx="4318.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="4327.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="3829.5" y="528.7969"/><ellipse cx="3979.7095" cy="544.7969" fill="#A9DCDF" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M3979.8188,540.1406 L3978.6626,545.2188 L3980.9907,545.2188 L3979.8188,540.1406 Z M3978.3345,537.9063 L3981.3188,537.9063 L3984.6782,550.2969 L3982.2251,550.2969 L3981.4595,547.2344 L3978.1782,547.2344 L3977.4282,550.2969 L3974.9907,550.2969 L3978.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="4000.2095" y="549.6436">WeatherCachedAPI</text><line style="stroke:#181818;stroke-width:0.5;" x1="3830.5" x2="4271.7588" y1="560.7969" y2="560.7969"/><polygon fill="none" points="3840.5,570.4453,3836.5,576.4453,3844.5,576.4453" style="stroke:#1963A0;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="235.0674" x="3849.5" y="577.792">WeatherDataCache {final} cache</text><line style="stroke:#181818;stroke-width:0.5;" x1="3830.5" x2="4271.7588" y1="585.0938" y2="585.0938"/><ellipse cx="3840.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="3849.5" y="602.0889">JSONArray toJSON()</text><ellipse cx="3840.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="3849.5" y="618.3857">void loadCache(JSONArray data)</text><ellipse cx="3840.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="3849.5" y="634.6826">void loadCacheFromFile(String path)</text><ellipse cx="3840.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="3849.5" y="650.9795">void saveCacheToFile(String path)</text><ellipse cx="3840.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="3849.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="633.1064" x="3066.5" y="742.7969"/><ellipse cx="3338.4268" cy="758.7969" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M3341.3955,764.4375 Q3340.8174,764.7344 3340.1768,764.875 Q3339.5361,765.0313 3338.833,765.0313 Q3336.333,765.0313 3335.0049,763.3906 Q3333.6924,761.7344 3333.6924,758.6094 Q3333.6924,755.4844 3335.0049,753.8281 Q3336.333,752.1719 3338.833,752.1719 Q3339.5361,752.1719 3340.1768,752.3281 Q3340.833,752.4844 3341.3955,752.7813 L3341.3955,755.5 Q3340.7705,754.9219 3340.1768,754.6563 Q3339.583,754.375 3338.958,754.375 Q3337.6143,754.375 3336.9268,755.4531 Q3336.2393,756.5156 3336.2393,758.6094 Q3336.2393,760.7031 3336.9268,761.7813 Q3337.6143,762.8438 3338.958,762.8438 Q3339.583,762.8438 3340.1768,762.5781 Q3340.7705,762.2969 3341.3955,761.7188 L3341.3955,764.4375 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="80.7529" x="3358.9268" y="763.6436">OpenMeteo</text><line style="stroke:#181818;stroke-width:0.5;" x1="3067.5" x2="3698.6064" 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="209.5625" x="3086.5" y="791.792">String {final} 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="179.1289" x="3086.5" y="808.0889">String {final} 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="3698.6064" 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="607.1064" x="3086.5" y="897.5732">WeatherData 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="3734.5" y="750.7969"/><ellipse cx="3983.4512" cy="766.7969" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M3986.4199,772.4375 Q3985.8418,772.7344 3985.2012,772.875 Q3984.5605,773.0313 3983.8574,773.0313 Q3981.3574,773.0313 3980.0293,771.3906 Q3978.7168,769.7344 3978.7168,766.6094 Q3978.7168,763.4844 3980.0293,761.8281 Q3981.3574,760.1719 3983.8574,760.1719 Q3984.5605,760.1719 3985.2012,760.3281 Q3985.8574,760.4844 3986.4199,760.7813 L3986.4199,763.5 Q3985.7949,762.9219 3985.2012,762.6563 Q3984.6074,762.375 3983.9824,762.375 Q3982.6387,762.375 3981.9512,763.4531 Q3981.2637,764.5156 3981.2637,766.6094 Q3981.2637,768.7031 3981.9512,769.7813 Q3982.6387,770.8438 3983.9824,770.8438 Q3984.6074,770.8438 3985.2012,770.5781 Q3985.7949,770.2969 3986.4199,769.7188 L3986.4199,772.4375 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="126.7041" x="4003.9512" y="771.6436">OpenWeatherMap</text><line style="stroke:#181818;stroke-width:0.5;" x1="3735.5" x2="4366.6064" y1="782.7969" y2="782.7969"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3742.5" y="793.4453"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="157.1377" x="3754.5" y="799.792">String forecastBaseUrl</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3742.5" y="809.7422"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="94.459" x="3754.5" y="816.0889">String APIKey</text><polygon fill="none" points="3745.5,825.0391,3741.5,831.0391,3749.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="3754.5" y="832.3857">Clock clock</text><polygon fill="none" points="3745.5,841.3359,3741.5,847.3359,3749.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="3754.5" y="848.6826">JSONFetcher JSONFetcher</text><line style="stroke:#181818;stroke-width:0.5;" x1="3735.5" x2="4366.6064" y1="855.9844" y2="855.9844"/><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3742.5" y="866.6328"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="607.1064" x="3754.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="3742.5" y="882.9297"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="248.0967" x="3754.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="4402.5" y="750.7969"/><ellipse cx="4673.8457" cy="766.7969" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M4676.8145,772.4375 Q4676.2363,772.7344 4675.5957,772.875 Q4674.9551,773.0313 4674.252,773.0313 Q4671.752,773.0313 4670.4238,771.3906 Q4669.1113,769.7344 4669.1113,766.6094 Q4669.1113,763.4844 4670.4238,761.8281 Q4671.752,760.1719 4674.252,760.1719 Q4674.9551,760.1719 4675.5957,760.3281 Q4676.252,760.4844 4676.8145,760.7813 L4676.8145,763.5 Q4676.1895,762.9219 4675.5957,762.6563 Q4675.002,762.375 4674.377,762.375 Q4673.0332,762.375 4672.3457,763.4531 Q4671.6582,764.5156 4671.6582,766.6094 Q4671.6582,768.7031 4672.3457,769.7813 Q4673.0332,770.8438 4674.377,770.8438 Q4675.002,770.8438 4675.5957,770.5781 Q4676.1895,770.2969 4676.8145,769.7188 L4676.8145,772.4375 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="81.915" x="4694.3457" y="771.6436">WeatherAPI</text><line style="stroke:#181818;stroke-width:0.5;" x1="4403.5" x2="5034.6064" y1="782.7969" y2="782.7969"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="4410.5" y="793.4453"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="94.459" x="4422.5" y="799.792">String APIKey</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="4410.5" y="809.7422"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="157.1377" x="4422.5" y="816.0889">String forecastBaseUrl</text><polygon fill="none" points="4413.5,825.0391,4409.5,831.0391,4417.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="4422.5" y="832.3857">JSONFetcher JSONFetcher</text><line style="stroke:#181818;stroke-width:0.5;" x1="4403.5" x2="5034.6064" y1="839.6875" y2="839.6875"/><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="4410.5" y="850.3359"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="327.0859" x="4422.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="4410.5" y="866.6328"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="412.1865" x="4422.5" y="872.9795">WeatherData.Condition getConditionFromString(String str)</text><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="4410.5" y="882.9297"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="607.1064" x="4422.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="M4051,446.5769 C4051,476.7669 4051,496.3969 4051,528.7869 " fill="none" id="WeatherDataAPI-backto-WeatherCachedAPI" style="stroke:#181818;stroke-width:1;stroke-dasharray:7.0,7.0;"/><polygon fill="none" points="4051,428.5769,4045,446.5769,4057,446.5769,4051,428.5769" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link WeatherCachedAPI to OpenMeteo--><g id="link_WeatherCachedAPI_OpenMeteo"><path d="M3815.1733,680.4675 C3749.2533,702.1775 3693.6,720.5069 3626.19,742.7069 " fill="none" id="WeatherCachedAPI-backto-OpenMeteo" style="stroke:#181818;stroke-width:1;"/><polygon fill="none" points="3832.27,674.8369,3813.2965,674.7686,3817.0502,686.1664,3832.27,674.8369" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link WeatherCachedAPI to OpenWeatherMap--><g id="link_WeatherCachedAPI_OpenWeatherMap"><path d="M4051,692.8369 C4051,717.1469 4051,726.2769 4051,750.5969 " fill="none" id="WeatherCachedAPI-backto-OpenWeatherMap" style="stroke:#181818;stroke-width:1;"/><polygon fill="none" points="4051,674.8369,4045,692.8369,4057,692.8369,4051,674.8369" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link WeatherCachedAPI to WeatherAPI--><g id="link_WeatherCachedAPI_WeatherAPI"><path d="M4241.2965,681.2921 C4263.2265,689.7021 4268.65,691.4469 4290,698.7969 C4342.69,716.9369 4399.61,734.6669 4454.23,750.7869 " fill="none" id="WeatherCachedAPI-backto-WeatherAPI" style="stroke:#181818;stroke-width:1;"/><polygon fill="none" points="4224.49,674.8469,4239.1481,686.8942,4243.4449,675.6899,4224.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="M4272.62,601.7969 C4284.23,601.7969 4283.84,601.7969 4295.44,601.7969 " fill="none" id="WeatherCachedAPI-to-WeatherDataCache" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="4307.44,601.7969,4301.44,597.7969,4295.44,601.7969,4301.44,605.7969,4307.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="4280.7284" y="598.6006">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8.271" x="4291.2333" y="598.6419">1</text></g><!--SRC=[lLTBSzis43wRlmBZazI8cZwk7i-eIjsazQEDxFeCWIi93KHW0D2Eegg_FGiI9C6N9JUP7Yn3Yzt5xhUBRo7BhG3o2DHkG9EPKb6KIWla_5Um5hIP45Ci24qJmcHghCwObKwWWQ0kIRXHWkuWEIVKaDieKfHzf6iWmFLogjO_Vl_JzDaVi8yYGihzX5gA4a9g4LNSImXvd-AvAyggyDwY_koFzvK28M_8J6kwk-R6NWHAbsGDzXws2ZIrcOOHJp5CkfkGXTKyNHF6xMxytxsunKPc-klycTAX6VJZnMY7UT_IBOpAtKFa5qnGOqA4vfHje86Hqlo9OatVKREveUgYy3ffsqpppx-eoE2Ix5SyfU90c9Fr-18IuzeRIordXwRs_VrrOB2KKW1DoOQQKP2bIwO04W4Oz-Yd08bvKDWZS9BTa-I9wzL1vKa84dboQKwmnp05tBTy2xZQgj3bRukxsxoIn4gtBbrZaphFdTDNMcvplThGjNYdP7I9buWoswnTZdxY-fjlbO0jfDOCT_w_FIKVA5adZKxWGj8azp4GULVn2bEzug8gZS9OkjMWJv1htykNT4-xV4SmdUTGtYb8Ry229F39GfhqW5j369VNgmHk9JKmQkpFrC235iEAs4rYzsS6UXVKmmLu1POvcWlMWSPSIFOHYuwVWM-dUxVy6x0VLix4HnoGmnnRkKKDCPdBDE6MoxI-XOXO9NK5cika8At7cpkt3it3ku1smTUyj1w9KH0S4fP2-WylL0zh7Vp_Jbdy2SW_hwjDcTpHug23ts5t1ExZPVeVC7gfwfrQzmBgjHrchm6p1T7f8ByAjkCDFO190F3qXFOkl9IiWfGwrD-XXs_Sw9v_vkqXNA4VrxUtafH3nyssIhX2RiKvX8n7ekuTPzMgPV3CqsIXS5RsRRpbc9spcgLhVELL6e_XNbEpsMtL2yHAZ_QOH6Nsxg_nd2lUWJxr9YJ55hOLPttZhM7f8koT2TY-bsxuccQGCKbajiJyyWOHsJPTyC_rIoakXf6FxXtGfD6BtjRWSuv1RLvje5OjxVSPX6XQRuJ9q7Hx3cog_iAsqBOdXgy9RW6AuWYL-fgdy6tpdWdHI7qSNedkwxrLv3SDNo-pWzUbYMEsKUjHz3mEMZ8wgtvzV6AWN4iRFFBix9VoQndF5VvZ6poftjaVJbESuQ-K5kzsbKvrvlXXBgL6NoVvF8HtBhDScCQDooLJxt3V8WL1RLlYhto3o0eV8UNNHSifVVJmuPfaMjHzKVukg4U9q_EaqT0kY3CuBIV8EjBM-xsIDn9Z5MZHQHEg4wXtb7E6MxbfaF_2QfrVjw32Uu7qrM74eFiGnRhYrIgGNVmJnyFbZJflUdB-mpdvBXQmid6-Re_vBm00]--></g></svg>