import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.*;
/*************************************************************************
* Tento kód třídy vezměte, doplňte těla metod adjustSalary
,
* changeName
a getWageCosts
.
* S ostatními nedělejte nic.
* Po doplnění by měla fungovat metoda main
tak, jak je.
* Pro překlad a spuštění můžete využít skript build.xml.
*
* Kompletní balíček dom4j
stáhnete z http://dom4j.org
,
* zde z důvodu úspory místa najdete jen dom4j.jar
, který ale pro překlad
* i běh stačí.
*/
public class Uloha2 {
/** dom4j object model representation of a xml document. Note: We use the interface(!) not its implementation */
private Document doc;
/**
* Loads a document from a file.
*
* @throw a org.dom4j.DocumentException occurs whenever the buildprocess fails.
*/
public void parseWithSAX(File aFile) throws DocumentException, java.net.MalformedURLException {
SAXReader xmlReader = new SAXReader();
this.doc = xmlReader.read(aFile);
}
public void serializetoXML(OutputStream out, String aEncodingScheme) throws Exception {
OutputFormat outformat = OutputFormat.createPrettyPrint();
outformat.setEncoding(aEncodingScheme);
XMLWriter writer = new XMLWriter(out, outformat);
writer.write(this.doc);
writer.flush();
}
/*************************************************************************
* Metoda na úpravu platů:
* Má-li osoba menší plat než minimum
,
* bude jí plat zvýšen na minimum
.
* S ostatními osobami se nic neděje.
*/
public void adjustSalary(float minimum) {
// sem doplnit kód
}
/*************************************************************************
* Metoda na změnu jména:
* která osoba má id
rovno zadanému,
* změní se jí křestní jméno (name
) na newName
* S ostatními se opět neděje nic.
*/
public void changeName(String id, String newName) {
// sem doplnit kód
}
/*************************************************************************
* Metoda na spočítání mzdových nákladů:
* Metoda projde všechny osoby ve vstupním souboru a sečte hodnoty jejich platů.
*/
public float getWageCosts() {
// sem doplnit kód
return 0; // místo 0 vrátí součet platů
}
private static final float EXPECTED_WAGE_COSTS_BEFORE_UPDATES = 21000f;
private static final float EXPECTED_WAGE_COSTS_AFTER_UPDATES = 22000f;
public static void main(String[] args) throws Exception {
if (args.length < 1) {
System.err.println("Chybí argument se jménem souboru pro zpracování (uvádí se bez přípony '.xml')!");
}
Uloha2 uloha2 = new Uloha2();
uloha2.parseWithSAX(new File(args[0]+".xml"));
float wageCosts = uloha2.getWageCosts();
if (wageCosts != EXPECTED_WAGE_COSTS_BEFORE_UPDATES) {
System.err.println("Součet platů není správný (místo " + EXPECTED_WAGE_COSTS_BEFORE_UPDATES +
" metoda getWageCosts vrací " + wageCosts + ")");
}
uloha2.changeName("1", "Pavlík");
uloha2.changeName("2", "Liborek");
uloha2.adjustSalary(10000f);
wageCosts = uloha2.getWageCosts();
if (wageCosts != EXPECTED_WAGE_COSTS_AFTER_UPDATES) {
System.err.println("Součet platů po jejich úpravě pomocí metody adjustSalary není správný (místo " +
EXPECTED_WAGE_COSTS_AFTER_UPDATES + " metoda getWageCosts vrací " + wageCosts + ")");
}
uloha2.serializetoXML(new FileOutputStream(args[0]+"-out.xml"), "windows-1250");
}
}