Skip to content
Snippets Groups Projects
Commit c67abc39 authored by koz01's avatar koz01
Browse files

solution

parent fe785201
No related merge requests found
...@@ -59,5 +59,12 @@ ...@@ -59,5 +59,12 @@
<artifactId>jakarta.xml.bind-api</artifactId> <artifactId>jakarta.xml.bind-api</artifactId>
<version>3.0.1</version> <version>3.0.1</version>
</dependency> </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> </dependencies>
</project> </project>
...@@ -3,6 +3,9 @@ package cz.jezek.lab11; ...@@ -3,6 +3,9 @@ package cz.jezek.lab11;
import java.io.Serializable; import java.io.Serializable;
import java.util.Objects; import java.util.Objects;
import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlElement;
public class Match implements Serializable{ public class Match implements Serializable{
/** /**
...@@ -10,10 +13,18 @@ public class Match implements Serializable{ ...@@ -10,10 +13,18 @@ public class Match implements Serializable{
*/ */
private static final long serialVersionUID = -7368303036334738923L; private static final long serialVersionUID = -7368303036334738923L;
@XmlElement
private Oponents oponents; private Oponents oponents;
@XmlAttribute
private int player1Scorel; private int player1Scorel;
@XmlAttribute
private int player2Scorel; private int player2Scorel;
public Match() {
}
public Match(Player player1, int player1Scorel, Player player2, int player2Scorel) { public Match(Player player1, int player1Scorel, Player player2, int player2Scorel) {
this.oponents = new Oponents(player1, player2); this.oponents = new Oponents(player1, player2);
this.player1Scorel = player1Scorel; this.player1Scorel = player1Scorel;
......
...@@ -3,6 +3,8 @@ package cz.jezek.lab11; ...@@ -3,6 +3,8 @@ package cz.jezek.lab11;
import java.io.Serializable; import java.io.Serializable;
import java.util.Objects; import java.util.Objects;
import jakarta.xml.bind.annotation.XmlElement;
public class Oponents implements Serializable{ public class Oponents implements Serializable{
/** /**
...@@ -10,9 +12,15 @@ public class Oponents implements Serializable{ ...@@ -10,9 +12,15 @@ public class Oponents implements Serializable{
*/ */
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@XmlElement
private Player player1; private Player player1;
@XmlElement
private Player player2; private Player player2;
public Oponents() {
}
public Oponents(Player player1, Player player2) { public Oponents(Player player1, Player player2) {
super(); super();
this.player1 = player1; this.player1 = player1;
......
...@@ -16,6 +16,9 @@ public class Player implements Serializable { ...@@ -16,6 +16,9 @@ public class Player implements Serializable {
RandomGenerator.selectRandom(RandomGenerator.SURNAMES)); RandomGenerator.selectRandom(RandomGenerator.SURNAMES));
} }
public Player() {
}
public Player(String firstName, String lastName) { public Player(String firstName, String lastName) {
super(); super();
this.firstName = firstName; this.firstName = firstName;
......
...@@ -4,14 +4,21 @@ import java.io.FileInputStream; ...@@ -4,14 +4,21 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream; import java.io.ObjectInputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.Comparator; import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.eclipse.persistence.jaxb.MarshallerProperties;
import jakarta.xml.bind.JAXBContext; import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException; import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller; import jakarta.xml.bind.Marshaller;
import jakarta.xml.bind.Unmarshaller;
public class StreamMain { public class StreamMain {
...@@ -21,6 +28,11 @@ public class StreamMain { ...@@ -21,6 +28,11 @@ public class StreamMain {
//printStatAboutTournament(tournament); //printStatAboutTournament(tournament);
saveTournament(tournament); saveTournament(tournament);
saveTournamentAsJSON(tournament);
Tournament tournament2 = loadTournamentFromXML();
System.out.println(tournament2);
} }
public static void printStatAboutTournament(Tournament tournament) { public static void printStatAboutTournament(Tournament tournament) {
...@@ -93,4 +105,51 @@ public class StreamMain { ...@@ -93,4 +105,51 @@ public class StreamMain {
e.printStackTrace(); e.printStackTrace();
} }
} }
public static void saveTournamentAsJSON(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 exc) {
exc.printStackTrace();
}
}
public static Tournament loadTournamentFromXML() {
try (InputStream is = new FileInputStream("tournament.xml")) {
JAXBContext context = JAXBContext.newInstance(Tournament.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Tournament result = (Tournament) unmarshaller.unmarshal(is);
Map<String,Player> tempPlayers =
result.getPlayers().stream()
.collect(Collectors.toMap(p -> p.getLastName() + ";" + p.getFirstName(),
p ->p ));
List<Match> tempMatches = new LinkedList<>(result.getMatches());
result.getMatches().clear();
for (Match m: tempMatches) {
String player1Key = m.getOponents().getPlayer1().getLastName() + ";" + m.getOponents().getPlayer1().getFirstName();
String player2Key = m.getOponents().getPlayer2().getLastName() + ";" + m.getOponents().getPlayer2().getFirstName();
result.getMatches().add(new Match(tempPlayers.get(player1Key), m.getPlayer1Scorel(), tempPlayers.get(player2Key), m.getPlayer2Scorel()));
}
} catch (JAXBException exc) {
exc.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
} }
...@@ -24,7 +24,6 @@ public class Tournament implements Serializable{ ...@@ -24,7 +24,6 @@ public class Tournament implements Serializable{
@XmlElement(name = "match") @XmlElement(name = "match")
@XmlElementWrapper(name = "matches") @XmlElementWrapper(name = "matches")
private List<Match> matches; private List<Match> matches;
@XmlAttribute @XmlAttribute
......
...@@ -3,4 +3,5 @@ module cz.jezek.lab10 { ...@@ -3,4 +3,5 @@ module cz.jezek.lab10 {
exports cz.jezek.lab11; exports cz.jezek.lab11;
requires java.xml; requires java.xml;
requires jakarta.xml.bind; requires jakarta.xml.bind;
requires org.eclipse.persistence.moxy;
} }
\ No newline at end of file
This diff is collapsed.
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment