From fe78520118b264fb60315a96a8ae267d0f30a002 Mon Sep 17 00:00:00 2001
From: koz01 <koz01@PCCPIT1V203-040.msad.vsb.cz>
Date: Mon, 21 Nov 2022 11:27:12 +0100
Subject: [PATCH] Xml support

---
 pom.xml                                      | 26 +++++++++++
 src/main/java/cz/jezek/lab11/StreamMain.java | 25 ++++++++---
 src/main/java/cz/jezek/lab11/Tournament.java | 18 ++++++++
 src/main/java/module-info.java               |  4 +-
 tournament.xml                               | 45 ++++++++++++++++++++
 5 files changed, 112 insertions(+), 6 deletions(-)
 create mode 100644 tournament.xml

diff --git a/pom.xml b/pom.xml
index 2b9412c..5fca367 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,5 +33,31 @@
 			<version>5.5.2</version>
 			<scope>test</scope>
 		</dependency>
+		<dependency>
+          <groupId>javax.xml.bind</groupId>
+          <artifactId>jaxb-api</artifactId>
+          <version>2.3.0</version>
+        </dependency>
+        <dependency>
+          <groupId>com.sun.xml.bind</groupId>
+          <artifactId>jaxb-core</artifactId>
+          <version>3.0.2</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.xml.bind</groupId>
+            <artifactId>jaxb-impl</artifactId>
+            <version>3.0.2</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/javax.activation/activation -->
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>activation</artifactId>
+            <version>1.1.1</version>
+        </dependency>
+        <dependency>
+            <groupId>jakarta.xml.bind</groupId>
+            <artifactId>jakarta.xml.bind-api</artifactId>
+            <version>3.0.1</version>
+        </dependency>
 	</dependencies>
 </project>
diff --git a/src/main/java/cz/jezek/lab11/StreamMain.java b/src/main/java/cz/jezek/lab11/StreamMain.java
index 4eb29ae..03bae2f 100644
--- a/src/main/java/cz/jezek/lab11/StreamMain.java
+++ b/src/main/java/cz/jezek/lab11/StreamMain.java
@@ -1,19 +1,24 @@
 package cz.jezek.lab11;
 
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
+import java.io.OutputStream;
 import java.util.Comparator;
 import java.util.stream.Collectors;
 
+import jakarta.xml.bind.JAXBContext;
+import jakarta.xml.bind.JAXBException;
+import jakarta.xml.bind.Marshaller;
+
 public class StreamMain {
 
   public static void main(String[] args) {
-    Tournament tournament = loadTournament();
+    Tournament tournament = Tournament.generate();
 
-    printStatAboutTournament(tournament);
+    //printStatAboutTournament(tournament);
 
     saveTournament(tournament);
   }
@@ -72,9 +77,19 @@ public class StreamMain {
   }
 
   public static void saveTournament(Tournament tournament) {
-    try(ObjectOutputStream oos  = new ObjectOutputStream(new FileOutputStream("data.obj"))) {
-    	oos.writeObject(tournament);
+	  
+    try (OutputStream os = new FileOutputStream("tournament.xml")) {
+    	JAXBContext context = JAXBContext.newInstance(Tournament.class);
+    	Marshaller marshaller = context.createMarshaller();
+    	marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+    	marshaller.marshal(tournament, System.out);
+    	marshaller.marshal(tournament, os);
+    } catch (JAXBException exc) {
+    	exc.printStackTrace();
+    } catch (FileNotFoundException e) {
+		e.printStackTrace();
 	} catch (IOException e) {
+		// TODO Auto-generated catch block
 		e.printStackTrace();
 	}
   }
diff --git a/src/main/java/cz/jezek/lab11/Tournament.java b/src/main/java/cz/jezek/lab11/Tournament.java
index 7831cdc..90193bb 100644
--- a/src/main/java/cz/jezek/lab11/Tournament.java
+++ b/src/main/java/cz/jezek/lab11/Tournament.java
@@ -8,12 +8,27 @@ import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlElementWrapper;
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
 public class Tournament implements Serializable{
 
   private static final long serialVersionUID = 1L;
  
+  @XmlElement(name = "player")
+  @XmlElementWrapper(name = "players")
   private List<Player> players;
+  
+  @XmlElement(name = "match")
+  @XmlElementWrapper(name = "matches")
+  
   private List<Match> matches;
+  
+  @XmlAttribute
+  private String name = "turnaj";
 
   public static Tournament generate() {
 	// TODO 1.a Generate a list of 10 random players using the stream and then filter so that it does not contain players with the same name
@@ -33,6 +48,9 @@ public class Tournament implements Serializable{
     return new Tournament(players, matches);
   }
 
+  public Tournament() {
+  }
+  
   public Tournament(List<Player> players, List<Match> matches) {
     this.players = players;
     this.matches = matches;
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index 3575740..3a33b2a 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -1,4 +1,6 @@
 module cz.jezek.lab10 {
-    opens cz.jezek.lab11 to javafx.fxml;
+    opens cz.jezek.lab11 to javafx.fxml, jakarta.xml.bind;
     exports cz.jezek.lab11;
+    requires java.xml;
+    requires jakarta.xml.bind;
 }
\ No newline at end of file
diff --git a/tournament.xml b/tournament.xml
new file mode 100644
index 0000000..e464fcf
--- /dev/null
+++ b/tournament.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<tournament name="turnaj">
+    <players>
+        <player>
+            <firstName>Ilse</firstName>
+            <lastName>Ĺ ĹĄastnĂ˝</lastName>
+        </player>
+        <player>
+            <firstName>Otakar</firstName>
+            <lastName>Hájek</lastName>
+        </player>
+        <player>
+            <firstName>Ivona</firstName>
+            <lastName>KratochvĂ­l</lastName>
+        </player>
+        <player>
+            <firstName>Marika</firstName>
+            <lastName>Zeman</lastName>
+        </player>
+        <player>
+            <firstName>ÄŚestmĂ­r</firstName>
+            <lastName>Navrátil</lastName>
+        </player>
+        <player>
+            <firstName>Samantha</firstName>
+            <lastName>Dušek</lastName>
+        </player>
+        <player>
+            <firstName>Rajmund</firstName>
+            <lastName>TichĂ˝</lastName>
+        </player>
+        <player>
+            <firstName>Ladislava</firstName>
+            <lastName>KopeckĂ˝</lastName>
+        </player>
+        <player>
+            <firstName>Johanka</firstName>
+            <lastName>Navrátil</lastName>
+        </player>
+        <player>
+            <firstName>Ĺ tefana</firstName>
+            <lastName>Ĺ imek</lastName>
+        </player>
+    </players>
+</tournament>
-- 
GitLab