com.google.ical.values.RDateList Maven / Gradle / Ivy
Show all versions of recurrence Show documentation
/**
* Copyright (C) 2015, 2016 Dirk Lemmermann Software & Consulting (dlsc.com)
*
* This file is part of CalendarFX.
*/
// Copyright (C) 2006 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.ical.values;
import java.text.ParseException;
import java.util.Map;
import java.util.TimeZone;
/**
* a list of dates, as from an RDATE or EXDATE ical property.
*
*
See RFC 2445 sections 4.8.5.1 and 4.8.5.3.
*
* @author [email protected] (Mike Samuel)
*/
public class RDateList extends AbstractIcalObject {
private TimeZone tzid;
private DateValue[] datesUtc;
private IcalValueType valueType;
public RDateList(String icalString, TimeZone tzid) throws ParseException {
setTzid(tzid);
parse(icalString, RRuleSchema.instance());
}
public RDateList(TimeZone tzid) {
setTzid(tzid);
setName("RDATE");
datesUtc = new DateValue[0];
}
public TimeZone getTzid() {
return this.tzid;
}
public void setTzid(TimeZone tzid) {
assert null != tzid;
this.tzid = tzid;
}
public DateValue[] getDatesUtc() {
return null != this.datesUtc ? this.datesUtc.clone() : null;
}
public void setDatesUtc(DateValue[] datesUtc) {
this.datesUtc = datesUtc.clone();
if (datesUtc.length > 0) {
setValueType((datesUtc[0] instanceof TimeValue)
? IcalValueType.DATE_TIME
: IcalValueType.DATE);
}
}
/**
* the type of the values contained by this list as reported by the ical
* "VALUE" parameter, typically DATE or DATE-TIME.
*/
public IcalValueType getValueType() {
return valueType;
}
public void setValueType(IcalValueType valueType) {
this.valueType = valueType;
}
/** returns a String containing ical content lines. */
public String toIcal() {
StringBuilder buf = new StringBuilder();
buf.append(this.getName().toUpperCase());
buf.append(";TZID=\"").append(tzid.getID()).append('"');
buf.append(";VALUE=").append(valueType.toIcal());
if (hasExtParams()) {
for (Map.Entry param : getExtParams().entrySet()) {
String k = param.getKey(),
v = param.getValue();
if (ICAL_SPECIALS.matcher(v).find()) {
v = "\"" + v + "\"";
}
buf.append(';').append(k).append('=').append(v);
}
}
buf.append(':');
for (int i = 0; i < datesUtc.length; ++i) {
if (0 != i) {
buf.append(',');
}
DateValue v = datesUtc[i];
buf.append(v);
if (v instanceof TimeValue) {
buf.append('Z');
}
}
return buf.toString();
}
}