diff --git a/pom.xml b/pom.xml index 7364e8090da61d0a9f4ed8057229c6ddf7e5153b..7d9e06ac99d00013d484b6c69abbf4328bf3be5b 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 5b16674d4baa46f5de28ec230e4f651b230d91f2..5d373ee812888f7f4d9d550031c08ec26c25d8a5 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 afc5a8012dcec5f6ac9078f50cb53c8faa5b8074..428893e975f4a6ecef5febba3a5f0253f2b584ab 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 f7081622ac3a967f4813d7d7037a4fff5a348424..ab7d0e63f6cd717e21282e999abd67e082cd17c2 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 494a809bf62e7ed3b20f1a156842e75ca7f7c4b2..7bde04522991733bc5b0085c54c92b115ee2c697 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 66d914832234d8381106ccd0e89bd9bcb29a97d0..d213684719a5407f23587608d26f06e69eda4f9d 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 59a012f92744677dff3b9b6d973989626809dfe1..6e380307557e144ba6b7a90f124a5afbbe2f0c7b 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 Binary files /dev/null and b/tournament.obj differ diff --git a/tournament.xml b/tournament.xml new file mode 100644 index 0000000000000000000000000000000000000000..3bda513b2e8cc951ffca044183dda80df5b1df57 --- /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>