diff options
author | Christian Mollekopf <mollekopf@kolabsys.com> | 2012-06-19 20:07:21 (GMT) |
---|---|---|
committer | Christian Mollekopf <mollekopf@kolabsys.com> | 2012-06-20 17:07:28 (GMT) |
commit | a1adb3a394f7d1d0a08406c9ad16909348e3e6c1 (patch) | |
tree | eacc583b0083049218be40404bced8e8e984c836 /src/containers/kolabcontainers.h | |
parent | 87a0cdd2f5b0d27badac3e5055b8d6fbabd924c9 (diff) | |
download | libkolabxml-a1adb3a394f7d1d0a08406c9ad16909348e3e6c1.tar.gz |
Moved containers to subdirectory.
Diffstat (limited to 'src/containers/kolabcontainers.h')
-rw-r--r-- | src/containers/kolabcontainers.h | 408 |
1 files changed, 408 insertions, 0 deletions
diff --git a/src/containers/kolabcontainers.h b/src/containers/kolabcontainers.h new file mode 100644 index 0000000..5f8318d --- /dev/null +++ b/src/containers/kolabcontainers.h @@ -0,0 +1,408 @@ +/* + * Copyright (C) 2011 Christian Mollekopf <mollekopf@kolabsys.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef KOLAB_CONTAINERS_H +#define KOLAB_CONTAINERS_H +#include <string> +#include <vector> +#include <boost/scoped_ptr.hpp> + +namespace Kolab { + +class cDateTime { +public: + cDateTime(); + cDateTime(int year, int month, int day, int hour, int minute, int second, bool isUtc=false); + cDateTime(const std::string &timezone, int year, int month, int day, int hour, int minute, int second); + cDateTime(int year, int month, int day); + ~cDateTime(); + cDateTime(const cDateTime &); + void operator=(const cDateTime &); + bool operator==(const cDateTime &) const; + + + void setDate(int year, int month, int day); + int year() const; + int month() const; + int day() const; + + bool isDateOnly() const; + + void setTime(int hour, int minute, int second); + int hour() const; + int minute() const; + int second() const; + + void setUTC(bool); + bool isUTC() const; + void setTimezone(const std::string &); + std::string timezone() const; + + bool isValid() const; +private: + struct Private; + boost::scoped_ptr<Private> d; +}; + +enum Classification { + ClassPublic, + ClassPrivate, + ClassConfidential +}; + +enum Status { + StatusUndefined, + StatusNeedsAction, + StatusCompleted, + StatusInProcess, + StatusCancelled, + StatusTentative, + StatusConfirmed, + StatusDraft, + StatusFinal +}; + +enum Weekday { + Monday, + Tuesday, + Wednesday, + Thursday, + Friday, + Saturday, + Sunday +}; + +struct DayPos { + DayPos(): mIsValid(false){}; + DayPos(int occurrence, Weekday weekday): mOccurrence(occurrence), mWeekday(weekday), mIsValid(true){}; + bool operator==(const DayPos &other) const { return mOccurrence == other.mOccurrence && mWeekday == other.mWeekday; }; + int occurence() const { return mOccurrence; }; + Weekday weekday() const { return mWeekday; }; + bool isValid() { return mIsValid; }; +private: + int mOccurrence; + Weekday mWeekday; + bool mIsValid; +}; + +class Attachment { +public: + Attachment(); + Attachment(const Kolab::Attachment &); + ~Attachment(); + + void operator=(const Attachment &); + bool operator==(const Attachment &) const; + + void setUri(const std::string &uri, const std::string &mimetype); + std::string uri() const; + + ///Un-encoded binary content, Implies embedded, will be encoded + void setData(const std::string &, const std::string &mimetype); + ///Decoded binary content. + std::string data() const; + //TODO add possibility to set already encoded data and uri to be embedded as performance/convenience improvement? +// ///Base64 encoded binary content, Implies embedded +// void setEncodedData(const std::string &, const std::string &mimetype); + + std::string mimetype() const; + + ///User visible label + void setLabel(const std::string &); + std::string label() const; + + bool isValid() const; +private: + struct Private; + boost::scoped_ptr<Private> d; +}; + +enum Relative { + Start, + End +}; + +struct Duration { + Duration():mWeeks(0), mDays(0), mHours(0), mMinutes(0), mSeconds(0), mNegative(false), valid(false){}; + Duration(int weeks, bool negative = false): mWeeks(weeks), mDays(0), mHours(0), mMinutes(0), mSeconds(0), mNegative(negative), valid(true){}; + Duration(int days, int hours, int minutes, int seconds, bool negative = false): mWeeks(0), mDays(days), mHours(hours), mMinutes(minutes), mSeconds(seconds), mNegative(negative), valid(true){}; + bool operator==(const Duration &other) const{ return (/*mWeeks == other.mWeeks && + mDays == other.mDays && + mHours == other.mHours && + mMinutes == other.mMinutes && + mSeconds == other.mSeconds && + mNegative == other.mNegative &&*/ + ( ((((mWeeks * 7 + mDays) * 24 + mHours) * 60 + mMinutes) * 60 + mSeconds) == + ((((other.mWeeks * 7 + other.mDays) * 24 + other.mHours) * 60 + other.mMinutes) * 60 + other.mSeconds) ) && + valid == other.valid );}; + int weeks() const { return mWeeks; }; + int days() const { return mDays; }; + int hours() const { return mHours; }; + int minutes() const { return mMinutes; }; + int seconds() const { return mSeconds; }; + + bool isNegative() const { return mNegative; }; + bool isValid() const { return valid; }; +private: + int mWeeks; + int mDays; + int mHours; + int mMinutes; + int mSeconds; + bool mNegative; + bool valid; +}; + +struct ContactReference { + enum ReferenceType { + Invalid, + EmailReference, + UidReference, + EmailAndUidReference + }; + ContactReference(): mType(Invalid) {}; + ///For xCal + ContactReference(const std::string &email, const std::string &name = std::string(), const std::string &uid = std::string()): mType(EmailAndUidReference), mEmail(email), mUid(uid), mName(name) {}; + ///For xCard + ContactReference(ReferenceType type, const std::string &emailOrUID, const std::string &name = std::string()): mType(type), mName(name) { + if (type == EmailReference) { + mEmail = emailOrUID; + } else { + mUid = emailOrUID; + } + }; + bool operator==(const ContactReference &other) const { return mEmail == other.mEmail && + mName == other.mName && + mUid == other.mUid; + }; + + bool isValid() const { return mType != Invalid; }; + + void setName(const std::string &name) { mName = name; }; + + std::string email() const { return mEmail; }; + std::string uid() const { return mUid; }; + std::string name() const { return mName; }; + + ReferenceType type() const { return mType; }; + +private: + ReferenceType mType; + std::string mEmail; + std::string mUid; + std::string mName; +}; + +class Alarm { +public: + enum Type { + InvalidAlarm, + EMailAlarm, + DisplayAlarm, + AudioAlarm + }; + + Alarm(); + Alarm(const Alarm &); + ~Alarm(); + + void operator=(const Alarm &); + bool operator==(const Alarm &other) const; + + ///EMail Alarm, @param attendees accepts only email + name and no uid + Alarm(const std::string &summary, const std::string &description, const std::vector<ContactReference> attendees); + std::string summary() const; + std::string description() const; + std::vector<ContactReference> attendees() const; + + ///Display Alarm + Alarm(const std::string &text); + std::string text() const; + + ///Audio Alarm + Alarm(const Attachment &audio); + Attachment audioFile() const; + + void setRelativeStart(const Duration &, Relative); + Duration relativeStart() const; + Relative relativeTo() const; + + void setStart(const cDateTime &); + cDateTime start() const; + + void setDuration(const Duration &, int numrepeat); + Duration duration() const; + int numrepeat() const; + + Type type() const; + +private: + struct Private; + boost::scoped_ptr<Private> d; +}; + + +class RecurrenceRule { +public: + + RecurrenceRule(); + RecurrenceRule(const RecurrenceRule &); + ~RecurrenceRule(); + + void operator=(const RecurrenceRule &); + bool operator==(const RecurrenceRule &other) const; + + enum Frequency { + FreqNone, + Yearly, + Monthly, + Weekly, + Daily, + Hourly, + Minutely, + Secondly + }; + + void setFrequency(Frequency); + Frequency frequency() const; + + void setWeekStart(Weekday); + Weekday weekStart() const; + + void setEnd(const cDateTime &); + cDateTime end() const; + + void setCount(int count); + int count() const; + + void setInterval(int); + int interval() const; + + void setBysecond(const std::vector<int> &); + std::vector<int> bysecond() const; + + void setByminute(const std::vector<int> &); + std::vector<int> byminute() const; + + void setByhour(const std::vector<int> &); + std::vector<int> byhour() const; + + void setByday(const std::vector<DayPos> &); + std::vector<DayPos> byday() const; + + void setBymonthday(const std::vector<int> &); + std::vector<int> bymonthday() const; + + void setByyearday(const std::vector<int> &); + std::vector<int> byyearday() const; + + void setByweekno(const std::vector<int> &); + std::vector<int> byweekno() const; + + void setBymonth(const std::vector<int> &); + std::vector<int> bymonth() const; + + bool isValid() const; + +private: + struct Private; + boost::scoped_ptr<Private> d; +}; + + +enum PartStatus { + PartNeedsAction, + PartAccepted, + PartDeclined, + PartTentative, + PartDelegated +}; + +enum Role { + Required, + Chair, + Optional, + NonParticipant +}; + +enum Cutype { + CutypeUnknown, + CutypeGroup, + CutypeIndividual, + CutypeResource, + CutypeRoom +}; + +class Attendee { +public: + Attendee(); + Attendee(const ContactReference &contact); + Attendee(const Attendee &); + ~Attendee(); + + void operator=(const Attendee &); + bool operator==(const Attendee &) const; + + bool isValid() const; + + void setContact(const ContactReference &); + ContactReference contact() const; + + void setPartStat(PartStatus); + PartStatus partStat() const; + + void setRole(Role); + Role role() const; + + void setRSVP(bool); + bool rsvp() const; + + void setDelegatedTo(const std::vector<ContactReference> &); + std::vector<ContactReference> delegatedTo() const; + + void setDelegatedFrom(const std::vector<ContactReference> &); + std::vector<ContactReference> delegatedFrom() const; + + void setCutype(Cutype); + Cutype cutype() const; +private: + struct Private; + boost::scoped_ptr<Private> d; +}; + +struct CustomProperty { + CustomProperty(){}; + CustomProperty(const std::string &i, const std::string &v) + : identifier(i), value(v) {}; + + bool operator==(const CustomProperty &other) const{ return (identifier == other.identifier && value == other.value);}; + std::string identifier; + std::string value; +}; + +//WARNING this function copies the vector and does not modify it +template <typename T> +std::vector<T> operator<< ( std::vector<T> v, const T &s) +{ + v.push_back(s); + return v; +} + + +} + +#endif |