| summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/CAMSIParser.java')
| -rw-r--r-- | src/CAMSIParser.java | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/src/CAMSIParser.java b/src/CAMSIParser.java new file mode 100644 index 0000000..b074b16 --- /dev/null +++ b/src/CAMSIParser.java @@ -0,0 +1,125 @@ +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 + ( + "[^<]*<td><[^>]*>([0-9]+)/([0-9]+)/([0-9]+)</[^>]*></td>" + + "<td><[^>]*>([0-9]+):([0-9]+)</[^>]*></td>" + + "<td><[^>]*>([0-9]+):([0-9]+)</[^>]*></td>" + + "<td><[^>]*>([^<]*)</[^>]*></td>" // 8th + + "<td><[^>]*>([^<]*)</[^>]*></td>" + + "<td><[^>]*>([^<]*)</[^>]*></td>" + ); + } + + 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(); + } +} |


