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"); } }