- COMP.CS.140
- 8. Pakkaukset
- 8.5 ⌛⌛ Maiden tilastoja (XML)
⌛⌛ Maiden tilastoja (XML)¶
Palautus koostuu Maven-projektista. Aseta vastauksesi tiedostoihin pom.xml, src/main/java/fi/tuni/prog3/round8/xmlcountries/Country.java ja src/main/java/fi/tuni/prog3/round8/xmlcountries/CountryData.java hakemistoon Round8/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.round8.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.round8.xmlcountries
(eli aseta heti tiedoston alkuun rivipackage fi.tuni.prog3.round8.xmlcountries;
).Toteuttaa rajapinnan
Comparable<Country>
niin, että vertailu perustuu maan nimeenString
-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()
jadouble 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.round8.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ä olevissafield
-elementeissä. Kullakinfield
-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 kuvaavatCountry
-oliot. Sinun tulee näin ollen yhdistää kolmesta eri XML-tiedostosta luetut tiedotCountry
-olioihin.
void writeToXml(List<Country> countries, String countryFile)
kirjoittaa listancountries
sisältämienCountry
-olioiden kuvaamat tiedot XML-muodossa parametrincountryFile
nimeämään tiedostoon.Juurielementti
countries
, jonka sisällä on maiden tietoja kuvaaviacountry
-elementtejä. Tiedot oncountry
-elementin sisällä olevissaname
-,area
-,population
- jagdp
-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 onxmlcountries
.version
-elementin arvo on1.0
.onejar-liitännäisen määritys, jonka
mainClass
-elementin arvo onCountryTest
.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.