67 lines
2.5 KiB
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;
|
|
}
|
|
}
|
|
}
|