summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/CAMSIParser.java')
-rw-r--r--src/CAMSIParser.java125
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();
+ }
+}