itmo-prog-lab-5/src/main/java/server/FileManager.java

67 lines
2.5 KiB
Java

package server;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayDeque;
import common.models.Ticket;
public class FileManager {
private String fileName;
public FileManager(String fileName) {
this.fileName = fileName;
}
public ArrayDeque<Ticket> loadCollection() {
ArrayDeque<Ticket> tickets = new ArrayDeque<>();
try {
File file = new File(fileName);
if (file.exists()) {
JAXBContext jaxbContext = JAXBContext.newInstance(TicketsCollectionWrapper.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
TicketsCollectionWrapper wrapper = (TicketsCollectionWrapper) unmarshaller.unmarshal(new FileReader(fileName));
tickets.addAll(wrapper.getTickets());
}
} catch (JAXBException | IOException e) {
System.err.println("Ошибка при загрузке коллекции из файла: " + e.getMessage());
}
return tickets;
}
public void saveCollection(ArrayDeque<Ticket> tickets) {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(TicketsCollectionWrapper.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
TicketsCollectionWrapper wrapper = new TicketsCollectionWrapper();
wrapper.setTickets(new ArrayDeque<>(tickets));
marshaller.marshal(wrapper, new FileWriter(fileName));
} catch (JAXBException | IOException e) {
System.err.println("Ошибка при сохранении коллекции в файл: " + e.getMessage());
}
}
// Вспомогательный класс для обертки коллекции Ticket для JAXB
@XmlRootElement(name = "tickets")
public static class TicketsCollectionWrapper {
private ArrayDeque<Ticket> tickets;
@XmlElement(name = "ticket")
public ArrayDeque<Ticket> getTickets() {
return tickets;
}
public void setTickets(ArrayDeque<Ticket> tickets) {
this.tickets = tickets;
}
}
}