Commit 8b4c3d1f by Patryk Czarnik

Refaktoryzacja PobieranieXML i zmiana nazw metod

parent 3fdf0a54
......@@ -2,6 +2,8 @@ package com.example.demo.waluty;
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;
*/
@Service
public class PobieranieXML implements PobieranieWalut {
private static final String ADRES = "http://api.nbp.pl/api/exchangerates/tables";
/** Pobiera tabelę z bieżącymi kursami walut.
* Zwraca null w przypadku błędów.
*/
public TabelaWalut pobierzBiezaceKursy() {
Document doc = wczytajXmlZAdresu(ADRES + "/a?format=xml");
return tabelaZXml(doc);
}
@Override
public TabelaWalut pobierzTabele(String data) {
String adres = "https://api.nbp.pl/api/exchangerates/tables/a";
if(data != null) {
adres += "/" + data;
}
adres += "?format=xml";
public TabelaWalut pobierzArchiwalneKursy(String data) {
Document doc = wczytajXmlZAdresu(ADRES + "/A/" + data + "?format=xml");
return tabelaZXml(doc);
}
private Document wczytajXmlZAdresu(String adres) {
// Document Object Model
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);
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();
XPath xpath = xpf.newXPath();
......@@ -52,9 +70,9 @@ public class PobieranieXML implements PobieranieWalut {
String nazwaTabeli = xpath.evaluate("//Table", 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);
final int n = rates.getLength();
......@@ -68,7 +86,7 @@ public class PobieranieXML implements PobieranieWalut {
}
return tabela;
} catch (ParserConfigurationException | SAXException | XPathExpressionException | IOException e) {
} catch (XPathExpressionException e) {
e.printStackTrace();
return null;
}
......
......@@ -28,7 +28,12 @@ public class WalutyController {
@GetMapping("/waluty")
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);
return "waluty.html";
}
......
......@@ -14,13 +14,13 @@ public class WalutyRest {
@GetMapping
public TabelaWalut wyswietlWaluty() {
TabelaWalut tabela = pobieracz.pobierzTabele(null);
TabelaWalut tabela = pobieracz.pobierzBiezaceKursy();
return tabela;
}
@GetMapping("/{data}")
public TabelaWalut wyswietlWaluty(@PathVariable String data) {
TabelaWalut tabela = pobieracz.pobierzTabele(data);
TabelaWalut tabela = pobieracz.pobierzArchiwalneKursy(data);
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