Mam problem z wczytaniem do programu danych z pliku XML. Chcę je wczytać do własnej klasy Meeting, w której jedno pole jest typu GregorianCalendar. Docelowo chcę to wczytywać do arraylist.
Stworzyłam Converter dla tego pola i zapisuje się wszystko ok, ale już z odczytem nie mogę sobie poradzić. Mam nadzieję, że ktoś będzie mógł mi pomóc :)
Kod klasy Meeting (pomijam gettersy i settersy itp):
public class Meeting {
@XStreamConverter(SingleValueCalendarConverter.class)
private GregorianCalendar data=new GregorianCalendar() ;
private String place;
private String description;
private String person;
public Meeting(int year, int month, int day, int hour, int minute, String place, String description, String person) {
super();
data.set(year,month,day,hour,minute);
this.place = place;
this.description = description;
this.person = person;
}
Converter dla daty:
public class SingleValueCalendarConverter implements Converter {
public void marshal(Object source, HierarchicalStreamWriter writer,
MarshallingContext context) {
GregorianCalendar calendar = (GregorianCalendar) source;
writer.startNode("year");
writer.setValue(String.valueOf(calendar.get(Calendar.YEAR)));
writer.startNode("month");
writer.setValue(String.valueOf((calendar.get(Calendar.MONTH)+1)));
writer.startNode("day");
writer.setValue(String.valueOf(calendar.get(Calendar.DAY_OF_MONTH)));
writer.startNode("hour");
writer.setValue(String.valueOf(calendar.get(Calendar.HOUR_OF_DAY)));
writer.startNode("minutes");
writer.setValue(String.valueOf(calendar.get(Calendar.MINUTE)));
writer.endNode();
writer.endNode();
writer.endNode();
writer.endNode();
}
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context) {
GregorianCalendar calendar = new GregorianCalendar();
calendar.set(Calendar.YEAR, Integer.parseInt(reader.getValue()));
reader.moveDown();
calendar.set(Calendar.MONTH, Integer.parseInt(reader.getValue()));
reader.moveDown();
calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(reader.getValue()));
reader.moveDown();
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(reader.getValue()));
reader.moveDown();
calendar.set(Calendar.MINUTE, Integer.parseInt(reader.getValue()));
reader.moveUp();
reader.moveUp();
reader.moveUp();
reader.moveUp();
return calendar;
}
@SuppressWarnings("rawtypes")
public boolean canConvert(Class type) {
return type.equals(GregorianCalendar.class);
}
}
Z góry dzięki za pomoc :)