⌛⌛ Maiden tilastoja (XML)

Palautus koostuu Maven-projektista. Aseta vastauksesi tiedostoihin pom.xml, src/main/java/fi/tuni/prog3/round7/xmlcountries/Country.java ja src/main/java/fi/tuni/prog3/round7/xmlcountries/CountryData.java hakemistoon Round7/xmlcountries. Muista hakea materiaalit ``student_template_project``sta.

Kuten edellisestä mahdollisesti jo osasit päätellä, tehtävään palautetaan siis Maven-projektitiedosto sekä sen alihakemisto src, jonka alta löytyy pakkaukseen fi.tuni.prog3.round7.xmlcountries määritetyt kooditiedostot.

Tässä tehtävässä kokeillaan XML-datan lukemista sekä kirjoittamista käyttäen valmista siihen sopivaa jdom2-kirjastoa: https://github.com/hunterhacker/jdom/wiki/JDOM2-A-Primer. Kurssimateriaalin esimerkissä oli esitetty jdom2:n projektiin tuova Mavenin projektitiedoston riippuvuusmääritys.

Tehtävän pohja-aineistona toimii maailmanpankin julkaisemasta avoimesta datasta poimittu otos, joka sisältää tietoa maiden pinta-alasta, väkiluvusta ja bruttokansantuotteesta (GDP, gross domestic product). Sinun tulee toteuttaa näiden tietojen prosessointiin sopivat luokat Country ja CountryData, joilla on ainakin alla kuvatut ominaisuudet. Voit päättää muut yksityiskohdat itse.

  • Luokka Country tallettaa maan nimen (merkkijono), pinta-alan (double), väkiluvun (long) ja bruttokansantuotteen (double).

    • Määritetty pakkaukseen fi.tuni.prog3.round7.xmlcountries (eli aseta heti tiedoston alkuun rivi package fi.tuni.prog3.round7.xmlcountries;).

    • Toteuttaa rajapinnan Comparable<Country> niin, että vertailu perustuu maan nimeen String-luokan luonnollisen järjestyksen mukaisesti.

    • Julkinen jäsenfunktio String toString(), joka palauttaa maan tiedot esimerkkitulosteissa kuvatulla tavalla: ensin maan nimi, ja sen alla kahdella välilyönnillä sisennettyinä omilla riveillään pinta-ala, väkuluku ja bruttokansantuote. Double-arvot yhden desimaalin tarkkuudella.

    • Julkiset jäsenfunktiot String getName(), double getArea(), long getPopulation() ja double getGdp(), jotka palauttavat nimiensä kuvaamat tiedot.

  • Luokka CountryData tarjoaa kaksi julkista staattista jäsenfunktiota maita koskevan datan lukemiseen ja kirjoittamiseen XML-muodossa.

    • Määritetty pakkaukseen fi.tuni.prog3.round7.xmlcountries.

    • List<Country> readFromXmls(String areaFile, String populationFile, String gdpFile) lukee maiden tietoja parametrien nimeämistä XML-tiedostoista.

      • Tiedostot sisältävät parametrien nimien mukaisesti tietoa maiden pinta-aloista, väkiluvuista ja bruttokansantuotteista. Tiedot ovat siis kolmessa erillisessä tiedostossa.

      • Päättele tiedostojen rakenne tutkimalla annettuja esimerkkisyötetiedostoja. Kunkin tiedoston rakenne on keskenään samankaltainen: yhtä maata koskevat tiedot ovat record-elementin sisällä olevissa field-elementeissä. Kullakin field-elementillä on attribuutti “name”, jonka arvosta voit päätellä, minkä tiedon kyseinen elementti sisältää.

      • Funktio palauttaa jonkinlaisen rajapinnan List<Country> toteuttavan listan, joka sisältää luettua dataa kuvaavat Country-oliot. Sinun tulee näin ollen yhdistää kolmesta eri XML-tiedostosta luetut tiedot Country-olioihin.

    • void writeToXml(List<Country> countries, String countryFile) kirjoittaa listan countries sisältämien Country-olioiden kuvaamat tiedot XML-muodossa parametrin countryFile nimeämään tiedostoon.

      • Juurielementti countries, jonka sisällä on maiden tietoja kuvaavia country-elementtejä. Tiedot on country-elementin sisällä olevissa name-, area-, population- ja gdp-elementeissä.

      • Katso tarkka muoto esimerkkitulosteista. Tulostuksen muoto vastaa jdom2-kirjaston muotoilua Format.getPrettyFormat().

Automaattiset (sekä alla kuvatut) testit olettavat, että teet projektiedostoosi pom.xml seuraavat määritykset:

  • artifactId-elementin arvo on xmlcountries.

  • version-elementin arvo on 1.0.

  • onejar-liitännäisen määritys, jonka mainClass-elementin arvo on CountryTest.

    • CountryTest on alla kuvattu valmiiksi annettu testiluokka.

Toteutuksen testaus

Tehtävään on tarjolla kolme testiaineistoa. Alla käytetään merkkiä X viittaamaan testin numeroon, joka on 1, 2 tai 3.

Voit testata luokkiasi tiedostossa CountryTest.java annetun valmiin testiohjelman sekä tapaan areaX.xml, populationX.xml ja gdpX.xml nimettyjen testiaineistojen, tapaan outputX.txt nimettyjen esimerkkitulosteiden sekä tapaan resultX.xml nimettyjen esimerkkitulostiedostojen avulla.

Aseta CountryTest.java Maven-projektisi alihakemiston src/main/java juureen ja muut tiedostot Maven-projektisi juurihakemistoon (missä pom.xml on). Edellä on huomattava, että CountryTest.java ei sisällä pakkausmääritystä, joten sitä ei siksi aseteta syvempään alihakemistoon.

Voit tämän jälkeen kääntää ohjelman tapaan mvn package ja suorittaa testin X tapaan java -jar target/xmlcountries-1.0.one-jar.jar areaX.xml populationX.xml gdpX.xml countriesX.xml. Numeroa X käyttävän suorituksen pitäisi tuottaa vastaavassa tiedostossa outputX.txt kuvattu tuloste sekä luoda tiedosto countriesX.xml, jonka sisältö on identtinen tiedoston resultX.xml kanssa.

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.