From 9590b197c5bc051da6e48a622d83576eaf2be7e2 Mon Sep 17 00:00:00 2001
From: koz01 <koz01@PCCPIT1V203-040.msad.vsb.cz>
Date: Wed, 1 Dec 2021 10:52:58 +0100
Subject: [PATCH] lab11-solution

---
 pom.xml                                      |   8 +++
 src/main/java/cz/jezek/lab11/Match.java      |   9 +++
 src/main/java/cz/jezek/lab11/Oponents.java   |   8 +++
 src/main/java/cz/jezek/lab11/Player.java     |   3 +
 src/main/java/cz/jezek/lab11/StreamMain.java |  57 ++++++++++++++++++-
 src/main/java/cz/jezek/lab11/Tournament.java |  22 ++++---
 src/main/java/module-info.java               |   2 +
 tournament.obj                               | Bin 0 -> 613 bytes
 tournament.xml                               |  27 +++++++++
 9 files changed, 122 insertions(+), 14 deletions(-)
 create mode 100644 tournament.obj
 create mode 100644 tournament.xml

diff --git a/pom.xml b/pom.xml
index 7364e80..7d9e06a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -69,5 +69,13 @@
             <artifactId>jakarta.xml.bind-api</artifactId>
             <version>3.0.1</version>
         </dependency>
+        
+        <!-- https://mvnrepository.com/artifact/org.eclipse.persistence/org.eclipse.persistence.moxy -->
+		<dependency>
+		    <groupId>org.eclipse.persistence</groupId>
+		    <artifactId>org.eclipse.persistence.moxy</artifactId>
+		    <version>3.0.2</version>
+		</dependency>
+		        
 	</dependencies>
 </project>
diff --git a/src/main/java/cz/jezek/lab11/Match.java b/src/main/java/cz/jezek/lab11/Match.java
index 5b16674..5d373ee 100644
--- a/src/main/java/cz/jezek/lab11/Match.java
+++ b/src/main/java/cz/jezek/lab11/Match.java
@@ -3,18 +3,27 @@ package cz.jezek.lab11;
 import java.io.Serializable;
 import java.util.Objects;
 
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlElement;
+
 
 public class Match implements Serializable{
 
 	
 	private static final long serialVersionUID = 1L;
 	
+	@XmlElement
 	private Oponents oponents;
 	
+	@XmlAttribute
 	private int player1Scorel;
 	
+	@XmlAttribute
 	private int player2Scorel;
 
+	public Match() {
+	}
+	
 	public Match(Player player1, int player1Scorel, Player player2, int player2Scorel) {
 		this.oponents = new Oponents(player1, player2);
 		this.player1Scorel = player1Scorel;
diff --git a/src/main/java/cz/jezek/lab11/Oponents.java b/src/main/java/cz/jezek/lab11/Oponents.java
index afc5a80..428893e 100644
--- a/src/main/java/cz/jezek/lab11/Oponents.java
+++ b/src/main/java/cz/jezek/lab11/Oponents.java
@@ -3,6 +3,8 @@ package cz.jezek.lab11;
 import java.io.Serializable;
 import java.util.Objects;
 
+import jakarta.xml.bind.annotation.XmlElement;
+
 public class Oponents implements Serializable{
 
 	/**
@@ -10,9 +12,15 @@ public class Oponents implements Serializable{
 	 */
 	private static final long serialVersionUID = 1L;
 	
+	@XmlElement
 	private Player player1;
+	
+	@XmlElement
 	private Player player2;
 
+	public Oponents() {
+	}
+	
 	public Oponents(Player player1, Player player2) {
 		super();
 		this.player1 = player1;
diff --git a/src/main/java/cz/jezek/lab11/Player.java b/src/main/java/cz/jezek/lab11/Player.java
index f708162..ab7d0e6 100644
--- a/src/main/java/cz/jezek/lab11/Player.java
+++ b/src/main/java/cz/jezek/lab11/Player.java
@@ -13,6 +13,9 @@ public class Player implements Serializable{
 				RandomGenarator.selectRandom(RandomGenarator.SURNAMES));
 	}
 
+	public Player() {
+	}
+	
 	public Player(String firstName, String lastName) {
 		super();
 		this.firstName = firstName;
diff --git a/src/main/java/cz/jezek/lab11/StreamMain.java b/src/main/java/cz/jezek/lab11/StreamMain.java
index 494a809..7bde045 100644
--- a/src/main/java/cz/jezek/lab11/StreamMain.java
+++ b/src/main/java/cz/jezek/lab11/StreamMain.java
@@ -4,23 +4,27 @@ import static java.util.Comparator.comparingInt;
 
 import java.io.File;
 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.util.Arrays;
 import java.util.Optional;
 
+import org.eclipse.persistence.jaxb.MarshallerProperties;
+
 import jakarta.xml.bind.JAXBContext;
 import jakarta.xml.bind.JAXBException;
 import jakarta.xml.bind.Marshaller;
+import jakarta.xml.bind.Unmarshaller;
 
 
 
 public class StreamMain {
 
   public static void main(String[] args) {
-    Tournament tournament = loadTournament();
+	System.setProperty("jakarta.xml.bind.JAXBContextFactory", "org.eclipse.persistence.jaxb.JAXBContextFactory");
+    /*Tournament tournament = loadTournament();
     if (tournament == null) {
     	tournament = Tournament.generate();
     }
@@ -29,6 +33,28 @@ public class StreamMain {
 
     saveTournament(tournament);
     printTournamentAsXML(tournament);
+    printTournamentAsJSON(tournament);
+    
+    Tournament tournament2 = loadTournamentFromXML();
+    
+    */
+	Player p1 = new Player("Jonh", "Doe");
+	Player p2 = new Player("Marry", "Jane");
+	
+	Match m = new Match(p1, 0, p2, 0);
+	
+	Tournament t = new Tournament(Arrays.asList(p1,p2), Arrays.asList(m));
+	saveTournament(t);
+	Tournament t2 = loadTournament();
+	
+	System.out.print("p1 == m.oponents.player1  " + 
+			(t2.getPlayers().get(0) == t2.getMatches().get(0).getOponents().getPlayer1()));
+	
+	printTournamentAsXML(t);
+	t2 = loadTournamentFromXML();
+	System.out.print("p1 == m.oponents.player1  " + 
+			(t2.getPlayers().get(0) == t2.getMatches().get(0).getOponents().getPlayer1()));
+	
   }
   
   
@@ -102,10 +128,37 @@ public static Tournament loadTournament() {
 		Marshaller marshaller = context.createMarshaller();
 		marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
 		marshaller.marshal(tournament, System.out);
+		marshaller.marshal(tournament, new File("tournament.xml"));
 	} catch (JAXBException e) {
 		e.printStackTrace();
 	}
   }
   
+  private static void printTournamentAsJSON(Tournament tournament) {
+		try {
+			JAXBContext context = JAXBContext.newInstance(Tournament.class);
+			Marshaller marshaller = context.createMarshaller();
+			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+			marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
+			marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, true);
+			marshaller.marshal(tournament, System.out);
+		} catch (JAXBException e) {
+			e.printStackTrace();
+		}
+	  }
+
+
+
+private static Tournament loadTournamentFromXML() {
+	try {
+		JAXBContext context = JAXBContext.newInstance(Tournament.class);
+		Unmarshaller unmarshaller= context.createUnmarshaller();
+		return (Tournament) unmarshaller.unmarshal(new File("tournament.xml"));
+	} catch (JAXBException e) {
+		e.printStackTrace();
+	}
+	return null;
+}
+  
   
  }
diff --git a/src/main/java/cz/jezek/lab11/Tournament.java b/src/main/java/cz/jezek/lab11/Tournament.java
index 66d9148..d213684 100644
--- a/src/main/java/cz/jezek/lab11/Tournament.java
+++ b/src/main/java/cz/jezek/lab11/Tournament.java
@@ -8,6 +8,9 @@ import java.util.Random;
 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;
 
 
@@ -17,12 +20,15 @@ public class Tournament implements Serializable{
 
 
   private static final long serialVersionUID = 0L;
- 
+  
+  @XmlElement(name = "player")
+  @XmlElementWrapper(name = "players")
   private List<Player> players;
+ 
+  @XmlElement(name = "match")
+  @XmlElementWrapper(name = "matches")
   private List<Match> matches;
-
  
-  
   private String name = "turnaj";
   
   private static Random rnd = new Random();
@@ -43,7 +49,7 @@ public class Tournament implements Serializable{
     List<Match> matches = 
     		Stream.generate(() -> generateRandomMatch(players))
     			.filter(m -> m.getOponents().getPlayer1() != m.getOponents().getPlayer2())
-    			.limit(250)
+    			.limit(30)
     			.collect(Collectors.toList());
     
 
@@ -59,14 +65,6 @@ public class Tournament implements Serializable{
   }
   
  
-  public void setName(String name) {
-	this.name = name;
-  }
-  
-  public String getName() {
-	return name;
-  }
-
   public List<Player> getPlayers() {
     return players;
   }
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index 59a012f..6e38030 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -2,6 +2,8 @@ module cz.jezek.lab10 {
     requires transitive javafx.controls;
     requires javafx.fxml;
     requires jakarta.xml.bind;
+    requires java.sql;
+    requires org.eclipse.persistence.moxy;
     opens cz.jezek.lab11;
     exports cz.jezek.lab11;
 }
\ No newline at end of file
diff --git a/tournament.obj b/tournament.obj
new file mode 100644
index 0000000000000000000000000000000000000000..d71f9ba749edf52cb9f33e56af3abb2a87930339
GIT binary patch
literal 613
zcmZvaJ5Iwu5QfLjlOiG_pkQi5Y0GISLW4vDatKloO{$HxBsPw1))R0dL5)P015i=Y
zP||P%8afVvH~<a1Yv+N%g{{%d{Qt~1e)@z$#6Ytrx=SbYLib3|H1*S9#C$TOK0^Aa
zkh7pPBxnz4giy6yaz%_0I-X%U5jHKziw1<XB;ygkZ*-73exK(`p-0A)MVD|3N*r>>
zEzz%wetn-YGLE+8M`(RK?!CU<72j1*x}Xq*T6ama-E*mp%{Uw}sCTW*;4Lv=^Q?M*
zJ>B{GRsrIWFQ9P4_5Ui<<rKc%Aykqf&5j)~>doUu5?fFX!ocT9`1%_6H6$=Y0yEla
ziqAD8#y#s9&so*NR-Lmk5$ajh6G?5suOawVB)^S}bW-|Dc;(z-5gzlah&Jw2_Q+Bk
zhY0zjz#kyw4gxA~vx-n?5yr+MMSOnFB8or3mDxN;zWE1vI;47|J-keJpJ&WfVOkZh
F+7F5twafqj

literal 0
HcmV?d00001

diff --git a/tournament.xml b/tournament.xml
new file mode 100644
index 0000000..3bda513
--- /dev/null
+++ b/tournament.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tournament>
+   <players>
+      <player>
+         <firstName>Jonh</firstName>
+         <lastName>Doe</lastName>
+      </player>
+      <player>
+         <firstName>Marry</firstName>
+         <lastName>Jane</lastName>
+      </player>
+   </players>
+   <matches>
+      <match player1Scorel="0" player2Scorel="0">
+         <oponents>
+            <player1>
+               <firstName>Jonh</firstName>
+               <lastName>Doe</lastName>
+            </player1>
+            <player2>
+               <firstName>Marry</firstName>
+               <lastName>Jane</lastName>
+            </player2>
+         </oponents>
+      </match>
+   </matches>
+</tournament>
-- 
GitLab