Commit e29ae9eb by Patryk Czarnik

Kursy walut - 1. wersja działająca napisana bardzo brzydko

parent 82a51b9f
package com.example.demo.waluty; package com.example.demo.waluty;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.net.URL;
import java.time.LocalDate;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
@Controller @Controller
public class WalutyController { public class WalutyController {
@GetMapping("/waluty") @GetMapping("/waluty")
public String wyswietlWaluty(String data, Model model) { public String wyswietlWaluty(String data, Model model) {
TabelaWalut tabela = pobierzTabele(data); TabelaWalut tabela = null;
String adres = "https://api.nbp.pl/api/exchangerates/tables/a";
if(data != null) {
adres += "/" + data;
}
adres += "?format=xml";
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = null;
URL url = new URL(adres);
try (InputStream in = url.openStream()) {
doc = db.parse(in);
}
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
// String numer = xpath.evaluate(
// "/ArrayOfExchangeRatesTable/ExchangeRatesTable/No", doc);
String nazwaTabeli = xpath.evaluate("//Table", doc);
String numerTabeli = xpath.evaluate("//No", doc);
LocalDate dataTabeli = LocalDate.parse(xpath.evaluate("//EffectiveDate", doc));
tabela = new TabelaWalut(nazwaTabeli, numerTabeli, dataTabeli);
NodeList rates = (NodeList) xpath.evaluate("//Rate", doc, XPathConstants.NODESET);
final int n = rates.getLength();
for (int i = 0; i < n; i++) {
Node rate = rates.item(i);
String kod = xpath.evaluate("Code", rate);
String nazwa = xpath.evaluate("Currency", rate);
BigDecimal kurs = new BigDecimal(xpath.evaluate("Mid", rate));
Waluta waluta = new Waluta(kod, nazwa, kurs);
tabela.dodajWalute(waluta);
}
} catch (ParserConfigurationException | SAXException | XPathExpressionException | IOException e) {
e.printStackTrace();
}
model.addAttribute("tabela", tabela); model.addAttribute("tabela", tabela);
return "waluty.html"; return "waluty.html";
} }
private TabelaWalut pobierzTabele(String data) {
// TODO Auto-generated method stub
return null;
}
} }
...@@ -15,6 +15,14 @@ ...@@ -15,6 +15,14 @@
<button>Pobierz</button> <button>Pobierz</button>
</form> </form>
<table th:if="${tabela != null}" class="tabela-walut">
<tr><th>Kod</th><th>Nazwa</th><th>Kurs</th></tr>
<tr th:each="w : ${tabela.waluty}">
<td th:text="${w.kod}">EUR</td>
<td th:text="${w.nazwa}">euro</td>
<td th:text="${w.kurs}">4.5432</td>
</tr>
</table>
</body> </body>
</html> </html>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment