[Bedework-commit] timezones r11 -
trunk/tzutil/src/org/bedework/timezones/tzutil
svnadmin at bedework.org
svnadmin at bedework.org
Wed Jan 16 15:46:31 EST 2008
Author: douglm
Date: 2008-01-16 15:46:30 -0500 (Wed, 16 Jan 2008)
New Revision: 11
Modified:
trunk/tzutil/src/org/bedework/timezones/tzutil/Reader.java
Log:
Timezones reader changes
Modified: trunk/tzutil/src/org/bedework/timezones/tzutil/Reader.java
===================================================================
--- trunk/tzutil/src/org/bedework/timezones/tzutil/Reader.java 2008-01-16 03:51:18 UTC (rev 10)
+++ trunk/tzutil/src/org/bedework/timezones/tzutil/Reader.java 2008-01-16 20:46:30 UTC (rev 11)
@@ -91,6 +91,14 @@
private static final QName rrule = new QName(icalNamespace, "rrule");
+ private static final QName freq = new QName(null, "freq");
+
+ private static final QName bymonth = new QName(null, "bymonth");
+
+ private static final QName bymonthday = new QName(null, "bymonthday");
+
+ private static final QName byday = new QName(null, "byday");
+
private static final String observanceDaylight = "daylight";
private static final String observanceStandard = "standard";
@@ -199,41 +207,38 @@
nextStart();
while (atStart()) {
- QName endTag;
+ QName tag = rdr.getName();
- if (observanceName.equals(rdr.getName())) {
+ if (observanceName.equals(tag)) {
rdr.next();
onameProp = rdr.getText();
- endTag = observanceName;
- } else if (tzname.equals(rdr.getName())) {
+ } else if (tzname.equals(tag)) {
rdr.next();
tznameProp = new TzName(rdr.getText());
- endTag = tzname;
- } else if (dtstart.equals(rdr.getName())) {
+ } else if (dtstart.equals(tag)) {
rdr.next();
dtstartProp = new DateTime(rdr.getText());
- endTag = dtstart;
- } else if (tzoffsetto.equals(rdr.getName())) {
+ } else if (tzoffsetto.equals(tag)) {
rdr.next();
toProp = new TzOffsetTo(new UtcOffset(rdr.getText()));
- endTag = tzoffsetto;
- } else if (tzoffsetfrom.equals(rdr.getName())) {
+ } else if (tzoffsetfrom.equals(tag)) {
rdr.next();
fromProp = new TzOffsetFrom(new UtcOffset(rdr.getText()));
- endTag = tzoffsetfrom;
- } else if (rrule.equals(rdr.getName())) {
- rdr.next();
- rruleProp = new RRule(new Recur(rdr.getText()));
- endTag = rrule;
+ } else if (rrule.equals(tag)) {
+ rruleProp = parseRrule();
} else {
- error("Unexpected element " + rdr.getName());
+ error("Unexpected element " + tag);
return null;
}
- if (!nextEnd(endTag) || !nextEndStart()) {
+ if ((tag != null) && !nextEnd(tag)) {
return null;
}
+ if (!nextEndStart()) {
+ return null;
+ }
+
if (atEnd(observance)) {
break;
}
@@ -297,11 +302,68 @@
return ob;
}
+ private RRule parseRrule() throws Throwable {
+ String freqVal = null;
+ String bymonthVal = null;
+ String bymonthdayVal = null;
+ String bydayVal = null;
+
+ for (int i = 0; i < rdr.getAttributeCount(); i++) {
+ QName attName = rdr.getAttributeName(i);
+ if (debug) {
+ debugMsg("attr: " + attName);
+ }
+
+ if (freq.equals(attName)) {
+ freqVal = rdr.getAttributeValue(i);
+ } else if (bymonth.equals(attName)) {
+ bymonthVal = rdr.getAttributeValue(i);
+ } else if (bymonthday.equals(attName)) {
+ bymonthdayVal = rdr.getAttributeValue(i);
+ } else if (byday.equals(attName)) {
+ bydayVal = rdr.getAttributeValue(i);
+ } else {
+ error("Illegal rrule attribute " + attName);
+ return null;
+ }
+ }
+
+ StringBuilder sb = new StringBuilder();
+
+ if (freqVal == null) {
+ error("Require rrule freq attribute");
+ return null;
+ }
+
+ sb.append("FREQ=");
+ sb.append(freqVal);
+
+ if (bymonthVal != null) {
+ sb.append(";BYMONTH=");
+ sb.append(bymonthVal);
+ }
+
+ if (bymonthdayVal != null) {
+ sb.append(";BYMONTHDAY=");
+ sb.append(bymonthdayVal);
+ }
+
+ if (bydayVal != null) {
+ sb.append(";BYDAY=");
+ sb.append(bydayVal);
+ }
+
+ if (debug) {
+ debugMsg("rrule=" + sb.toString());
+ }
+ return new RRule(new Recur(sb.toString()));
+ }
+
private void traceState(String id) {
StringBuilder sb = new StringBuilder();
sb.append(id);
- sb.append(" - Event -type: ");
+ sb.append(" - Event -type: ");
switch (rdr.getEventType()) {
case XMLEvent.START_ELEMENT:
More information about the Bedework-commit
mailing list