import java.util.TimeZone; import java.util.Calendar; import java.util.Locale; import java.util.regex.Pattern; import java.util.regex.Matcher; import java.io.BufferedReader; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamException; /** * This class stores the incoming data from XML. * It is needed because of the stream nature of the XML parser. **/ public class CAMSIParser { final static Pattern event_pattern; static { event_pattern = Pattern.compile ( "[^<]*<[^>]*>([0-9]+)/([0-9]+)/([0-9]+)]*>" + "<[^>]*>([0-9]+):([0-9]+)]*>" + "<[^>]*>([0-9]+):([0-9]+)]*>" + "<[^>]*>([^<]*)]*>" // 8th + "<[^>]*>([^<]*)]*>" + "<[^>]*>([^<]*)]*>" ); } public static void parse ( final BufferedReader reader, final Group group, final String uid_prefix ) throws Exception { int uid; String line; Matcher matcher; uid = 0; while (reader.ready()) { line = reader.readLine(); matcher = event_pattern.matcher(line); if (matcher.matches()) { final Event e; final java.util.Calendar c_start, c_end; c_start = java.util.Calendar.getInstance ( TimeZone.getTimeZone("Europe/Paris"), Locale.FRENCH ); c_start.set ( java.util.Calendar.DAY_OF_MONTH, Integer.parseInt(matcher.group(1)) ); c_start.set ( java.util.Calendar.MONTH, /* It's Java... don't question it. */ (Integer.parseInt(matcher.group(2)) - 1) ); c_start.set ( java.util.Calendar.YEAR, Integer.parseInt(matcher.group(3)) ); c_start.set ( java.util.Calendar.HOUR_OF_DAY, Integer.parseInt(matcher.group(4)) ); c_start.set ( java.util.Calendar.MINUTE, Integer.parseInt(matcher.group(5)) ); c_end = (java.util.Calendar) c_start.clone(); c_end.set ( java.util.Calendar.HOUR_OF_DAY, Integer.parseInt(matcher.group(6)) ); c_end.set ( java.util.Calendar.MINUTE, Integer.parseInt(matcher.group(7)) ); e = new Event(); e.set_start_time(c_start); e.set_end_time(c_end); e.set_name(matcher.group(8)); e.add_speaker(matcher.group(9)); e.add_location(matcher.group(10)); e.set_uid(uid_prefix + (uid++)); group.add_event(e); } } reader.close(); } }