Commit 8b4c3d1f by Patryk Czarnik

Refaktoryzacja PobieranieXML i zmiana nazw metod

parent 3fdf0a54
...@@ -2,6 +2,8 @@ package com.example.demo.waluty; ...@@ -2,6 +2,8 @@ package com.example.demo.waluty;
public interface PobieranieWalut { public interface PobieranieWalut {
TabelaWalut pobierzTabele(String data); TabelaWalut pobierzBiezaceKursy();
TabelaWalut pobierzArchiwalneKursy(String data);
} }
\ No newline at end of file
...@@ -27,23 +27,41 @@ import org.xml.sax.SAXException; ...@@ -27,23 +27,41 @@ import org.xml.sax.SAXException;
*/ */
@Service @Service
public class PobieranieXML implements PobieranieWalut { public class PobieranieXML implements PobieranieWalut {
private static final String ADRES = "http://api.nbp.pl/api/exchangerates/tables";
@Override /** Pobiera tabelę z bieżącymi kursami walut.
public TabelaWalut pobierzTabele(String data) { * Zwraca null w przypadku błędów.
String adres = "https://api.nbp.pl/api/exchangerates/tables/a"; */
if(data != null) { public TabelaWalut pobierzBiezaceKursy() {
adres += "/" + data; Document doc = wczytajXmlZAdresu(ADRES + "/a?format=xml");
return tabelaZXml(doc);
}
public TabelaWalut pobierzArchiwalneKursy(String data) {
Document doc = wczytajXmlZAdresu(ADRES + "/A/" + data + "?format=xml");
return tabelaZXml(doc);
} }
adres += "?format=xml";
private Document wczytajXmlZAdresu(String adres) {
// Document Object Model
try { try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder(); DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = null;
URL url = new URL(adres); URL url = new URL(adres);
try (InputStream in = url.openStream()) { try (InputStream in = url.openStream()) {
doc = db.parse(in); return db.parse(in);
}
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
return null;
}
} }
private TabelaWalut tabelaZXml(Document doc) {
if (doc == null)
return null;
try {
XPathFactory xpf = XPathFactory.newInstance(); XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath(); XPath xpath = xpf.newXPath();
...@@ -52,9 +70,9 @@ public class PobieranieXML implements PobieranieWalut { ...@@ -52,9 +70,9 @@ public class PobieranieXML implements PobieranieWalut {
String nazwaTabeli = xpath.evaluate("//Table", doc); String nazwaTabeli = xpath.evaluate("//Table", doc);
String numerTabeli = xpath.evaluate("//No", doc); String numerTabeli = xpath.evaluate("//No", doc);
LocalDate dataTabeli = LocalDate.parse(xpath.evaluate("//EffectiveDate", doc)); LocalDate data = LocalDate.parse(xpath.evaluate("//EffectiveDate", doc));
TabelaWalut tabela = new TabelaWalut(nazwaTabeli, numerTabeli, dataTabeli); TabelaWalut tabela = new TabelaWalut(nazwaTabeli, numerTabeli, data);
NodeList rates = (NodeList) xpath.evaluate("//Rate", doc, XPathConstants.NODESET); NodeList rates = (NodeList) xpath.evaluate("//Rate", doc, XPathConstants.NODESET);
final int n = rates.getLength(); final int n = rates.getLength();
...@@ -68,7 +86,7 @@ public class PobieranieXML implements PobieranieWalut { ...@@ -68,7 +86,7 @@ public class PobieranieXML implements PobieranieWalut {
} }
return tabela; return tabela;
} catch (ParserConfigurationException | SAXException | XPathExpressionException | IOException e) { } catch (XPathExpressionException e) {
e.printStackTrace(); e.printStackTrace();
return null; return null;
} }
......
...@@ -28,7 +28,12 @@ public class WalutyController { ...@@ -28,7 +28,12 @@ public class WalutyController {
@GetMapping("/waluty") @GetMapping("/waluty")
public String wyswietlWaluty(String data, Model model) { public String wyswietlWaluty(String data, Model model) {
TabelaWalut tabela = pobieracz.pobierzTabele(data); TabelaWalut tabela;
if(data == null) {
tabela = pobieracz.pobierzBiezaceKursy();
} else {
tabela = pobieracz.pobierzArchiwalneKursy(data);
}
model.addAttribute("tabela", tabela); model.addAttribute("tabela", tabela);
return "waluty.html"; return "waluty.html";
} }
......
...@@ -14,13 +14,13 @@ public class WalutyRest { ...@@ -14,13 +14,13 @@ public class WalutyRest {
@GetMapping @GetMapping
public TabelaWalut wyswietlWaluty() { public TabelaWalut wyswietlWaluty() {
TabelaWalut tabela = pobieracz.pobierzTabele(null); TabelaWalut tabela = pobieracz.pobierzBiezaceKursy();
return tabela; return tabela;
} }
@GetMapping("/{data}") @GetMapping("/{data}")
public TabelaWalut wyswietlWaluty(@PathVariable String data) { public TabelaWalut wyswietlWaluty(@PathVariable String data) {
TabelaWalut tabela = pobieracz.pobierzTabele(data); TabelaWalut tabela = pobieracz.pobierzArchiwalneKursy(data);
return tabela; return tabela;
} }
......
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